美文网首页
一起巩固Java基础知识(2)

一起巩固Java基础知识(2)

作者: 付凯强 | 来源:发表于2020-10-15 16:14 被阅读0次

序言

本文内容包括

  • 成员内部类、静态内部类的介绍和创建
  • 类中成员加载顺序

成员内部类、静态内部类的介绍和创建

  • 成员内部类
    在类内部定义的非静态内部类,我们称之为成员内部类。
public class A {
    class InterA {
        public InterA() {
            System.out.println("I am interA");
        }
    }
}

成员内部类的使用必须在外部类初始化之后才能使用。所以我们看下它如何才能被创建:

public class Main {
    public static void main(String[] args) {
        InterA interA = new A().new InterA();
    }
}
I am interA
  • 静态内部类duixiang
    在类内部定义的静态的内部类,我们称之为静态内部类。
public class A {
    static class StaticInterB{
        public StaticInterB() {
            System.out.println("I am staticInterB");
        }
    }
}

静态内部类把它当做外部类对待即可,所以我们看下它如何才能被创建:

public class Main {
    public static void main(String[] args) {
        A.StaticInterB interA = new A.StaticInterB();
    }
}

类中成员加载顺序

  • 无继承关系时
class Parent {
    public static final String STATIC_FIELD = printParent("父类_静态变量");

    public String Member_Field = printParent("父类_成员变量");

    static {
        printParent("父类_静态代码块");
    }

    {
        printParent("父类_普通代码块");
    }

    public Parent() {
        printParent("父类_构造方法");
    }

    public static String printParent(String str){
        System.out.println(str);
        return str;
    }
}
    public static void main(String[] args) {
        new Parent();
    }
父类_静态变量
父类_静态代码块
父类_成员变量
父类_普通代码块
父类_构造方法

一个类初始化的时候,先加载静态成员(按顺序),再加载非静态成员(按顺序),再加载构造方法。

  • 有继承关系时
public class Son extends Parent {
    public static final String STATIC_FIELD = printSon("子类_静态变量");

    public String Member_Field = printSon("子类_成员变量");

    static {
        printSon("子类_静态代码块");
    }

    {
        printSon("子类_普通代码块");
    }

    public Son() {
        printSon("子类_构造方法");
    }

    public static String printSon(String str){
        System.out.println(str);
        return str;
    }

}
    public static void main(String[] args) {
        new Son();
    }
父类_静态变量
父类_静态代码块
子类_静态变量
子类_静态代码块
父类_成员变量
父类_普通代码块
父类_构造方法
子类_成员变量
子类_普通代码块
子类_构造方法

一个类初始化的时候,如果有父类存在,先加载父类静态成员(按顺序),再加载子类静态成员(按顺序),再加载父类非静态成员(按顺序),再加载父类构造方法,再加载子类非静态成员(按顺序),再加载子类构造方法。

  • 静态成员已加载
    public static void main(String[] args) {
        new Parent();
        System.out.println("--------------------------------");
        new Son();
    }
父类_静态变量
父类_静态代码块
父类_成员变量
父类_普通代码块
父类_构造方法
--------------------------------
子类_静态变量
子类_静态代码块
父类_成员变量
父类_普通代码块
父类_构造方法
子类_成员变量
子类_普通代码块
子类_构造方法

静态成员只会加载一次。

  • 父类无参和有参构造方法都存在
class Parent {
    public static final String STATIC_FIELD = printParent("父类_静态变量");

    public String Member_Field = printParent("父类_成员变量");

    static {
        printParent("父类_静态代码块");
    }

    {
        printParent("父类_普通代码块");
    }

    public Parent() {
        printParent("父类_无参构造方法");
    }

    public Parent(String parent) {
        printParent("父类_有参构造方法");
    }

    public static String printParent(String str){
        System.out.println(str);
        return str;
    }
}
public class Son extends Parent {
    public static final String STATIC_FIELD = printSon("子类_静态变量");

    public String Member_Field = printSon("子类_成员变量");

    static {
        printSon("子类_静态代码块");
    }

    {
        printSon("子类_普通代码块");
    }

    public Son() {
        printSon("子类_构造方法");
    }

    public Son(String son) {
        printSon("子类_有参构造方法");
    }

    public static String printSon(String str){
        System.out.println(str);
        return str;
    }

}
    public static void main(String[] args) {
        new Son("Hello World");
    }
父类_静态变量
父类_静态代码块
子类_静态变量
子类_静态代码块
父类_成员变量
父类_普通代码块
父类_无参构造方法
子类_成员变量
子类_普通代码块
子类_有参构造方法

如果没有指定要调用父类无参还是有参构造方法,默认会调用无参构造方法。

后续

如果大家喜欢这篇文章,欢迎点赞;
如果想看更多Java方面的技术知识,欢迎关注!

相关文章

  • 收藏的面试题

    一起巩固Java基础知识(1)https://www.jianshu.com/p/f0ab3753cbb2 面大疆...

  • 一起巩固Java基础知识(2)

    序言 本文内容包括 成员内部类、静态内部类的介绍和创建 类中成员加载顺序 成员内部类、静态内部类的介绍和创建 成员...

  • 立一个目标,用半年去证明

    目标一 : 学会yii2 并对php的基础知识 mysql 并加以巩固 目标二: java 入门 目标三:随心所...

  • Java基础知识巩固

    最近发现自己的Java基础知识还是有点薄弱,刚好有点空闲时间进行再补一补,然后进行整理一下,方便自己以后复习。其实...

  • 一起巩固Java基础知识(1)

    1. 前言 如果你的Java基础不牢固,或者已经已经忘记了一部分,可以看看下面的重点内容,希望看完能让的Java基...

  • Java核心技术学习-准备

    目的 最近温习Java基础知识,准备重头读Java核心技术,为了巩固学习结果,每次学习会写一篇日志 工具 mark...

  • java数组基础知识巩固

    一、数组练习: 1.使用两种方式定义一个整形的一维数组,获取数组中的值,为数组中的元素赋值,遍历一维数组 代码: ...

  • iOS 基础读书杂集(一)

    前言:最近没怎么做项目,除了学习Java的基础知识。空闲时间也通过读书巩固自己iOS的基础知识。特做了一些笔记(按...

  • Spring Data JPA ——默认方法使用

    初探 SDJ 先让我们来巩固一下 Java 的基础知识。Java 是面向对象的语言,目的是解决现实生活中的问题,可...

  • Java基础知识整理(一)

    1.Java基础知识体系 2.Java技术体系平台 3.Java语言特点与核心机制 1.Java基础知识体系 2....

网友评论

      本文标题:一起巩固Java基础知识(2)

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