第一季:3类和实例初始化【Java面试题】

简介: 第一季:3类和实例初始化【Java面试题】

前言


2022 9/30 10:48

路漫漫其修远兮,吾将上下而求索


本文是根据尚硅谷学习所做笔记

仅供学习交流使用,转载注明出处

推荐

【尚硅谷经典Java面试题第一季(java面试精讲)-哔哩哔哩】

尚硅谷经典Java面试题一二三季

尚硅谷经典Java面试题(第1季)

第一季:3类和实例初始化

题目



运行结果

由父及子,静态先行,由上到下

(5)(1)(10)(6)(9)(3)(2)(9)(8)(7)
(9)(3)(2)(9)(8)(7)

考点?

  • 类初始化过程
  • 实例初始化过程
  • 方法的重写

类初始化过程

①一个类要创建实例需要先加载并初始化该类

  • main方法所在的类需要先加载和初始化
  //(5)(1)(10)(6)
    public static void main(String[]args){
//        Son s1=new Son();
//        System.out.println();
//        Son s2=new Son();
    }

②一个子类要初始化需要先初始化父类

③ 一个类初始化就是执行< clinit>方法

  • < clinit>()方法由静态类变量显示赋值代码和静态代码块组成
  • 类变量显示赋值代码和静态代码块代码从上到下顺序执行
  • < clinit>()方法只执行一次

实例初始化过程

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

方法的重写Override

①哪些方法不可以被重写

  • final方法
  • 静态方法
  • private等子类中不可见方法
    ②对象的多态性
  • 子类如果重写了父类的方法,通过子类对象调用的一定是子类重写过的代码
  • 非静态方法默认的调用对象是this
  • this对象在构造器或者说< init>方法中就是正在创建的对象

分析

package test3;
/**
 * 父类的初始化<clint>:
 * (1) j = method()
 * (2) 父类的静态代码块
 * 父类的实例化方法:
 * (1) super(最前)
 * (2) i=test()   (9)
 * (3) 父类的非静态代码块  (3)
 * (4) 父类的无参构造(最后) (2)
 *
 * 非静态方法前其实有一个默认的对象this
 * this在构造器(或<init>)它表示的是正在创建的对象,因为这里是创建Son对象,所以
 * test()执行的是子类重写的代码(面向对象多态)
 *
 * 这里i=test()执行的是子类重写的test()方法
*/
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)");
        return 1;
    }
    public static int method() {
        System.out.print("(5)");
        return 1;
    }
}
package test3;
/**
 *
 * 初始化子类<clint>
 *  (1)j = method()
 *  (2)子类的静态代码块
 *
 * 先初始化父类:(5)(1)
 * 初始化子类:  (10)(6)
 *
 * 子类的实例化方法<init>:
 * (1) super(最前)  (9) (3) (2)
 * (2) i=test()     (9)
 * (3) 子类的非静态代码块  (8)
 * (4) 子类的无参构造(最后)  (7)
 *
 * 因为创建了两个Son对象,因此实例化方法<init>执行两次
 * (9) (3) (2)  (9) (8) (7)
 */
public class Son extends Father {
    private int i = test();
    private static int j = method();
    static {
        System.out.print("(6)");
    }
    Son() {
//        super();//写或不写都在,在子类构造器之间一定会调用父类的构造器
        System.out.print("(7)");
    }
    {
        System.out.print("(8)");
    }
    public int test() {
        System.out.print("(9)");
        return 1;
    }
    public static int method(){
        System.out.print("(10)");
        return 1;
    }
    public static void main(String[]args){
        Son s1=new Son();
        System.out.println();
        Son s2=new Son();
    }
}

进阶要求:

  • Override和Overload的区别?
  • Override重写的要求?
  • 方法名
  • 形参列表
  • 返回值类型
  • 抛出的异常列表
  • 修饰符
  • 了解《JVM虚拟机规范》中关于和方法的说明、invokespecial指令

最后


2022 9/30 11:52


p3


Markdown 2565 字数 231 行数

HTML 2225 字数 149 段落

相关文章
|
1天前
|
安全 Java 开发者
Java一分钟之-文件与目录操作:Path与Files类
【5月更文挑战第13天】Java 7 引入`java.nio.file`包,`Path`和`Files`类提供文件和目录操作。`Path`表示路径,不可变。`Files`包含静态方法,支持创建、删除、读写文件和目录。常见问题包括:忽略异常处理、路径解析错误和权限问题。在使用时,注意异常处理、正确格式化路径和考虑权限,以保证代码稳定和安全。结合具体需求,这些方法将使文件操作更高效。
10 2
|
1天前
|
安全 Java 开发者
Java一分钟之-Optional类:优雅处理null值
【5月更文挑战第13天】Java 8的`Optional`类旨在减少`NullPointerException`,提供优雅的空值处理。本文介绍`Optional`的基本用法、创建、常见操作,以及如何避免错误,如直接调用`get()`、误用`if (optional != null)`检查和过度使用`Optional`。正确使用`Optional`能提高代码可读性和健壮性,建议结合实际场景灵活应用。
16 3
|
1天前
|
消息中间件 安全 前端开发
字节面试:说说Java中的锁机制?
Java 中的锁(Locking)机制主要是为了解决多线程环境下,对共享资源并发访问时的同步和互斥控制,以确保共享资源的安全访问。 锁的作用主要体现在以下几个方面: 1. **互斥访问**:确保在任何时刻,只有一个线程能够访问特定的资源或执行特定的代码段。这防止了多个线程同时修改同一资源导致的数据不一致问题。 2. **内存可见性**:通过锁的获取和释放,可以确保在锁保护的代码块中对共享变量的修改对其他线程可见。这是因为 Java 内存模型(JMM)规定,对锁的释放会把修改过的共享变量从线程的工作内存刷新到主内存中,而获取锁时会从主内存中读取最新的共享变量值。 3. **保证原子性**:锁
14 1
|
1天前
|
存储 Java ice
【Java开发指南 | 第十六篇】Java数组及Arrays类
【Java开发指南 | 第十六篇】Java数组及Arrays类
8 3
|
1天前
|
Java 编译器 ice
【Java开发指南 | 第十五篇】Java Character 类、String 类
【Java开发指南 | 第十五篇】Java Character 类、String 类
11 1
|
1天前
|
存储 Java ice
【Java开发指南 | 第十四篇】Java Number类及Math类
【Java开发指南 | 第十四篇】Java Number类及Math类
10 1
|
1天前
|
Java ice
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
10 4
|
1天前
|
存储 Java ice
【Java开发指南 | 第七篇】静态变量生命周期、初始化时机及静态变量相关性质
【Java开发指南 | 第七篇】静态变量生命周期、初始化时机及静态变量相关性质
14 4
|
监控 算法 Java
Java 最常见的 208 道面试题(二十)
Java 最常见的 208 道面试题
140 0
|
存储 NoSQL 前端开发
Java 最常见的 208 道面试题(十九)
Java 最常见的 208 道面试题
113 0
Java 最常见的 208 道面试题(十九)