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我在哪里这么说的?