2015年7月5日 星期日

13 方法(2)

13   方法(2)
static關鍵字
[靜態(static)及非靜態(non-static)資料及方法]
一般資料及方法須建立物件才可使用,但具static屬性之資料及方法則可不須建立物件即可直接使用,稱為靜態資料及靜態方法。
靜態資料只會在記憶體上建立一份資料,即使建立物件亦共用同一份資料。但非靜態資料則各物件擁有各自的資料,換言之,在記憶體上會建立多份資料,且各自獨立互不相干。

[屬於靜態的主方法]
主方法為程式執行的起點,主方法因需要所在的主類別不建立物件就可執行,故須為靜態方法。
主類別內不在主方法或一般方法內宣告的資料(欄位),但卻於主方法內存取者,須宣告為靜態資料的方可使用。

[靜態之宣告方式]
[靜態資料(static data)]
前置static,例:
static int mathscore;
static int engscore = 59;

[靜態主方法(static main method)]
public static void main(String[] args){                 }

[靜態一般方法(static method)]
public static int genmd(int x){                        }

*詳細說明見後續章節。




[主方法的命令列參數]
由命令列執行Java程式時,可輸入數個參數。

格式:
java 程式位元碼檔名稱  參數值參數值參數值3........

執行時指定參數值:
java MainArg1 apple orange pear

[範例]
class MainArg1{
  public static void main(String[ ] args){
    int i ;
    if (args.length<3){
          System.out.println("請輸入3個命令列參數。") ;
          System.exit(1);
         }
    else {
          for(i = 0 ; i < args.length ; i++)
          System.out.println((i+1) + "" + args[i]) ;
         }
  }
}
執行結果:
C:\js>java MainArg1
請輸入3個命令列參數。

C:\js>java MainArg1 apple orange pear
1apple
2orange
3pear



[主方法命令列參數相關函式]
[args.length函式]
args.length為取得命令列輸入參數個數之函式。
[範例]
如前例。

[Integer.parseInt函式]
主方法命令列參數皆為字串資料型態,數字字串用於計算時,須先轉換為整數資料型態,此時可使用Integer.parseInt函式。
[範例]
class MainArg2{
  public static void main(String[ ] args){
    int i ;
    int j ;
    if (args.length==0){
          System.out.println("沒有命令列參數。") ;
          System.exit(1);
        }
    else {
          for(i = 0 ; i < args.length ; i++){
              j = Integer.parseInt(args[i]);
              System.out.println((i+1) + "" + j);
             }
//2行可併為System.out.println((i+1) + "" + Integer.parseInt(args[i])) ;
        }
  }
}
執行結果:
C:\js>java MainArg2
沒有命令列參數。

C:\js>java MainArg2 100
1100

C:\js>java mainArg2 100 200
1100
2200



方法多載(overload)

是在一個類別裡,定義參數的數量、型別不同,但名稱相同的多個方法,稱為方法多載。使用時會呼叫參數的數量、型別相同的方法。
class Score6 {
  void totalScore1(int a, int b, int c)
    int chi = a , eng = b , pro = c , totSco1 ;
    totSco1 = chi + eng + pro ;
    System.out.println("totSco1=" + totSco1) ;
  }
  void totalScore1(int a, int b)
    int chi = a , eng = b , totSco2 ;
    totSco2 = chi + eng ;
    System.out.println("totSco2=" + totSco2) ;
  }
  void totalScore1(double a)
    double chi = a ;
    System.out.println("國文=" + chi + "") ;
  }
}

class MainClass6{
  public static void main(String[ ] args) {
    Score6 so = new Score6( ) ;
      so.totalScore1(88,77) ; 
      so.totalScore1(88.8) ;
      so.totalScore1(90,60,70) ;
  }
}
執行結果:C:\js>java MainClass6
totSco2=165
國文=88.8

totSco1=220

沒有留言:

張貼留言