Lazy loaded image
八股盛宴
Java
字数 1285阅读时长 4 分钟
2025-5-18
2026-1-30
type
Post
status
Published
date
Jan 30, 2026 12:22 PM
slug
summary
Java 基础知识
tags
Java
category
八股盛宴
icon
password

对象与类

  • static
  • overload
  • package
  • javadoc

继承

子类
  • extends
  • override
  • super
  • polymorphic 多态
  • final
  • abstract
  • protected
  • 方法调用
    • 重载解析、静态绑定、动态绑定
    • 参数数量可变
  • 强制类型转化
超类
  • Object equals、hashCode、toString
  • 对象包装器和自动装箱
    • Wrapper
    • auto-wrapping
枚举类
内部类
  • 成员内部类 作为外部类的成员定义,可以访问外部类的所有成员,包括私有成员。
  • 局部内部类 在方法或作用域块内部定义,只能在该方法或作用域块内使用,可以访问所在方法的参数和局部变量(如果它们是final或实际上不可变)。
  • 匿名内部类 没有名字的局部内部类,通常用于创建接口或抽象类的单个实例,常用于事件处理和回调。
  • 静态内部类 使用static关键字修饰,不持有对外部类实例的引用,因此不能直接访问外部类的非静态成员,但可以访问静态成员。
抽象类
abstract 关键词仅仅修饰类和方法,abstract method 无方法体。
abstract class 仍然具有类的功能,但是不能实例化。
abstract class 不一定有 abstract method,但是 abstract method 一定属于 abstract class。
非抽象类继承抽象类必须实现抽象类的所有方法,这就引出另一点,即 abstract method 不能使用 private、final 和 static 修饰,因为其和 override 相违背。
反射
反射即程序运行时分析类的能力,包括但是不限于获取类的内部信息、运行时检查对象和通过外部程序配置在不修改源码的情况下控制程序。 JVM 为所有类管理唯一的 Class 对象,该对象包含类的完整结构信息,并提供操作接口。
  • 获取 Class 对象
    • Class.forName(Path / className) 根据路径获取类,触发类的初始化
    • .class 不会触发初始化
      • className.class 获取已经加载的类
      • 基本数据类型.class / 包装类.TYPE
    • instance.getClass() 根据类实例获取类
    • classLoader.loadClass(Path) 使用类加载器加载指定路径的类
  • 操作 Class 对象
    • Field
      • class.getFields() / class.getDeclaredFields() 前者获取所有公共成员,包括超类公共成员。 后者获取所有成员,不包括超类成员
      • class.getDeclaredField(field_name) 获取指定成员
      • field.setAccessible(true) 爆破
      • field.set(instance, data) 修改属性,静态 instance 为 null,下同。
    • Method
      • classs.getMethods() / classs.getDeclaredMethods()
      • class.getDeclaredMethod(method_name, para_type.class)
      • method.setAccessible(true)
      • method.invoke(instance, para ···) 调用方法
    • Instance 获取实例
      • class.setAccessible(true)
      • class.newInstance()
      • class.getDeclaredConstructor(para_type.class ···).newInstance(para ···) 获取指定构造器后使用构造器新建实例
 

接口

interface
接口不是类,而是对希望符合这个接口的类的一组需求,即定义方法签名
接口不可实例化,但是可以声明接口变量引用实现该接口的类对象。
  • implements Java 不支持多重继承,但可以通过 implements 若干接口获得多重继承的大多数好处,同事避免多重继承的复杂性和低效性。
  • public、static、private、default
    • public static final field 接口定义字段默认为公共的、静态的和不可变的,即常量。 所有实现接口的类都可以访问这些常量。
    • public method 定义抽象方法。 这些方法必须由实现接口的类来具体实现。
    • default method 定义一个具有实现的方法。 任何实现了该接口的类都会继承这个默认方法,除非类本身提供了不同的实现。
    • static method 定义静态方法。 静态方法属于接口本身,而不是其实现类,因此可以通过接口名称调用。
    • private method 定义私有方法。 从Java 9 开始,接口可以拥有私有方法,将公共或默认方法的实现细节隐藏起来。 私有方法只能在接口内部被其他默认或静态方法调用。
  • Callback Java 使用 interface 实现回调机制,具体来说就是通过定义包含若干方法的接口,回调时传递实现该接口的实例,即使用匿名内部类。 可以使用 lambda 简化
Common interface
  • Comparator
  • Cloneable
lambda expression
  • functional interface 函数式接口,方法唯一的接口,可选 @FunctionalInterface 标记。 常见函数式接口 java.util.function:
    • Predicate<T> 接受参数,返回布尔值结果
    • Function<T, R> 接收参数,返回结果
    • Consumer<T>
    • Supplier<T> 接受参数,不返回结果
  • lambda expression 简化函数式接口应用书写,匿名内部类的代替。
    • (parameters) -> expression
    • (parameters) -> {statements;}
    • 即使没有 parameter 仍需要提供 (),但是如果 parameter 唯一则可以省略小括号。 如果可以推导参数类型,则可以忽略其类型。
  • method interface 方法引用,引用已经存在的方法。 可以简化 lambda 表达式书写。
    • Classname::staticMethodName
    • instanceReference::instanceMethodName
    • ClassName::instanceMethodName
    • ClassName::new

异常、断言

 
上一篇
Sort
下一篇
Kakfa