java构造函数,java的静态块理解

时间:2021-09-17 12:56:59

今天我遇到这样的代码块,理解甚久,现在理解了,举一些例题给你看看

先创建一个One类:

package accp.com;
/**
* 其中一个类
* @author xuxiaohua
*
*/
public class One {
  public One(String str){ //定一个构造函数
    System.out.println(str);
  }
}

再创建一个Two类:

package accp.com;

public class Two {
  One one=new One("one1");
  One one2=new One("one2");
  static One one3=new One("one3");//为什么这句话只执行了一次,是因为静态块只执行一次,是从java虚拟机开始加载的时候
  public Two(String str){
  System.out.println(str);
  }

}

然后编写测试类:

package accp.com;

public class Test {
  static Two two = new Two("two");//静态块是java加载时最先走的方法,所以这句话无论放在哪里,都先走的静态方法
public static void main(String args[]){
  Two t=new Two("two2");
  System.out.println("开始main方法=========");
  Two tw=new Two("two3");
  System.out.println("执行完毕。");
  }
}

运行结果为:

one3------解释:静态块先执行,所以自然走到Two类中,然后Two类中也存在static One one3=new One("one3");静态的,所以先走这句话了。
one1------解释:测试类中,static Two two = new Two("two");中的Two two 是定义,所以先走定义的类Two然后执行里面的方法,注意不会出现one3了,因为静态块只执行一次
one2
two----解释:static Two two = new Two("two");前面的定义走完之后就走new Two("two");实例化对象,输出two
one1---解释:Two t=new Two("two2");跟上面一样,先看前半部分,Two t是定义变量,所以走Two中的方法,但不会执行静态块了,原因已说了,是因为静态块只执行一次。好了,前部分定义看完了,接着看实例化后半部分:new Two("two2");,实例化对象,然后输出two2
one2
two2
开始main方法=========//这几句话没啥可解释的吧!
one1------解释:理由同上
one2
two3
执行完毕。

最后总结那么几句:要想看明白,你需要理解静态块和构造函数,还有定义和实例化。

Two two;//这属于在定义一个变量

new Two();//属于在实例化Two对象,Two two=new Two();//合起来就是定义和实例化对象。

其次就是静态块了,静态块是在java加载的时候只运行一次的,并且是先执行的代码块。

学如逆水行舟,不进则退。