Java学习第二十五天<方法重载><可变参数><作用域基本使用>


方法重载

  1. 方法名必须相同

  2. 形参列表(类型,个数,顺序至少一样)必须不同,否则重定义

  3. 返回类型无要求

package chapter06.D6方法重载;
?
public class OverLoadExercise {
  public static void main(String[] args) {
      Methods method = new Methods();
      method.m(10);//100
      method.m(10,20);
      method.m("征途");
  }
}
class Methods{
  public void m (int n){
      System.out.println("平方="+(n*n));
  }
  public void m (int n1,int n2){
      System.out.println("相乘="+(n1*n2));
  }
  public void m (String str){
      System.out.println("传入的str="+str);
  }
}

 

package chapter06.D6方法重载;
?
public class OverloadExercise2 {
  public static void main(String[] args) {
      Methods2 methods2 = new Methods2();
      System.out.println(methods2.max(10,24));
      System.out.println(methods2.max(10,24,21.4));//自动转化
  }
}
class Methods2{
  public int max(int n1,int n2){
      return n1>n2?n1:n2;
  }
  public double max(double n1,double n2){
      return n1>n2?n1:n2;
  }
  public double max(double n1,double n2,double n3){
      double max1=n1>n2?n1:n2;
      return max1>n3?max1:n3;
  }
}

 

可变参数

package chapter06.D7可变参数;
?
public class VarParameter {
  public static void main(String[] args) {
      Method m = new Method();
      System.out.println(m.sum(1,5,6));
?
  }
}
class Method{
  public int sum(int...nums){//可变参数,可接受多个int nums当做数组来使用
      /* System.out.println("接收的参数个数="+ nums.length);
      return 25;//return几都行
?
      */
      int res=0;
      for (int i = 0; i < nums.length; i++) {
          res+=nums[i];
      }
      return res;
  }
}

 

package chapter06.D7可变参数;
?
public class VarParameterDetail {
  public static void main(String[] args) {
      int[]arr={1,2,3};
      T t1 = new T();
      t1.f1(arr);
?
  }
}
class T{
  public void f1(int...nums){//可变参数本质就是数组
      System.out.println("长度="+ nums.length);
  }
  public void f2(String str,double...nums){//可变参数可以和普通类型参数一起放在形参列表,但可变参数要在后,并只能出现一次
      System.out.println("长度="+ nums.length);
  }
}

 

package chapter06.D7可变参数;
?
public class VarParameterExercise {
  public static void main(String[] args) {
      Method2 hm = new Method2();
      System.out.println(hm.showScore("milan",90.1,80.0));
      System.out.println(hm.showScore("terry",90.1,80.0,60.2,75.6));
?
  }
}
class Method2{
  public String showScore(String name,double...scores){
      double totalScore=0;
      for (int i = 0; i           totalScore +=scores[i];
      }
      return name+" 有 "+scores.length+"门课的成绩总分为="+totalScore;
  }
}

 

作用域基本使用

package chapter06.D8作用域基本使用;
?
public class VarScope {
  public static void main(String[] args) {
      Cat cat = new Cat();
      cat.cry();
      cat.eat();
  }
?
}
class Cat{
  int age=10;//全局变量(属性,可赋值,不赋值为默认值),作用域为Cat整个类体
  int salary;
  {
      int num=100;//局部变量,无默认值,作用在代码块中
  }
?
  public void cry(){
      int n=10 ;//局部变量,必须赋值,作用域在cry方法中
      String name="jack";//局部变量
      System.out.println("在cry中使用属性 age="+age);
      System.out.println("cry局部变量 n="+n);
  }
  public void eat(){
      System.out.println("在eat中使用属性 age="+age);//name,num就不能用
      System.out.println("在eat中使用属性 salary="+salary);
  }
}

 

package chapter06.D8作用域基本使用;
?
public class VarScopeDetails {
  public static void main(String[] args) {
      Person p1 = new Person();
      p1.say();//当执行say方法时 say方法的局部变量如name会创建,say执行完后name局部变量就销毁,但属性(全局变量)还可用
      System.out.println(p1.name);
      T t = new T();
      t.test();
      t.test2(p1);
?
?
  }
}
class Person{
  public int age=20;//属性可以加修饰符 protected private
  String name="jack";
  public void say(){
      //细节 属性和局部变量可以重名,访问时遵循就近原则
      String name = "king";//局部变量不能加修饰符
      System.out.println("say()name="+name);//king
  }
  public void hi(){
      String address="北京";
      String name="上海";
?
  }
}
class T{
  public void test(){
      Person p1 = new Person();
      System.out.println(p1.name);//new别的类以后可以使用别的类属性
  }
  public void test2(Person p){
      System.out.println(p.name);//也可传别的类的对象来使用属性
  }
}

 

相关