所有实例变量都声明在函数外吗?

Are all instance variables declared outside functions?

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

第一种方法是根据作用域class将它们化为全局变量和局部变量。当变量可由 class 的实例的所有方法访问时,即在整个 class 中,则它被称为全局变量,并且当它只能在代码块中访问时class 的实例称为局部变量。

第二种方式是class化为class/staticinstance/non-static变量。 Class/static 变量是那些属于 class 的变量,这些变量只有一个副本存在于 class 的所有实例中,并由它们共享。实例变量是那些属于 class 实例的变量,并且为每个实例创建一个单独的副本。

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

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

编辑:

这是@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
    }
}

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

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

静态变量是属于class自身的class级变量,因此维护一份,供所有classes/objects使用。它们在 class 被 class 加载程序加载时被激活,并在 class 被卸载时死亡。

实例变量绑定到 class 的实例,即对象。因此,每个创建的对象都有一个变量副本。基于访问修饰符,对其在 class 之外的使用施加了限制(通常设为私有并通过 getter 和 setter 访问)。当一个实例被创建时它们被激活,当垃圾收集器发现该对象没有指向它的 valid/in-use 引用时它们就会死亡。

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

    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;
    }

}

希望这对您有所帮助:)