A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 卢祥洲 中级黑马   /  2013-5-16 20:36  /  1359 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. 谢谢大家!
复制代码

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
Person per1 = new Person(); ,Person.class 文件加载进内存,cry()方法进内存,类初始化,构造代码块执行时,cry()方法可以调用啊,这是在对象创建成功之前进行的

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 再接再厉

查看全部评分

回复 使用道具 举报
静态代码块、构造代码块和构造函数的区别
                静态代码块:用于给类初始化,类加载时就会被加载执行,只加载一次。
                构造代码块:用于给对象初始化的。只要建立对象该部分就会被执行,且优先于构造函数。
                构造函数:  给对应对象初始化的,建立对象时,选择相应的构造函数初始化对象。               
          创建对象时,三者被加载执行顺序:静态代码块--->构造代码块--->构造函数

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 赞一个!

查看全部评分

回复 使用道具 举报
石头135 发表于 2013-5-16 20:50
Person per1 = new Person(); ,Person.class 文件加载进内存,cry()方法进内存,类初始化,构造代码块执 ...

谢谢啊~~:loveliness:
回复 使用道具 举报
构造代码块优先于构造函数执行,new person时person加载,执行构造代码块,cry()方法是可以直接被调用的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马