繁体   English   中英

是否在函数外声明了所有实例变量?

[英]Are all instance variables declared outside functions?

我知道变量可以用两种方式分类: -

第一种方法是根据范围将它们分类为全局变量和局部变量 当变量可由类的实例的所有方法访问时,即在整个类中,则它被称为全局变量,并且当它仅在类的实例中的代码块内可访问时,它是已知的作为局部变量。

第二种方法是将它们分类为类/静态实例/非静态变量 类/静态变量是属于该类的变量,并且对于类的所有实例仅存在这些变量的一个副本,并且它们由它们共享。 实例变量是属于类实例的变量,为每个实例创建单独的副本。

我的讲师说实例变量只能在函数外声明。 为什么会这样? 局部变量可以不是实例变量吗?

如果在方法中声明变量,则它是属于该方法的局部变量。 方法终止时,它将超出范围。 使变量属于实例的唯一方法是直接在类下声明它 - 即,在任何方法之外。

编辑:

这是@Yeikel建议的样本:

public class MyClass {

    private static int iAmAStaticMember = 1;

    private int iAmAnInstanceMember;

    public void someMethod() {
        int iAmALocalVariables = 4;
    }
}

如果它们在方法内声明,则它们仅在方法范围内。 方法运行后,变量将被销毁。

public class Something {

    int j = 0; // j lives as long as the class exists

    public doSomething() {
        int i = 0;
        // i is gone after method run
    }
}

只有全局变量可以分为实例和静态变量。 函数内部的变量是函数的局部变量,既不属于类也不属于对象。 实例变量属于对象,静态变量属于类。

在Java中,您有实例,静态和局部变量。

静态变量是属于类本身的类级变量,因此所有类/对象都维护和使用一个副本。 当类加载器加载类时,它们会被激活,而当类被卸载时它们会死掉。

实例变量绑定到类的实例,即对象。 因此,每个创建的对象都有一个变量的副本。 基于访问修饰符,对其在类外的使用施加限制(通常使其成为私有的并通过getter和setter访问)。 它们在创建实例时变为活动状态,并在垃圾收集器发现该对象没有指向它的有效/使用中引用时死亡。

局部变量是方法级变量,即它们是方法的本地变量。 这些变量是在调用方法时(以静态方式或通过对象引用)创建的,并在方法执行完成时死亡,或者换句话说,当方法将控制权返回给调用者时。

    class Demo {

    // static variable - can be accessed by any class/object
    public static int num1 = 1;

    // instance variable - accessed by all objects of this class; if made private, can use accessor methods to access it
    public int num2 = 2;

    // num3 is a local variable (method arguments are also local variables)
    public void getSum() {
        int num3 = 3;
        return num2 + num3;
    }

}

希望这可以帮助 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM