首页 > 其他分享 >9.20周三(动手动脑问题解决)

9.20周三(动手动脑问题解决)

时间:2023-09-20 12:44:40浏览次数:39  
标签:初始化 9.20 obj int 动脑 InitializeBlockClass field 周三 public

无法编译

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

初始化

测试

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字段必须在声明时或构造器中进行初始化,并且一旦初始化后不能再修改其值。

标签:初始化,9.20,obj,int,动脑,InitializeBlockClass,field,周三,public
From: https://www.cnblogs.com/gyg1222/p/17717031.html

相关文章

  • 9.20日记
    1抽象工厂模式的定义抽象工厂模式是一种创建型设计模式,它提供了一种创建一组相关或相互依赖对象的方式,而无需指定它们的具体类。该模式以一组抽象接口为核心,包括抽象工厂接口和一组抽象产品接口,每个具体工厂类负责创建特定产品家族,保证这些产品之间的兼容性。客户端代码通过与抽......
  • 9.20算法
    需要回溯到失败匹配之后的下一个,索引回去就可以实现strStr()给你两个字符串 haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果 needle不是haystack的一部分,则返回 -1。 示例1:输入:haystack="sadbutsad",n......
  • 课后动手动脑
    publicstaticvoidmain(String[]args){floata=(float)1.0;floatb=(float)0.965;doublea1=1.0;doubleb1=0.965;BigDecimala2=newBigDecimal(a1);BigDecimalb2=newBigDecimal(b1);BigDecimala3=newBigDecimal(......
  • 课后动手动脑
    对于Java的float和double类型,都存在精度损失的问题。精度损失产生的原因在于Java的数据存储采用的都是2进制形式,二进制不能准确的表示1/10等分数,只能无限趋近。publicstaticvoidmain(String[]args){floata=(float)1.0;floatb=(float)0.965;doubl......
  • 课堂动手动脑问题
    Enum是一种类类型,他的对象的值智能是其所有列举项目中的一个。并且,各个枚举项的对象都是不相同的。定义static的value的范围更大,但在主函数中的value里输出近,所以输出结果为2输入输出反码补码原码在计算机中,原码、反码和补码是表示有符号整数的三种常见方式。在Java中,整数......
  • 动手动脑
    一、动手动脑1s==t输出false说明s和t分别引用了两个不同的枚举实例。s.getClass().isPrimitive():输出false说明枚举类型不是原始数据类型。s==u:输出true。这是因为u是通过Size.valueOf("SMALL")方法得到的,该方法返回与给定字符串名称匹配的枚举实例。for(Sizevalue:Size.values(......
  • 动手动脑问题3
    在Java中,每个数据类型的位数和表示的数值范围如下所示:byte(字节):8位,有符号整数类型,表示范围为-128到127。short(短整型):16位,有符号整数类型,表示范围为-32,768到32,767。int(整型):32位,有符号整数类型,表示范围为-2,147,483,648到2,147,483,647。long(长整型):64位,有符号整数类型,......
  • 动手动脑问题
    原码:最高位是符号位(0表示正数,1表示负数),其余位表示数值的绝对值。反码:正数的反码与原码相同,负数的反码是对其原码按位取反(符号位除外)得到的结果。补码:正数的补码与原码相同,负数的补码是对其原码按位取反(符号位除外),然后将结果加1。在Java中,整数默认使用补码表示。下面是......
  • 课程动手动脑练习
    publicclassMain{privateenumMyEnum{ONE,TWO,THREE}publicstaticvoidmain(String[]args){for(MyEnumvalue:MyEnum.values()){System.out.println(value);}}}运行结果为,ONETWOTHREE结构:enum名称{数据......
  • 动手动脑
     枚举类型可以让我们的程序使用一些固定长度和固定数值的变量值范围。使用double类型的数值进行计算,其结果是不精确的 ......