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

时间:2015-09-02 23:24:59

标签: java class variables constructor initialization

所以我觉得我错过了什么。我知道

  1. 如果没有提供构造函数,那么java会为你创建一个。
  2. 如果定义了构造函数,则不使用java的默认构造函数。
  3. 构造函数用于初始化变量
  4. 这是一些简单的代码:

    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' 0' 0' 0被初始化为' f'尽管我没有在构造函数中使用它

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

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

    我知道默认值。我认为这是分配它们的默认构造函数,不是吗?如果没有,什么分配默认值?

4 个答案:

答案 0 :(得分:0)

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

检查文档以获取更多信息:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

答案 1 :(得分:0)

int是原始数据类型。根据定义,基元不能为空,因为它们不是对象,如果未初始化则具有默认值。见这里:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

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

答案 2 :(得分:0)

声明但未初始化的实例变量将被赋予默认值。

参考采用默认值 null

基元采用默认值

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

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

  String example = new String("abc");
  System.out.println(example); // prints abc.

通常你会写:

  String example = "abc";

在后者中,文字放在'字符串池'中...... 您可以在此处阅读有关字符串池的更多信息:http://examples.javacodegeeks.com/core-java/lang/string/java-string-pool-example/

答案 3 :(得分:0)

  

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

正确。

  

如果定义了构造函数,则不使用java的默认构造函数。

它不是生成的。

  

构造函数用于初始化变量

正确。

c = 1; // Constructor initiatives C, but not F

不真实的。 您的代码初始化c。生成的构造函数初始化两者。

  

我没有在构造函数

中初始化f

不,但是Java确实。

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

  1. 超级电话。
  2. 没有初始值设定项声明的所有变量的默认初始化代码。根据类型,默认值为false,零或null
  3. 调用所有匿名初始化程序块。 (2)和(3)以文本顺序发生,因此可以相互交错。
  4.   

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

    见上文。

      

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

    没有

      

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

    构造函数。 任何构造函数。