一般資料及方法須建立物件才可使用,但具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 程式位元碼檔名稱 參數值1 參數值2 參數值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
1:apple
2:orange
3:pear
[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
1:100
C:\js>java mainArg2 100 200
1:100
2:200
方法多載(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
沒有留言:
張貼留言