如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。

2005年11月24日

[超基本] Java Static and non-Static


重點: Class 未被初始化(New instance)以前static method只能存取static variable 與 local variable
如下面範例 c2,c3,c4,c5無法被static method - main所存取

public class j0227 extends Object {
static int c1=5;
public int c2=6;
private int c3=7;
final int c4=8;
int c5=0;
public static void main(String args[]) {
int c6=4;
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
System.out.println(c4);
System.out.println(c5);
System.out.println(c6);
}
}

/*
產生compile error如下:
E:\JavaExercise\Fred>javac -d . j0227.java
j0227.java:10: non-static variable c2 cannot be referenced from a static context
System.out.println(c2);
^
j0227.java:11: non-static variable c3 cannot be referenced from a static context
System.out.println(c3);
^
j0227.java:12: non-static variable c4 cannot be referenced from a static context
System.out.println(c4);
^
j0227.java:13: non-static variable c5 cannot be referenced from a static context
System.out.println(c5);
*/

同樣,Class 未被初始化(New instance)以前static method(如main)不能呼叫non-static的method。

public class TypeConversion {
public static void main(String[] args){
int a = 10;
long b = testConvert(a);    // 這行會發生錯誤,因為class TypeConversion 尚未初始化
System.out.println(b);
}
long testConvert(long a) {
return a;
}
}
只要改成這樣就可以了
(1)
public class TypeConversion {
public static void main(String[] args){
int a = 10;
TypeConversion1 t = new TypeConversion(); // 加上這行初始化物件
long b = t.testConvert(a);  // 改一下
System.out.println(b);
}
long testConvert(long a) {
return a;
}
}

(2)
public class TypeConversion {
public static void main(String[] args){
int a = 10;
Conversion c = new Conversion();  // 初始化另一個class "Conversion"物件

long b = c.testConvert(a);   // 呼叫這個物件的 method
System.out.println(b);
}
}
class Conversion {        // method放在另一個class
long testConvert(long a) {
return a;
}
}

沒有留言:

張貼留言

歡迎提供意見, 謝謝 (註 : 留言經過版主審核通過才會發布)