public class test { int a=10; pulblic static void main(String [] args) { test test=new test(); System.out.print(test.a); } } 静态method被调用时没有传入this指针作为参数,所以就无法访问this.a, 但是在上面的代码中访问的是test.a,因为test所引用的对象你已经创建了,所以你当然就可以访问test.a了。所以理解这个问题的关键就是this指针的问题
打个比方: 人是看成类,那么我和你便是人这个类的实例(对象) 静态成员和静态方法是属于类的,你不必创建对象便可 直接使用静态方法和变量,请看下面的例子public class test { static int a=10; pulblic static void main(String [] args) { int k=0; k=test.a //不必生成test这个类的对象 System.out.print(k); } } 另外 在静态的方法里面不可应用非静态的变量 但是,反过来就可以, 在非静态的方法中可以应用静态的变量
实例有的时候是动词,有的时候是名词,再做名次的时候和对象是一个含义
类是class
对象是object
引用是 referrence
实例还有一层含义是instance
public class test
{
int a=10;
pulblic static void main(String [] args)
{
test test=new test();
System.out.print(test.a);
}
}
静态method被调用时没有传入this指针作为参数,所以就无法访问this.a, 但是在上面的代码中访问的是test.a,因为test所引用的对象你已经创建了,所以你当然就可以访问test.a了。所以理解这个问题的关键就是this指针的问题
人是看成类,那么我和你便是人这个类的实例(对象)
静态成员和静态方法是属于类的,你不必创建对象便可
直接使用静态方法和变量,请看下面的例子public class test
{
static int a=10;
pulblic static void main(String [] args)
{
int k=0;
k=test.a //不必生成test这个类的对象
System.out.print(k);
}
} 另外
在静态的方法里面不可应用非静态的变量
但是,反过来就可以,
在非静态的方法中可以应用静态的变量
不需要对象就可以调用 只要把这个类载入了内存 静态方法就是存在的而那些非静态方法和非静态成员。
只有声明了这个类的实例以后 才会存在
所以不能在静态方法里直接调用非静态方法和静态成员 不过可以在静态方法里声明对象
然后再通过对象调用这非静态方法 或者非静态成功 这样是允许的
比如:
class A {
int age = 15;
static viod getAge() {
System.out.println(age); //错! 不能调用非静态成员
A a = new A();
Systemout.println(a.age); //正确 可以通过对象来调用非静态成员
}
}
public static int add(int a,int b){
return a+b;
}}
class TestStaticMain{
public static void main(String[] args)
{
System.out.println(TestStatic.add(1,2));
}
}