• 初始化的顺序


    静态语句块:

           在一个类中,不属于任何方法体并且以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方法中不能使用这两个关键字

  • 相关阅读:
    微信端支付
    flex布局
    最近的一些计划
    工作中遇到的一些小问题
    获取url参数
    localStorage中使用json
    倒计时函数(单个和多条)
    刚进入页面强制刷新
    [模板][倍增] ST算法 RMQ 区间中最大得值
    [思维]奇数码问题
  • 原文地址:https://www.cnblogs.com/128-cdy/p/11755198.html
Copyright © 2020-2023  润新知