微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么这段代码没有错误? j 是最终的和静态的,但仍然可以使用类的对象访问如何?

如何解决为什么这段代码没有错误? j 是最终的和静态的,但仍然可以使用类的对象访问如何?

interface TempInterface {
    static final int j = 30;
}
class TempClass implements TempInterface {
}
public class Try {

    public static void main(String args[]) {
    
        TempClass obj = new TempClass();
        
        System.out.println(obj.j);
        
    }
}

解决方法

在 Java 中,static 关键字表示该变量可以被类的每个对象访问。 Java 强制接口中的每个变量都是静态和最终变量,因此实现它的类的每个对象都可以访问该变量,但不能更改它。

,

静态变量只不过是类的所有实例共享的固定内存位置(因为它属于类本身)。这意味着所有实例都可以访问它,因为它们知道它的位置。但是请注意,如果您从实例而不是类引用访问静态字段,通常会令人不悦。

有关更多信息,我建议您阅读Oracle's tutorial regarding class variables。引用一个部分:

有时,您希望拥有所有对象共有的变量。这是通过 static 修饰符完成的。在声明中带有 static 修饰符的字段称为静态字段类变量。它们与类相关联,而不是与任何对象相关联。类的每个实例共享一个类变量,该变量位于内存中的一个固定位置。任何对象都可以改变类变量的值,但也可以在不创建类的实例的情况下操作类变量。

关于接口,您可以将它们视为特殊类型的类,因此通过实现接口,您也可以继承其所有数据(即静态变量)。

,

静态意味着您无需创建新实例即可访问,最终意味着 - 您无法更改,但您可能会获得此权限。

我还可以注意到哪些接口变量可以从另一个包中访问,因为它也是隐式公开的(静态和最终)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。