标签:定义 out ceshi 重复 inf href initial bubuko 测试
一:看代码找错误


二:java字段初始化规律
package 代码测试;
public class InitializeBlockClass {
    {field=200;}
    public int field=100;
    public InitializeBlockClass(int value) {
        this.field=value;
    }
    public InitializeBlockClass() {
        
    }
}
public class obj {
    public static void main(String[] args) {
        InitializeBlockClass obj=new InitializeBlockClass();
        System.out.println(obj.field);
        obj=new InitializeBlockClass(300); 
        System.out.println(obj.field);
    }
}
输出结果为:100 300
分析
1 {field=200;} 该部分为类的初始化模块,在类中直接将语句包围起来,直接作为类成员,像这种成员多用与初始化类的字段。
2 在 public int field=100; 定义时初始化,所以obj.field值为100
3 obj=new InitializeBlockClass(300); 
        System.out.println(obj.field);
利用构造方法初始化,将field的值初始化为300,输出为300;
4 Java字段初始化的规律:
静态初始化生成实例(new之后)变成你赋给他的值,先执行静态初始化,如果没有实例化,按照初始化和构造方法在程序中出现的顺序执行。
当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。
三:类字段的初始化顺序
1执行类成员定义时指定的默认值或类的初始化块,到底执行哪一个要看哪一个“排在前面”。
2 执行类的构造函数
类的初始化块不接收任何的参数,而且只要一创建类的对象,它们就会被执行。因此,适合于封装那些“对象创建时必须执行的代码
四:静态初始化的执行顺序

五:如何在静态方法中访问类的实例成员(即没有附加static)
package Test;
public class emm {
    public static void display() {
        System.out.println("吴林祥");
    }
    public void display1() {
        System.out.println("吴林祥666");
    }
    public static void main(String[] args) {
        emm e=new emm();
        e.display1();
        emm.display();
    }
    
}
静态方法中不能直接访问同一类中的非静态成员,而必须先创建对象,再通过对象访问成员
package 代码测试;
public class ceshi {
    public static void main(String[] args) {
        Integer i1=100;
        Integer j1=100;
        System.out.println(i1==j1);
        
        Integer i2=129;
        Integer j2=129;
        System.out.println(i2==j2);
    }
}
结果

输出结果不一样主要是因为与IntegerCache类有关 为了避免重复创建对象,对INteger值做了缓存,如果这个值在缓存的范围内直接返回缓存对象,否则new一个新的对象返回。
标签:定义 out ceshi 重复 inf href initial bubuko 测试
原文地址:https://www.cnblogs.com/1502762920-com/p/9825684.html