1. 程式人生 > 其它 >Java學習第二十五天<方法過載><可變引數><作用域基本使用>

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 <scores.length ; 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);//也可傳別的類的物件來使用屬性
  }
}