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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Person
{
        private String name = "haha";
        private int age = 10;

        {
                System.out.println(name+"***"+age);
                name = "hello";
                age = 20;
                System.out.println(name+"***"+age);
        }

        public Person(){}

        public Person(String name,int age)
        {
                System.out.println(this.name+"***"+this.age);
                this.name = name;
                this.age = age;
                System.out.println(this.name+"***"+this.age);
        }

        public void setName(String name)
        {
                this.name = name;
        }

        public String getName()
        {
                return name;
        }

        public void setAge(int age)
        {
                this.age = age;
        }

        public int getAge()
        {
                return age;
        }
}

class Test
{
        public static void main(String[] args)
        {
                Person p = new Person("world",30);
                System.out.println(p.getName()+"***"+p.getAge());
        }
}


评分

参与人数 2技术分 +1 黑马币 +10 收起 理由
董晗 + 10 赞一个!
杨佳名 + 1 淡定

查看全部评分

9 个回复

倒序浏览
代码块初始了实列对象
回复 使用道具 举报 1 0
请认真阅读毕老师第六天的视频,对于Person加载 的执行顺序讲解,具体笔记在PersonDemo那个.java文件里面

Person p = new Person("world",30);
这句话到底做了什么?

1.new 的时候 寻找Person。class文件,加载Person类到内存中
2.执行静态代码块【如果有的话】
3.在堆中开辟空间,给成员变量 name 和age ,并且自动建立属性【根据默认初始化:】haha 和10
4.执行构造代码块【在你的构造代码块中,对成员变量重新赋值】name = "hello";  age = 20;

后面的不想说了,自己去查笔记吧

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
看看构造代码块的执行顺序吧

面向对象(静态代码块).png (157.05 KB, 下载次数: 14)

面向对象(静态代码块).png

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 王延龙 于 2014-12-19 03:16 编辑
  1. class Person {
  2.      
  3.         private String name = "haha";
  4.         private int age = 10;

  5.         // 构造代码块,作用初始化对象实例,只执行一次
  6.         {
  7.                 System.out.println((Test.count++)+"\t"+name + "***" + age);
  8.                 name = "hello";
  9.                 age = 20;
  10.                 System.out.println((Test.count++)+"\t"+name + "***" + age);
  11.         }

  12.         // 类的空参构造方法,初始化对象
  13.         public Person() {
  14.                
  15.         }
  16.         
  17.         //带有参数的构造方法
  18.         public Person(String name,int age){
  19.                 System.out.println((Test.count++)+"\t"+this.name+"***"+this.age);//hello***20
  20.                 this.name = name;
  21.                 this.age = age;
  22.                 System.out.println((Test.count++)+"\t"+this.name+"***"+this.age);//显示用户传入的参数name***age
  23.         }

  24.         public String getName() {
  25.                 return name;
  26.         }

  27.         public void setName(String name) {
  28.                 this.name = name;
  29.         }

  30.         public int getAge() {
  31.                 return age;
  32.         }

  33.         public void setAge(int age) {
  34.                 this.age = age;
  35.         }
  36.         
  37. }

  38. public class Test {

  39.         //计数器,目的:标示创建对象时的代码执行顺序
  40.         public static int count = 0;
  41.         public static void main(String[] args){
  42.                
  43.                 Person p = new Person("world",30);
  44.                 System.out.println((Test.count++)+"\t"+p.getName()+"***"+p.getAge());
  45.         }
  46. }
复制代码
回复 使用道具 举报
构造代码块赋值了,是优于构造函数执行的
回复 使用道具 举报
学懂每一个知识点很重要啊
回复 使用道具 举报
duluhua 中级黑马 2014-12-19 09:30:05
8#
我总结了下:
1.静态代码块是给类进行初始化,也就是加载类的时候,就执行了静态代码块。只执行一次,因为加载类字节码到内存执行一次。
2.构造代码块是对该类的所有对象进行初始化,也就是说,只要我用类创建对象,那么就肯定执行构造代码块。
3.构造方法是对具体的对象进行初始化,是类的某一个具体的对象的初始化。
4.执行顺序:静态代码块>构造代码块>构造方法。
一句话:静态代码块初始化类,构造代码块初始化该类所有的对象,构造方法初始化某一个对象。
回复 使用道具 举报
  觉得 这块有点难理解,每天大量的视频课,上课听得还算可以,下课看例题又蒙圈了。有点绕。零基础学起来真的很吃力。
回复 使用道具 举报
奋斗的蜗牛ksd 发表于 2014-12-19 00:36
请认真阅读毕老师第六天的视频,对于Person加载 的执行顺序讲解,具体笔记在PersonDemo那个.java文件里面

...

好的,搞懂了。多谢!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马