Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当调用构造函数(新类)时,实例初始值设定项块是否首先运行?_Java_Oop_Object_Constructor - Fatal编程技术网

Java 当调用构造函数(新类)时,实例初始值设定项块是否首先运行?

Java 当调用构造函数(新类)时,实例初始值设定项块是否首先运行?,java,oop,object,constructor,Java,Oop,Object,Constructor,我是Java特别是OOP的完全初学者,所以请原谅我的幼稚,但最近在学习Head First Java时,他们说,构造函数是当有人在类类型上说new时运行的代码。 但后来我尝试了这段代码来看看实际发生了什么,但令我惊讶的是,输出完全不同 public class Test { private int n; {System.out.println("Out1 "+n);} public Test() { n=10; System.out.print

我是Java特别是OOP的完全初学者,所以请原谅我的幼稚,但最近在学习Head First Java时,他们说,构造函数是当有人在类类型上说new时运行的代码。 但后来我尝试了这段代码来看看实际发生了什么,但令我惊讶的是,输出完全不同

public class Test {
    private int n;
    {System.out.println("Out1 "+n);}
    public Test() {
       n=10;
       System.out.println("Inside Constructor");
    }

    public static void main(String args[]) {
        System.out.println("Hello World!");
        Test obj=new Test();
        }
    {System.out.println("Out2 "+n);}
}
输出: 你好,世界! 出局10 出局20 内部构造函数
我的问题:为什么?当我调用构造函数初始化特定的实例变量时,实例变量不应该被初始化吗?这难道不是构造函数的全部目的吗?在创建对象之前运行

构造函数按以下顺序执行:

调用超类的构造函数。 按定义的顺序运行。 执行构造函数主体的其余部分。
也就是说,两条sysout语句都在赋值n=10;之前执行;。应该是这样的。看。

为什么不行?我在eclipse中试过了!请证明你自己,你不能在类的主体中直接调用方法。嗯,重点是…所以我认为Eclipse自欺欺人了?:p程序不会编译。在类内部,您只能声明变量和方法,但不能调用方法。在类内部,您调用了一个错误的方法,非常抱歉代码不可编译。请重新检查!谢谢你把它弄清楚了!所以整个事情的jist是实例初始值设定项块在构造函数中的任何初始化之前运行?