为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这课例题后期明明只调用了构造方法可是为什么普通初始化块也执行了??

public class HelloWorld
{
	int num1;     //声明变量num1
	int num2;     //声明变量num2
	static int num3; //声明静态变量num3
	
	//构造方法
	public HelloWorld()
	{
		num1 = 91;
		System.out.println("通过构造方法为变量num1赋值");
	}
	
	//初始化块
	{
		num2 = 74;
		System.out.println("通过初始化块为变量num2赋值");
	}
	
	//静态初始块
	static
	{
		num3 = 83;
		System.out.println("通过静态初始块为静态变量num3赋值");
	}
	
	public static void main(String[] args)
	{
		HelloWorld hello = new HelloWorld();   //使用构造方法创建对象hello
		System.out.println("num1:" + hello.num1);
		System.out.println("num2:" + hello.num2);
		System.out.println("num3:" + num3);
		
		HelloWorld hello2 = new HelloWorld();  //就是他
		
	}
}

rt,如果说静态只执行一次那么他不输出是必然,,构造方法执行也是因为创建对象的附加效应,可是"无亲无故"的普通初始化话块为什么也会执行,而且为什么会在构造方法前面执行????

此外,构造方法不应该只执行这里面的吗???普通初始化块怎么做到的

 //构造方法
    public HelloWorld()
    {
        num1 = 91;
        System.out.println("通过构造方法为变量num1赋值");
    }


正在回答

3 回答

在同一个类中初始化块是在类加载的时候调用的,而构造函数是在创建对象的时候调用的。

应该意思就是说HelloWorld hello = new HelloWorld();  在实例化一个类的对象时,先要实例化该类的成员变量,再执行该类的构造函数。http://blog.csdn.net/lksodit_yiyi/article/details/8017362  这里有说明

0 回复 有任何疑惑可以回复我~

因为初始化块是先于构造函数运行的。

详见http://blog.csdn.net/yilip/article/details/41986953


0 回复 有任何疑惑可以回复我~
#1

qq_淡末初夏_03336219 提问者

表示没看懂.....请问执行的不应该是构造方法吗???初始块怎么会是构造方法里的内容??如果是执行整个HelloWorld类为什么main那里没有执行呢?
2016-09-03 回复 有任何疑惑可以回复我~
#2

慕粉3960755

构造方法不是构造函数,学c的吧
2016-09-10 回复 有任何疑惑可以回复我~

HelloWorld hello = new HelloWorld();  //创建对象并执行

而对象内的执行顺序是静态初始块>初始块>构造方法。

HelloWorld hello2 = new HelloWorld();  

是不是再创建对象了?是不是要再执行一次,而静态初始块只执行一次,所以这次对象不执行静态初始块,执行了初始块>构造方法。

0 回复 有任何疑惑可以回复我~
#1

qq_淡末初夏_03336219 提问者

可是执行的不应该是构造方法吗???初始块怎么会是构造方法里的内容??如果是执行整个HelloWorld类为什么main那里没有执行呢?
2016-09-03 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么这课例题后期明明只调用了构造方法可是为什么普通初始化块也执行了??

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信