无法编译

原因:没有默认构造
推出结论:当你给类提供了一个自定义的构造方法,导致系统不在提供默认构造方法了,需要自己提供

初始化

测试

package org.example;

public class InitializeBlockClass {

    public int field=100;
    {
        field=200;
    }
    public InitializeBlockClass(int field) {
        this.field = field;
    }

    public InitializeBlockClass() {
    }

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

测试结果

package org.example;

public class InitializeBlockClass {
    {
        field=200;
    }
    public int field=100;
    
    public InitializeBlockClass(int field) {
        this.field = field;
    }

    public InitializeBlockClass() {
    }

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

测试结果

可见顺序也能队初始化有影响,以后一定避免这种多次初始化的操作

Java字段初始化的规律可以总结如下:

  1. 显式初始化:字段可以在声明时进行显式初始化。例如:
int myField = 42;
  1. 构造器初始化:字段可以在类的构造器中进行初始化。这是最常见的字段初始化方式。当对象被创建时,构造器会执行相应的初始化操作。例如:
public class MyClass {
    int myField;

    public MyClass() {
        myField = 42;
    }
}
  1. 实例初始化块:字段可以在实例初始化块中进行初始化。实例初始化块在每次创建对象时都会执行,可以用来进行复杂的初始化逻辑。例如:
public class MyClass {
    int myField;

    {
        // 实例初始化块
        myField = 42;
    }

    public MyClass() {
        // 构造器
    }
}
  1. 静态初始化块:静态字段可以在静态初始化块中进行初始化。静态初始化块在类加载时执行,只执行一次。例如:
public class MyClass {
    static int myStaticField;

    static {
        // 静态初始化块
        myStaticField = 42;
    }
}
  1. 默认初始化:如果字段没有显式初始化,它们会被Java自动初始化为默认值。例如,整数字段会被初始化为0,布尔字段会被初始化为false,引用类型字段会被初始化为null。

  2. 构造器初始化的优先级高于默认初始化:如果字段同时进行了构造器初始化和默认初始化,构造器初始化会覆盖默认初始化的值。

  3. final字段:final字段必须在声明时或构造器中进行初始化,并且一旦初始化后不能再修改其值。

posted on 2023-09-20 12:36  许七安gyg  阅读(6)  评论(0编辑  收藏  举报
$(document).ready(function() { // 禁止右键 $(document).bind("contextmenu", function(){return false;}); // 禁止选择 $(document).bind("selectstart", function(){return false;}); // 禁止Ctrl+C 和Ctrl+A $(document).keydown(function(event) { if ((event.ctrlKey&&event.which==67) || (event.ctrlKey&&event.which==86)) { //alert("对不起,版权所有,禁止复制"); return false; } }); });