类初始化与实例初始化

1|0类初始化与实例初始化

1|1类初始化

  1. 一个类要创建实例首先要先加载并初始化该类
  • main方法所在的类需要先加载和初始化
  1. 一个子类要初始化需要先初始化父类
  2. 一个类初始化就是执行<clint>()方法

1|2实例初始化

实例初始化就是执行()方法

  • <init>()方法可能重载有多个,有几个构造器就有几个 <init>()方法
  • <init>()方法由非静态实例变量显示赋值代码和非静态代码块、对应构造器代码组成
  • 非静态实例变量显示赋值代码和非静态代码块、对应构造器的代码最后执行
  • 每次创造实例对象,调用对应构造器,执行的就是对应的 <init>()方法
  • <init>()方法方法的首行执行的是super()或super(实参列表),即对应父类的 <init>()方法

1|3方法重写

  1. 哪些方法不可以被重写
  • final方法
  • 静态方法
  • private等子类中不可见方法
  1. 对象的多态性
  • 子类如果重写了父类的方法,通过子类对象调用的一定是子类重写过的代码
  • 非静态方法默认的调用对象时this
  • this对象在构造器或者说<init>中就是正在创建的对象
  1. 方法重写与方法重载
  • 重写
    要求两同两小一大原则, 方法名相同,参数类型相同,子类返回类型小于等于父类方法返回类型, 子类抛出异常小于等于父类方法抛出异常, 子类访问权限大于等于父类方法访问权限。[注意:这里的返回类型必须要在有继承关系的前提下比较]
  • 重载
    方法名必须相同,参数类型必须不同,包括但不限于一项,参数数目,参数类型,参数

1|4例题

下列程序运行结果为什么?

/** *父类初始化<clinit> * (1)j = method(); * (2)父类的静态代码块 * *父类实例化化<clinit> * (1)super(); * (2)i = test(); * (3)父类的非静态代码块 * (4)父类的无参构造 */ public class Father{ private int i = test(); private static int j = method(); static{ System.out.print("1"); } Father(){ System.out.print("2"); } { System.out.print("3"); } public int test(){ System.out.print("4"); } public static int method(){ System.out.print("5"); } }
/** * *子类初始化<clinit> * (1)j = method(); * (2)子类的静态代码块 * *子类实例化化<clinit> * (1)super(); * (2)i = test();(多态,子类继承父类并重写父类方法时执行) * (3)子类的非静态代码块 * (4)子类的无参构造 */ public class Son extends Father{ private int i = test(); private static int j = method(); static{ System.out.print("6"); } Father(){ System.out.print("7"); } { System.out.print("8"); } public int test(){ System.out.print("9"); } public static int method(){ System.out.print("10"); } public static void main(String[] args){ Son s1 = new Son(); System.out.print(); Son s2 = new Son(); } }

答案:s1:5 1 10 6 9 3 2 9 8 7 s2:9 3 2 9 8 7


__EOF__

本文作者别来无恙
本文链接https://www.cnblogs.com/lcy123/p/14963813.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   别来无恙!  阅读(105)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示