码迷,mamicode.com
首页 > 其他好文 > 详细

初始化的顺序

时间:2019-10-28 21:12:49      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:com   用法   str   常用   xtend   变量   alt   class   使用   

静态语句块:

       在一个类中,不属于任何方法体并且以static关键字修饰的语句块,称为静态语句块。

因为静态语句块常用来进行类变量的初始化,所以也称为静态初始化程序块。

     格式:static{   };

 ***静态语句块在加载该类时执行一次(此处的类加载是在该类被调用时才进行加载,比如:当要验证的语句和main()方法在一个类中时,此时调用main()方法时,要先对该类进行加载才能调用main()方法,但是若main()方法和要验证的语句不在一个类中时,则先进行main()方法的类的加载和main()方法的调用,然后当后面要调用放了要验证的语句的类时(即new该类对象时),验证类才会被加载)如果一个类中定义了多个静态语句块,则这些语句块将按在类中出现的先后次序运行。

初始化的顺序:

       静态方法-->静态语句块-->普通方法,普通语句块,构造函数的。

// 基类
class Base {
    private int a = method1();
    private static int b = method2();

    {
        System.out.println("Base instance init block!");
    }

    static {
        System.out.println("Base static init block!");
    }

    public Base(){
        System.out.println("Base constructor!");
    }

    private int method1() {
        System.out.println("Base method1");
        return 0;
    }

    private static int method2() {
        System.out.println("Base method2");
        return 0;
    }
}

class Derive extends Base{
    private int c = method3();
    private static int d = method4();

    {
        System.out.println("Derive instance init block!");
    }

    static {
        System.out.println("Derive static init block!");
    }

    public Derive(){
        System.out.println("Derive constructor!");
    }

    private int method3() {
        System.out.println("Derive method3");
        return 0;
    }

    private static int method4() {
        System.out.println("Derive method4");
        return 0;
    }
}

/**
 *
 */
public class DeriveTest {
    public static void main(String[] args) {
        Derive d = new Derive();
    }
}

运行结果:

技术图片

   实例成员的访问,一定要 对象.  来调用
   类成员的方法,要用 类名.  来调用

this与super:

this关键字的两个用法:

        1.在构造函数中调用待传入int参数的其它的构造函数,如this(10),初始化带int型参数的构造函数参数,this(" ")

     2.在成员方法里面访问其它成员(变量,方法),前面可以添加this.变量/方法。

super关键字的三个用法:

     1.在派生类的构造函数中调用基类的带int参数的构造函数 如super( )。

     2.super.func() 在派生类中,调用从基类继承来的func方法

     3.super.a 在派生类中,调用从基类继承来的名字叫a的成员变量

 

super关键字

     在对象的内部使用,可以代表父类对象

     1,访问父类的属性 super.age

     2,访问父类的方法 super.eat()

     3,子类的构造过程中必须调用其父类的构造方法 super();

               ( 如果子类的构造方法中没有显式调用父类的构造方法,则系统默认调用父类无参的构造方法

                    如果显式的调用构造方法,必须在子类构造方法的第1行

                    如果子类构造方法中既没有显示调用父类的构造方法,而父类有没有无参的构造方法,则编译出错。)

         this和super关键字都和对象有关,所以在static方法中不能使用这两个关键字

 

初始化的顺序

标签:com   用法   str   常用   xtend   变量   alt   class   使用   

原文地址:https://www.cnblogs.com/128-cdy/p/11755198.html

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