java成员变量和局部变量的调用?

来源:百度知道 编辑:UC知道 时间:2024/09/25 07:25:00
public class Test{
public int i;
public static void main(String args[]){
//System.out.println(i); 为什么这个非法调用,能解释一下吗?
Test t = new Test();
System.out.println(t.i);/*为什么要这样才能调用?是不是java中有这样的有关于 成员变量和局部变量调用的规则,谁知道,说明一下*/

int j = 2;
System.out.println(j);//这样是可以
}
}
public int i;//成员变量

1 属性i属于类的非静态变量,而你的main是静态方法,所以不能直接使用

必须2那样,先new一个对象的实例,才能使用。

2 如果是
public static int i

这就可以直接用了

一、从内存的角度来讲:
public int i;只是声明有这个变量而没有真正分配内存,所以调用的时候会找不到存储地址,
当你使用Test t = new Test();
System.out.println(t.i);的时候实际上是构造函数为i 赋了初始值0;

int j=2;经过了初始化,所以分配了内存地址,所以不会有问题。
二、从java语言角度讲,实际上就是概念问题了。在静态的方法中不能使用非静态变量。

我也是个初学者,哈哈,是个好问题。
你自己多试几次,再看看static的定义就知道为什么了。