Java的static方法为什么不允许直接使用非static的变量
2014-11-04 21:26
776 查看
在学习java时我们都知道:
1. 非静态方法可以访问类中非static和static的变量
2.静态方法只能直接访问静态变量
例如:
<span style="font-family:Courier New;font-size:14px;">public class Test {
private static String name = "wahaha";
private int age = 20;
public void testNoStaticMethod() {
System.out.println(name);
}
public static void testStaticMethod(){
System.out.println(name);
}
public static void main(String[] args) {
System.out.println(name);
System.out.println(new Test().age);
}
}</span>
上面所说的情况对应以上代码的testNoStaticMethod()和testStaticMethod()方法。
如果我们在testStaticMethod()方法中打印age 编译器则会报错,但是我们看到在main()方法中却能访问到age。为、i什么会这样呢?
其实这个问题不难解释,被static修饰的Fiels和Method是属于某个类的Class对象的,不属于该类的某个实例,被类的多个实例所共享。我们都知道,一个类不管有多少个实例,但只有唯一的一个Class对象和class文件所对应。
1. 非静态方法可以访问类中非static和static的变量
2.静态方法只能直接访问静态变量
例如:
<span style="font-family:Courier New;font-size:14px;">public class Test {
private static String name = "wahaha";
private int age = 20;
public void testNoStaticMethod() {
System.out.println(name);
}
public static void testStaticMethod(){
System.out.println(name);
}
public static void main(String[] args) {
System.out.println(name);
System.out.println(new Test().age);
}
}</span>
上面所说的情况对应以上代码的testNoStaticMethod()和testStaticMethod()方法。
如果我们在testStaticMethod()方法中打印age 编译器则会报错,但是我们看到在main()方法中却能访问到age。为、i什么会这样呢?
其实这个问题不难解释,被static修饰的Fiels和Method是属于某个类的Class对象的,不属于该类的某个实例,被类的多个实例所共享。我们都知道,一个类不管有多少个实例,但只有唯一的一个Class对象和class文件所对应。
相关文章推荐
- Java基础问题:static方法中为什么不能使用非static的方法或变量
- 5-2 Java 中的 static 使用之静态变量 ;;Java 中的 static 使用之静态方法;;Java 中的 static 使用之静态初始化块
- 【Java】Static使用之静态变量,静态方法,静态初始化块
- Java基础--关于static的变量和方法使用的一些不解
- Java 中,为什么在静态方法中可以调用的方法、可以使用的成员变量必须是静态的?
- Java中的static使用之静态变量、静态方法和静态初始化块
- Java 中的 static 使用之静态变量,静态方法和静态初始化块
- java中静态方法中为什么不能使用this、super和直接调用非静态方法
- java中static变量和方法的总结
- Java的main方法为什么是public static的?
- Java中的static变量、方法、代码块
- C++ 把枚举变量的名称,直接当字符串使用方法 字符串化符号 #
- java.lang.System 的in是final的,为什么要有public static void setIn(InputStream in)方法?
- Java 有几程方法可以实现一个线程?用什么关键字修饰同步?stop()和suspend()为什么不推荐使用?
- Java中的static变量、方法、代码块
- 对Java方法内部使用this访问成员变量的深入理解
- 为什么 Java 接口中不允许定义变量
- 【转】static和extern的区别;当使用另外一个文件中的变量、类、方法时,什么时候改用extern声明,什么时候该include?
- java中interface中的方法为什么不能是static方法?
- java中static变量与非static变量初始化顺序