java - 努力理解访问修饰符和关键字 "static"的影响

标签 java access-modifiers

我是 Java 的新手。我刚刚写了一个小例子来观察访问修饰符的效果。也许代码没有多大意义,因为我只是在测试。

第一个代码片段如下所示:

class Tet {
    static double a;
    double b;
    public Tet(double a, double b){
        this.a=a;
        this.b=b;
    }
    
    public void get(){
        a=5;
        
    }
    
    public static void main(String[] args){
        Tet tet1 = new Tet(2, 5);
        Tet tet2 = new Tet(4, 5);
        System.out.println(tet1.a);
        a=4;
        System.out.println(tet1.a);
        tet1.get();
        System.out.println(tet1.a);
        System.out.println(a);
        
    }
}

在此之后,我对代码进行了一些修改并再次编译:

class Tet {
    static double a;
    double b;
    public Tet(double a, double b){
        this.a=a;
        this.b=b;
    }
    
    public static void get(){
        a=5;
        
    }
    
    public static void main(String[] args){
        Tet tet1 = new Tet(2, 5);
        Tet tet2 = new Tet(4, 5);
        System.out.println(a);
        get();
        System.out.println(tet1.a);
        System.out.println(a);
        System.out.println(tet2.a);
        
    }
}

运行后,cmd 如下所示: enter image description here

我真的不知道4号是从哪里来的。

最佳答案

每个类只有一个静态字段实例。

在这种情况下,有一个 a 实例。因此,当您创建 tet2 实例 Tet tet2 = new Tet(4, 5); 时,只需将其值设置为 4。

关于java - 努力理解访问修饰符和关键字 "static"的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73589165/

相关文章:

java - 线程 "Thread-0"java.lang.reflect.InaccessibleObjectException 中出现异常

JavaFx:绑定(bind)列重新排序

Java - 子类中的 protected 变量是什么类型?

ios - 公共(public)与内部访问修饰符

java - 为什么我的程序不打印非常大的数字(在长范围内)的任何内容?

java - 结果集到通用列表列表

java - 将子类类型(整数/字符串)插入到ArrayList中的父类(super class)类型(对象)中

C# - 快速观察中的内部属性 "readable"但不使用反射?

java - 混淆何时使用私有(private)字段与 protected 字段

objective-c - 如何在 Obj-C 或 Swift 中访问私有(private)实例变量?