Java 不了解我的变量是如何初始化的

Java 不了解我的变量是如何初始化的,java,class,variables,constructor,initialization,Java,Class,Variables,Constructor,Initialization,所以我想我错过了什么。我知道 如果没有提供构造函数,java会为您创建一个 如果定义了构造函数,则不使用java的默认构造函数 构造函数用于初始化变量 下面是一些简单的代码: class a { int f; // a variable with no value int c; // a variable later initialized by the constructor int b = 5; // this will be second question, a

所以我想我错过了什么。我知道

  • 如果没有提供构造函数,java会为您创建一个
  • 如果定义了构造函数,则不使用java的默认构造函数
  • 构造函数用于初始化变量
  • 下面是一些简单的代码:

    class a {
    
        int f; // a variable with no value
        int c; // a variable later initialized by the constructor
        int b = 5; // this will be second question, a less important one
    
        a(){
            c = 1; // Constructor initiatives C, but not F
        }
    
        public static void main(String[] args){
            a var = new a();
            System.out.print(var.f); // Please see my comment below
        }
    
    
    }
    
    这是我不明白的。为什么要打印var.f?我没有在构造函数中初始化f,但是,没有编译错误,并且初始化了0值。我不明白“0”是如何初始化为“f”的,尽管我没有在构造函数中使用它

    关于b=5,我理解这段代码会导致什么,但是,我不认为我理解这里的初始化是什么/谁,是新的操作符还是其他什么?谢谢

    编辑:因为到目前为止的答案并没有解决我的问题



    我知道默认值。我以为是默认构造函数分配了它们,不是吗?如果没有,什么会指定默认值

    与大多数编程语言一样,Java也有未初始化变量的默认值。每个数值类型的变量都初始化为与0相关的值。 默认情况下,布尔值为
    false
    。 字符串和所有对象的默认值为
    null


    查看文档了解更多信息:

    int是一种基本数据类型。根据定义,原语不能为null,因为它们不是对象,如果未初始化,将具有默认值。请看这里:


    如果希望能够有一个未初始化的变量,可以使用int java.lang.Integer的对象等价物

    为已声明但未初始化的实例变量指定默认值

    引用的默认值为null

    基本体采用默认值

    对于原始int变量b的查询,不需要新运算符,在实例化引用时使用新运算符。当实例化引用时,将创建一个对象,并在JVM上为该对象分配内存

    字符串是一个引用变量,但可以使用new关键字进行实例化,例如:

      String example = new String("abc");
      System.out.println(example); // prints abc.
    
    通常你会写:

      String example = "abc";
    
    在后者中,文本被放入“字符串池”。。。 您可以在此处阅读有关字符串池的更多信息:

    如果没有提供构造函数,java会为您创建一个

    c = 1; // Constructor initiatives C, but not F
    
    如果定义了构造函数,则不使用java的默认构造函数

    它不是生成的

    构造函数用于初始化变量

    c = 1; // Constructor initiatives C, but not F
    
    不真实。您的代码初始化
    c
    。生成的构造函数初始化这两个函数

    我没有在构造函数中初始化f

    没有,但Java做到了

    Java为构造函数生成以下代码:

  • 超级电话
  • 未使用初始值设定项声明的所有变量的默认初始化代码。根据类型的不同,默认值为
    false、
    zero或
    null
  • 调用所有匿名初始值设定项块。(2) (3)以文本顺序发生,因此可以相互交错
  • 关于b=5,我理解这段代码会导致什么,但是,我不认为我理解这里的初始化是什么/谁,是新的操作符还是其他什么

    见上文

    我知道默认值。我以为是默认构造函数分配了它们,不是吗

    没有

    如果没有,什么会指定默认值


    构造器。任何构造函数

    “null”初始化为“f”是什么意思
    f
    应该初始化为
    0
    。很抱歉,我是说0。这是个打字错误