【问题标题】:difference between declaring an object on class level and in methods在类级别和方法中声明对象之间的区别
【发布时间】:2015-05-31 16:05:07
【问题描述】:

A 是测试之外的另一个类

案例 1:

public class Test{



      A testObj;

      public static void main(String[] args){
         testObj=new A();
         testObj.methodInsideClassA();
      }
}

案例 2:

 public class Test{


      public static void main(String[]  args){
         A testObj = new A();
         testObj.methodInsideClassA();
      }
}

那么它们之间的区别是什么?我应该使用什么?

【问题讨论】:

  • Case 1 testObj 需要声明为static 才能编译(因此是static variable
  • 不知道是Déjà vu还是我在这个网站上遇到这个问题的次数太多了,以至于我都懒得把它标记为重复了。
  • @copeg 我已经编译了一个类似案例 1 的程序,但没有声明 testObj 静态
  • @devilakos 如果您能够编译它,那么它就不像“案例 1”。您应该注意,mainstatic 方法。我猜你的程序(或者你的意思是“case 1 like”的方法)不是静态的。

标签: java class variables


【解决方案1】:

案例一

testObj 是一个类级变量。

案例 2

testObj 是一个局部变量。 局部变量是在方法或构造函数中声明的变量。

类级变量和局部变量之间的一个重要区别是访问说明符只能应用于类级变量,不能应用于局部变量。

【讨论】:

    【解决方案2】:

    如果这个对象应该在一些方法运行之间共享,你应该使用第一个选项。在其他情况下(临时对象),您应该使用第二个。

    【讨论】:

    • 实例变量什么时候停止依赖this
    • @ChetanKinger 我在哪里说的?
    【解决方案3】:

    A 的实例/对象范围内的两个声明的区别。

    在第一种情况下,testObj 可以从 Test 类的 all 方法中访问 在第二种情况下,testObj 只能从类Testmain() 方法访问。而main() 方法终止,testObj 也从内存中删除。

    你必须使用它取决于情况。假设在某些情况下,您需要在整个 Test 类中使用 A 的实例(即 testObj ) - 意味着类 Test 的多个方法使用 A 的相同实例。然后你在类Test 的所有方法之外声明testObj - 即作为实例变量。

    Test 类的不同方法需要A 的不同实例时,您可以使用方法局部变量,如情况2。

    【讨论】:

    • 实例变量什么时候停止依赖this
    • 所以这就像普通变量(int、float、char 等)声明一样工作,谢谢......还有另一个问题......如果我使用第一种情况(在类级别创建一个对象)我会有每次我想在我的类的另一个方法上使用它时为其分配一个值,否则它的值将在初始化后保留在内存中?
    猜你喜欢
    • 1970-01-01
    • 2015-11-03
    • 2014-10-19
    • 1970-01-01
    • 2012-10-26
    • 2016-04-20
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    相关资源
    最近更新 更多