黑马程序员技术交流社区

标题: 请教关于构造代码块问题 [打印本页]

作者: 卢祥洲    时间: 2013-5-16 20:36
标题: 请教关于构造代码块问题
  1. class Person{
  2.         private String name;
  3.         private int age;
  4.         //1、构造代码块
  5.         {
  6.                 cry();       
  7.         }
  8.         public Person(){
  9.                 System.out.println("name="+name+",age="+age);
  10.         }
  11. //2、调用的方法
  12.         public void cry(){
  13.                 System.out.println("cry......");       
  14.         }
  15. }
  16. public class GetPerson{
  17.         public static void main(String[] args){
  18.                 Person per1 = new Person();
  19.         }
  20. }
  21. 请问下:上面程序运行的时候,主函数创建对象new Person()前会先运行构造代码块,构造代码块中调用cry()方法。请问构造代码块在创建对象前就运行了(就是cry()方法还没出来),怎么构造代码块还可以调用cry()方法?
  22. 谢谢大家!
复制代码

作者: 石头135    时间: 2013-5-16 20:50
Person per1 = new Person(); ,Person.class 文件加载进内存,cry()方法进内存,类初始化,构造代码块执行时,cry()方法可以调用啊,这是在对象创建成功之前进行的


作者: jinhu358    时间: 2013-5-16 20:55
静态代码块、构造代码块和构造函数的区别
                静态代码块:用于给类初始化,类加载时就会被加载执行,只加载一次。
                构造代码块:用于给对象初始化的。只要建立对象该部分就会被执行,且优先于构造函数。
                构造函数:  给对应对象初始化的,建立对象时,选择相应的构造函数初始化对象。               
          创建对象时,三者被加载执行顺序:静态代码块--->构造代码块--->构造函数
作者: 卢祥洲    时间: 2013-5-16 20:57
石头135 发表于 2013-5-16 20:50
Person per1 = new Person(); ,Person.class 文件加载进内存,cry()方法进内存,类初始化,构造代码块执 ...

谢谢啊~~:loveliness:
作者: 逝者轨迹    时间: 2013-5-16 23:34
构造代码块优先于构造函数执行,new person时person加载,执行构造代码块,cry()方法是可以直接被调用的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2