示例:静态方法内部,不能访问非静态的成员变量和非静态的方法
class A{
private String name;
public void test(){
// Modifier 'static' is not allowed here
// 修饰符
// static String id;
}
static void staticTest(){
// Non-static field 'name' cannot be referenced from a static context
System.out.println(name);
// Non-static method 'test()' cannot be referenced from a static context
test();
}
}
但是,可以通过传递一个对象的引用到静态方法里,然后通过这个引用来调用非静态的变量和方法。
结论:
静态方法内部,不能直接访问非静态的成员变量和非静态的方法
class A{
private static int id;
private String name;
public void display(){
}
public static void test(A a){
// Modifier 'static' is not allowed here
// 修饰符
// static String id;
System.out.println(a.name);
a.display();
}
}
示例:静态方法内部,能访问静态的成员变量和静态的方法
class A{
private static int id;
public static void test(){
// Modifier 'static' is not allowed here
// 修饰符
// static String id;
}
static void staticTest(){
System.out.println(id);
test();
}
}
总结:
static 修饰符
静态变量:
对于静态变量来说,无论一个类实例化多少对象,它的静态变量只有一份拷贝。静态变量也被称为类变量。局部变量不能被声明为 static 变量。
示例:
public class Test {
public static void main(String[] args) {
A a1 = new A();
a1.test();
A a2 = new A();
a1.test();
}
}
class A{
private static int id;
public static int getId() {
return id;
}
public static void add(){
id++;
}
public void test(){
System.out.println("start:" + getId());
for (int i = 0; i < 10; i++) {
add();
}
System.out.println("end:" + getId());
}
}
输出结果:
start:0
end:10
start:10
end:20
静态方法:
静态方法不能访问类的非静态变量或方法。