码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-12-13 02:12:40      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:ring   rgs   sys   ret   setname   自己   style   构造   main   

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
    }
}

 

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

标签:ring   rgs   sys   ret   setname   自己   style   构造   main   

原文地址:http://www.cnblogs.com/zhaohuan1996/p/8030501.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!