• java学习之静态块、显示初始化块、构造函数、this在构造函数中的调用,区别联系与调用顺序


    1.静态代码块---给类初始化,随着类的加载而执行,只执行一次(注:仅创建类的引用(即只申明)并不会触动对该类的加载)

    /**
         * 静态代码块
         * 特点:随着类的加载而执行,只执行一次,用于给类经行初始化
         */
        static{
            System.out.println("a");
        }

    2.(显示初始化块)构造代码块---给对象初始化,

    /**
         * 构造代码块
         * 作用:给对象进行初始化
         * 对象一建立就运行,而且优先于构造函数执行
         * 
         * 和构造函数的区别
         * 构造代码块是给所有对象进行统一初始化,而构造函数给对应的对象初始化(给不同的对象经行分别初始化,如无参构造函数、有参构造函数)
         * 
         * 构造代码块中定义的是不同对象共性的初始化内容
         */
        {
            
        }

    3.构造函数--给对应对象初始化

    4.this

    /**
         * this语句,用于构造函数之间进行互相调用,因为this代表对应对象,而构造函数是给对应对象初始化,都是同一个对象
         * this语句,只能定义在构造函数的第一行--规则的解释:因为初始化得先执行,自己设置的值在后面才可以覆盖系统的初始化,不然顺序一反就是系统的默认初始化覆盖自己的设置
         * 
         * @param name
         */
        public Demo(String name) {
            this.name="haha";
        }
        public Demo(String name,int age){
            this(name);
            this.name=name;
            this.age=age;
            System.out.println("A:name="+name+",age="+age);
    //        cry();
        }

    以下内容总代码:

    package com.dreamly.day01;
    
    /**
     * @author dreamly
     *
     */
    public class Demo {
        
        private String name;
        private int age;
        
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        
        /**
         * 静态代码块
         * 特点:随着类的加载而执行,只执行一次,用于给类经行初始化
         */
        static{
            System.out.println("a");
        }
    
        /**
         * 构造代码块
         * 作用:给对象进行初始化
         * 对象一建立就运行,而且优先于构造函数执行
         * 
         * 和构造函数的区别
         * 构造代码块是给所有对象进行统一初始化,而构造函数给对应的对象初始化(给不同的对象经行分别初始化,如无参构造函数、有参构造函数)
         * 
         * 构造代码块中定义的是不同对象共性的初始化内容
         */
        {
            //定义不同对象共性的初始化部分可写在此处,比如cry()方法
            cry();
        }
        
        public Demo(){
            this("hah");
            System.out.println("A:name="+name+",age="+age);
    //        cry();
        }
        /**
         * this语句,用于构造函数之间进行互相调用,因为this代表对应对象,而构造函数是给对应对象初始化,都是同一个对象
         * this语句,只能定义在构造函数的第一行--规则的解释:因为初始化得先执行,自己设置的值在后面才可以覆盖系统的初始化,不然顺序一反就是系统的默认初始化覆盖自己的设置
         * 
         * @param name
         */
        public Demo(String name) {
            this.name="haha";
        }
        public Demo(String name,int age){
            this(name);
            this.name=name;
            this.age=age;
            System.out.println("A:name="+name+",age="+age);
    //        cry();
        }
        
        
        private void cry() {
            System.out.println("cry...");
        }
    }
    package com.dreamly.day01;
    
    /**
     * @author dreamly
     *
     */
    public class DemoTest {
        public static void main(String[] args) {
            Demo d=new Demo();
            d.setName("lily");
            d.setAge(20);
        }
    }
    package com.dreamly.day01;
    
    /**
     * @author dreamly
     *
     */
    public class Demo2 {
        int num=5;
        static {
            System.out.println("b");
        }
        {
            System.out.println("c"+this.num);
        }
        Demo2(){
            System.out.println("a");
        }
        Demo2(int num){
            System.out.println("d");
        }
        
        public static void main(String[] args) {
            Demo2 d2=new Demo2();
            d2.num=4;//执行顺序  b  c5  a
        }
        
        
    }
    package com.nico.test;
    
    public class Demo1 {
        static int i;    
        static {
    //        System.out.println("静态块");
            i = 8;    //2
        }
        
        {
            System.out.println("初始化块");
            i = 10;    //7
        }
        
        public Demo1() {    //如果有显式初始化块,先执行初始化块    4
            this( "i = " + i );        //5 如果要在无参构造调用其它构造函数,那么这条语句只能写在第一行
            System.out.println("无参构造函数");
        }
        
        public Demo1(String str) {    //6
            System.out.println(str);    //8 "i = 8";
        }
        public static void main(String[] args) {
            Demo1 d = new Demo1();    //1    3
        }
    }
  • 相关阅读:
    LeetCode
    LeetCode
    Django ORM 查询
    The Usage of Pymongo
    MongoDB基操
    Django内置auth模块中login_required装饰器用于类视图的优雅方式
    Django Session配置
    Python虚拟环境
    遇见Flask-Script
    Git使用手册
  • 原文地址:https://www.cnblogs.com/zhaohuan1996/p/8030501.html
Copyright © 2020-2023  润新知