美文网首页
接口初始化规则

接口初始化规则

作者: 大鹏_xzlp | 来源:发表于2018-07-21 12:39 被阅读0次

在我们初始化一个类的时候,会先初始化它的父类,但是对于接口不是这样的,在初始化一个类时,并不会先初始化它所实现的接口,我们看下面的程序

public class MyTest5 {
    public static void main(String[] args) {
        System.out.println(MyChild5.b);
    }
}

interface MyParent5{
    public static int a  = new Random().nextInt(3);
    public static Thread thread = new Thread(){
        //每个C的实例创建时都会执行一次
        {
            System.out.println("MyParent5 invoked");
        }
    };
}


class MyChild5 implements MyParent5{
    public static int b = 5;
}

运行程序,输出:

5

可以看到MyChild5实现的接口MyParent5没有初始化

初始化一个接口时,并不要求其父接口都完成了初始化

public class MyTest5 {
    public static void main(String[] args) {
        System.out.println(MyParent5.thread);
    }
}


interface MyGradpa{
    public static int a = new Random().nextInt();
    public static Thread thread = new Thread(){
        {
            System.out.println("MyGradpa invoked");
        }
    };
}

interface MyParent5 extends MyGradpa{
    public static Thread thread = new Thread(){
        {
            System.out.println("MyParent5 invoked");
        }
    };
}

运行程序,输出:

MyParent5 invoked
Thread[Thread-0,5,main]

但是不代表一定不初始化父接口,在真正使用到父接口的时候(如引用接口中所定义的常量时),才会初始化

public class MyTest5 {
    public static void main(String[] args) {
        System.out.println(MyParent5.thread);
    }
}

interface MyGradpa{
    public static Thread threadGradpa = new Thread(){
        {
            System.out.println("MyGradpa invoked");
        }
    };
}

interface MyParent5 extends MyGradpa{
    public static Thread thread = new Thread(){
        {
            System.out.println("MyParent5 invoked");
            System.out.println(threadGradpa);
        }
    };
}

运行程序,输出:

MyParent5 invoked
MyGradpa invoked
Thread[Thread-1,5,main]
Thread[Thread-0,5,main]

相关文章

  • 接口初始化规则

    在我们初始化一个类的时候,会先初始化它的父类,但是对于接口不是这样的,在初始化一个类时,并不会先初始化它所实现的接...

  • 初始化对于类与接口的异同点

    当Java 虚拟机初始化一个类时,要求它的所有父类都已经被初始化,但是这条规则并不适用于接口。在初始化一个接口时,...

  • TS - 接口

    接口是对行为的抽象,由类来定义对象或函数的类型 初始化 tslint 配置规则 可选属性 A red tomato...

  • SwiftInDepth_05_初始化构造器

    初始化详解 前言 Swift 初始化规则解读 了解Struct 快速初始化 了解子类化自定义初始化规则解读 子类化...

  • Java学习笔记——接口

    接口概述: 狭义角度,指java中的interface广义角度,对外提供规则的都是接口接口就是提供对外访问的规则 ...

  • SpringBoot应用启动后做一些初始化操作

    一、场景说明 SpringBoot应用启动后自动调用接口(或组件),做一些初始化操作。需要初始化操作的接口: 二、...

  • spring-容器4-初始化完成

    容器初始化总体流程 九 初始化conversion service 对LoadTimeWeaverAware接口b...

  • Java类及对象的初始化顺序

    1.初始化规则: 下面规则优先级从前往后依次降低0.加载一个类时先初始化基类后初始化扩展类;1.类的初始化高于对象...

  • 微信公众号开发记录

    安装 初始化 JS接口列表 updateAppMessageShareDataupdateTimelineShar...

  • Feign接口基于Sentinel配置默认熔断规则

    概述:基于sentinel配置熔断规则是针对每个接口的,如果feign接口配置规则,使用手动方式在sentinel...

网友评论

      本文标题:接口初始化规则

      本文链接:https://www.haomeiwen.com/subject/xshhmftx.html