关于java成员变量声明的问题
在一些java文件中,可以把自身声明成员变量,这样的话怎么理解啊?编译解释的时候是怎么解释的?如下面的程序publicclassT{Tt;publicvoidsayHel...
在一些java文件中,可以把自身声明成员变量,这样的话怎么理解啊?编译解释的时候是怎么解释的?如下面的程序
public class T {
T t;
public void sayHello(){
System.out.println("hello我叫xx");
t = new T();
t.sayBye();
}
public void sayBye(){
System.out.println("bye bye 咯");
}
}
public class test {
public static void main(String[] args) {
T t = new T();
t.sayHello();
}
}
怎么理解上面那种现象啊?请高手赐教! 展开
public class T {
T t;
public void sayHello(){
System.out.println("hello我叫xx");
t = new T();
t.sayBye();
}
public void sayBye(){
System.out.println("bye bye 咯");
}
}
public class test {
public static void main(String[] args) {
T t = new T();
t.sayHello();
}
}
怎么理解上面那种现象啊?请高手赐教! 展开
2个回答
展开全部
可以把自身“声明”成员变量。楼主应该会C语言把声明和定义是不同的,声明不会产生实际的对象,而定义就会有实体产生。
我知道楼主的困惑:你是把声明想想定义了,就像上面的T类。T t;这里只是声明了一个T的的索引t。就是C语言中的指针。(由于java只有通过 new 才能产生实体所以可以这样写。如果是C/C++的话就必须是 T *t;了)由于这里只是一个索引(就像C中的指针),所以编译的时候就应该会按照索引的大小编译(就像C指针的值 一般4字节的)。这样一个T类的实体的大小事确定的,不会存在循环生成实体的问题。
t = new T();
到了这里才会产生t的实体(就是内存存在)。
我知道楼主的困惑:你是把声明想想定义了,就像上面的T类。T t;这里只是声明了一个T的的索引t。就是C语言中的指针。(由于java只有通过 new 才能产生实体所以可以这样写。如果是C/C++的话就必须是 T *t;了)由于这里只是一个索引(就像C中的指针),所以编译的时候就应该会按照索引的大小编译(就像C指针的值 一般4字节的)。这样一个T类的实体的大小事确定的,不会存在循环生成实体的问题。
t = new T();
到了这里才会产生t的实体(就是内存存在)。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询