Java 在类级别和在方法中声明对象之间的区别
Java 在类级别和在方法中声明对象之间的区别,java,class,variables,Java,Class,Variables,A是测试之外的另一个类 案例1: public class Test{ A testObj; public static void main(String[] args){ testObj=new A(); testObj.methodInsideClassA(); } } public class Test{ public static void main(String[] args){
A
是测试之外的另一个类
案例1:
public class Test{
A testObj;
public static void main(String[] args){
testObj=new A();
testObj.methodInsideClassA();
}
}
public class Test{
public static void main(String[] args){
A testObj = new A();
testObj.methodInsideClassA();
}
}
案例2:
public class Test{
A testObj;
public static void main(String[] args){
testObj=new A();
testObj.methodInsideClassA();
}
}
public class Test{
public static void main(String[] args){
A testObj = new A();
testObj.methodInsideClassA();
}
}
那么它们之间有什么区别呢?我应该使用什么?如果这个对象应该在一些方法运行之间共享,那么您应该使用第一个选项。在其他情况下(临时对象),您应该使用第二个。在
A
的实例/对象范围内两个声明之间的差异
在第一种情况下,testObj
可以从类的all方法Test
在第二种情况下,只能通过类Test
的main()
方法访问testObj
。而main()
方法终止时testObj
也从内存中删除
你必须使用什么取决于具体情况。假设在某些情况下,您在Test
类的所有部分都需要A
的实例(即testObj
),这意味着类的多个方法Test
使用相同的A
实例。然后在类Test
的所有方法之外声明testObj
——这是一个实例变量
当类的不同方法Test
需要不同的A
实例时,您可以使用方法局部变量,如案例2所示 案例1
testObj是一个类级变量
案例2
testObj是一个局部变量。
局部变量是在方法或构造函数中声明的变量
类级别变量和局部变量之间的一个重要区别是,访问说明符只能应用于类级别变量,而不能应用于局部变量
case1
testObj需要声明为static
才能编译(因此,是一个)不确定这是不是“似曾相识”,或者我是否在这个网站上多次遇到过这个问题,以至于我懒得把它标记为重复的。@copeg我编译了一个类似case1的程序,但没有声明testObjstatic@devilakos如果您能够编译它,那么它就不是“案例1”那样的。您应该记住,main
是一种static
方法。我猜你的程序(或者你所说的“类似案例1”的方法)不是静态的。实例变量从什么时候开始停止依赖此?因此这与普通变量(int、float、char等)声明类似,谢谢。。还有一个问题……如果我使用第一种情况(在类级别上创建一个对象),那么每次我想在我的类的另一个方法上使用它时,我都必须给它赋值,还是初始化后它的值将保留在内存中?从什么时候开始实例变量不再依赖于这个?@ChetanKinger我在哪里这么说的?