zoukankan      html  css  js  c++  java
  • 初始化的顺序

    静态语句块:

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

  • 相关阅读:
    [Unity3D]蓝港面试题
    BZOJ 2186 SDOI2008 沙拉公主的困惑 数论
    JSONObject与JSONArray的使用
    一个int类型究竟占多少个字节
    软件开发的金字塔
    poj 1064 Cable master ,二分 精度!!!
    php实现工厂模式
    数据库索引的作用和长处缺点
    C++中使用class和structkeyword的不同
    提交时提示错误This Bundle is invalid.New apps and app updates submitted to the App Store must be built wit
  • 原文地址:https://www.cnblogs.com/128-cdy/p/11755198.html
Copyright © 2011-2022 走看看