本来我对static没有疑问,但是看了Thinking in java中5.4.2节中有这样一个话“在static方法的内部不能调用非静态方法”,这也没什么疑问,但是这句话有个注释:“这不是完全不可能。如果你传递一个对象的引用到静态方法里(静态方法可以创建其自身对象),然后通过这个引用(和this效果相同),你就可以调用非静态方法和访问非静态数据成员了。”请各位大牛为小弟解惑啊,如果能编个实际的例子说明注释的问题就更好了,小弟先拜谢了!!
调试欢乐多
d.methodDa();
}
shi_crow是正解!
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
sb.append("A");
staticMethod(sb);
}public static String staticMethod(StringBuilder sb){
sb.append(" append in static Method");
return sb.toString();
}
static int intStaticValue = 1;
int intNonStaticValue = 2;
public static void displayInt(int number){
System.out.println(number);
}
public static void main(String args[]){
displayInt(intStaticValue);//静态方法引用静态属性
//displayInt(intNonStaticValue);//静态方法不能直接引用非静态属性
displayInt(new TestStatic().intNonStaticValue);//通过实例化对象引用非静态属性
}
}
public static void test(A a){
System.out.println("str");
a.test(5); // 这个可以通过编译
test(5);//这个是静态方法调用非静态方法,所以这个同不过编译
}
public void test(Integer in){
System.out.println("in");
}}
d.methodDa();
}
____________
支持,简单明了
public class TestStatic {
static int intStaticValue = 1;
int intNonStaticValue = 2;
public static void displayInt(TestStatic a){
System.out.println(intStaticValue);//静态方法内部引用静态属性
//System.out.println(intNonStaticValue);静态方法内部不能引用非静态属性,因此不能通过编译
a.testA();//通过对象引用调用非静态方法
}
public static void displayInt(int number){
System.out.println(number); }
public void testA(){
System.out.println("非静态方法testA被调用了");
}
public void testB(){
System.out.println("testB开始了:");
displayInt(intStaticValue);//非静态方法内部调用静态方法
}
public static void main(String args[]){
displayInt(intStaticValue);//静态方法引用静态属性
//displayInt(intNonStaticValue);//静态方法不能直接引用非静态属性
displayInt(new TestStatic().intNonStaticValue);//通过实例化对象引用非静态属性
TestStatic b=new TestStatic();
displayInt(b);
displayInt(new TestStatic());//通过实例化对象引用非静态属性
b.testB();
}
}