黑马程序员_005_构造代码块、构造函数和静态代码块

时间:2023-02-11 17:14:52
-------  android培训java培训、期待与您交流! ----------
1、构造代码块
        作用:给对象进行初始化。对象一建立就运行,而且优先于构造函数执行。
        和构造函数区别: 构造代码块是给所有对象进行统一初始化,而构造函数时给对应的对象初始化。
        构造代码块中定义的是不同对象共性的初始化内容。
    class Person
        {
                private String name;
                private int age;
                Person()//定义一个构造函数
                {
                        System.out.println("person run");
                }
                Person(String a)//定义一个构造函数
                {
                        name = a
                        System.out.println("person run"+name);
                }
                 {
                        System.out.println("我是构造代码块,我最先执行");
                }
        }
        
        class PersonDemo
        {
                public static void main(String[] args)
                {
                    Person p = new Person();//先 我是构造代码块, 我最先执行,后其他
                    Person p1 = new Person("xiaoming”);//先 我是构造代码块, 我最先执行,后其他
                }
        }

2、构造函数
        特点:
                函数名与类名相同
                不用定义返回值类型
                不可以写return语句
        作用: 给对象进行初始化。(对象一建立就会调用与之对应的构造函数)
        注意:
                默认构造函数的特点
                多个构造函数是以重载的形式存在的
                当一个类中没有定义构造函数时,那么系统会默认给该类加入一个控参数的构造函数,类名(){}。当类中定义了构造函数时,系统就不会加入默认构造函数。
                构造函数是在对象一建立时运行,给对象初始化。而一般方法是对象调用才执行,是给对象添加对象具备的功能。一个对象建立构造函数只运行一次,而一般方法可以被该对象调用多次。什么时候定义构造函数?当分析事物时,该事物存在具备一些特性或者行为,那么僵这些内容定义在构造函数中。构造函数的参数根据需要而定。
class Person
        {
                private String name;
                private int age;
                Person()//定义一个构造函数
                {
                        System.out.println("person run");
                }
                Person(String a)//定义一个构造函数
                {
                        name = a
                        System.out.println("person run"+name);
                }
        }
        
        class PersonDemo
        {
                public static void main(String[] args)
                {
                    Person p = new Person();
                    Person p1 = new Person("xiaoming”);
                }
        }


3、静态代码块
        格式:
                static
                {
                    静态代码块中的执行语句。
                }
        特点:随着类的加载而执行,只执行一次。用于给类进行初始化。

        class StaticCode
        {
                static
                {
                       System.out.println("a");
                }
               
        }
        class StaticCodeDemo
        {
                static
                {
                       System.out.println("b");
                }
                public static void main(String[] args)
                {
                        new StaticCode();
                        new StaticCode();
                        System.out.println("d");
                }
              static
                {
                       System.out.println("c");
                }
        }
结果:b  c a  d

注意:Person p = new Person("zhangsan",20);
        内存执行过程:
                 因为new用到了Person.class,所以会先找到Person.class文件并加载到内存中。
                执行该类中的static代码块,如果有的话,给Person.class类进行初始化
                在堆内存中开辟空间,分配内存地址
                在对内存中建立对象的特有属性,并进行默认初始化
                对属性进行显示初始化(属性有初始值时,将初始值赋给属性)
                对对象进行构造代码块初始化
                对对象进行对应懂得构造函数的初始化
                将内存地址赋给栈内存中的变量

总结:
        构造函数给特定对象进行一次初始化
        构造代码块给多个对象进行初始化
        静态代码块给类进行一次初始化