美文网首页
通过实例解析Java类初始化和实例初始化

通过实例解析Java类初始化和实例初始化

作者: 平凡的柚子 | 来源:发表于2021-01-19 15:02 被阅读0次

一、背景:

存在类Father和类Son,其中类Son继承了Father类。

1.父类Father代码

2.子类Son代码

*初始化包括?

成员变量赋初值、代码块、构造器

注意方法是被调用的,有人调用它它才执行相应的东西。

二、类初始化

在一开始,注释掉main方法中的代码,执行结果如下。

类初始化:

1.创建实例需要先加载并初始化该类

此处main方法所在的类需要先加载并初始化

2.子类初始化要先初始化其父类

3.类初始化即是执行clinit(ClassInit)方法

A.(静态!)分为 静态变量的显式赋值操作 和 静态代码块
  B.上到下的顺序执行
  C.这个clinit方法只执行一次

将父类中的static代码块放到静态变量之前,可以看到结果按顺序改变。

三、实例初始化

取消Son类中main方法的第一句注释,如下图所示。

此时将会先进行类初始化,再进行实例初始化,结果如下。

实例初始化:

1.实例初始化即是执行init方法

2.有几个构造器就有几个init方法,每次创建对象都会执行相应的init方法。

3.init方法由非静态实例变量显式赋值、非静态代码块和相应的构造器组成。

4.非静态实例变量赋值与非静态代码块按上到下的顺序执行,构造器在最后执行。

5.init方法的首行是super()或者带参数的super(),即父类init方法。

父类中的test()方法输出的是(4),为何父类中结果为932?

非静态方法前有一个默认的对象this

this在构造器(或者init方法)表示的是正在创建的对象。

这里是在创建Son类的对象,所以执行的是重写后的代码。

四、总结

初始化操作包括成员变量、静态/非静态代码块和构造器。

1.先类初始化,再实例初始化。

2.都是先父类再子类。

3.类初始化关键词"静态"。

4.实例初始化关键词"非静态",构造器在最后。

5.注意构造器和实例初始化init方法中的this对象。

五、补充

哪些方法不能被重写?

  • final方法

  • 静态方法

  • private等子类中不可见方法

多态性的体现?

  • 子类若重写了父类的方法,则通过子类对象调用的一定是子类重写过的方法
  • 非静态方法默认的调用对象是this
  • this对象在构造器或者init方法中就是正在创建的对象


最新2020整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友请加Q君样:11604713672

相关文章

  • 通过实例解析Java类初始化和实例初始化

    一、背景: 存在类Father和类Son,其中类Son继承了Father类。 1.父类Father代码 2.子类S...

  • 自整理1

    1.java类的实例的初始化过程: 静态变量->静态代码块->main->实例变量->实例初始化块->构造器 加载...

  • Java初始化顺序

    Java初始化顺序:①类变量、类方法>②(父类代码)>③实例变量>④构造器当一个类要实例化时,static变量和方...

  • JVM06 Java中对象的内存是如何布局的?

    Java中创建对象的方式 new -通过调用构造器来初始化实例字段反射-通过调用构造器来初始化实例字段Object...

  • Java单例模式之饿汉与懒汉模式

    通过2和3创建的是饿汉模式,2步骤会在类初始化时候创建类实例,特点是实例会占用类内存,初始化类的速度相对较慢通过4...

  • 初始化(Initialization)

    初始化概念: 类、结构体、枚举需要通过初始化对应的实例对象,来完成相应的功能。每一个实例初始化有相应的初始化方法。...

  • Java 中的 static 使用之静态初始化块

    Java 中可以通过初始化块进行数据赋值。如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行...

  • Python Magic and Builtin Method

    构造和初始化 __new__用来调用这个类,并返回这个类的实例 __init__只是将传入的参数来初始化该实例 控...

  • Flutter开发-Dart语言基础-3

    接着上篇,这节继续Dart基础语法. 类 类是一个实例的抽象,通过类来创建实例,创建实例的过程叫做初始化. 构造函...

  • Java String常量池

    1. String实例的初始化 String类型的初始化在Java中分为两类: 一类是通过双引号包裹一个字符来初始...

网友评论

      本文标题:通过实例解析Java类初始化和实例初始化

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