Java第九周学习总结:内部类与注解(1)

Java第九周学习总结:内部类与注解

一、本周学习前言

经过前几周对 Java 面向对象核心内容的学习,我已经掌握了类、对象、继承、多态、方法重写等基础知识点。本周课程主要学习内部类注解两大内容,它们是面向对象知识的延伸,能够优化代码结构、提升代码规范性,也为后续 Java 高阶内容和框架学习打好基础。相较于基础语法,这部分内容更侧重实际开发中的代码简化与约束,本周我结合课堂内容完成了代码练习,下面对知识点、实操问题进行完整复盘。

二、核心知识点学习总结

(一)内部类

内部类指定义在另一个类(外部类)内部的类,它可以实现更精细的封装。内部类能直接访问外部类的私有成员,而外部无法直接访问内部类,适合将功能关联的代码整合在一起,让程序逻辑更加紧凑。

根据定义位置、修饰符和使用形式,内部类分为成员内部类、静态内部类、局部内部类、匿名内部类四类。

  1. 成员内部类
    定义在外部类中、方法之外,属于外部类的实例成员,不能使用 static 修饰
  • 访问规则:可直接调用外部类所有属性和方法(包括私有);外部类想要使用内部类成员,必须先创建内部类对象。
  • 创建对象:需要依托外部类实例来创建。

示例代码:

java
// 外部类
public class Outer {
private String msg = "外部类私有数据";

// 成员内部类
public class Inner {
public void printInfo() {
// 直接访问外部类私有成员
System.out.println(msg);
}
}

public static void main(String[] args) {
// 成员内部类实例化
Outer.Inner inner = new Outer().new Inner();
inner.printInfo();
}
}

  1. 静态内部类
    被static修饰的成员内部类,属于外部类的静态成员,不依赖外部类对象。
  • 访问规则:仅能访问外部类的静态成员,无法调用实例属性和实例方法。
  • 创建对象:无需先创建外部类对象,可直接独立实例化,使用起来更加简便。
  1. 局部内部类
    定义在方法、代码块或循环内部的类,作用域仅限于当前代码段。
  • 限制:只能使用默认访问权限,不能添加public、private、static等修饰符;出了所在方法 / 代码块后,该类就无法使用。
  1. 匿名内部类
    本周学习的重点,也是实际开发中使用频率最高的一种内部类。它没有类名,属于局部内部类的特殊形式,常用来快速实现接口或继承抽象类,省去单独定义实现类的步骤,大幅简化代码。
  • 特点:一般只使用一次,适合临时重写方法、快速完成功能实现。

(二)注解(Annotation)

注解是标注在代码上的特殊标记,用于对代码进行说明、约束和校验。它本身不会影响程序运行,主要为编译器、JVM 以及后续框架提供参考依据,是规范代码编写的重要工具。

  1. Java 三大基础内置注解
  • @Override:标注在重写的方法上,编译器会自动校验方法格式,判断是否符合重写规则,避免因方法名、参数列表写错导致重写失效。
  • @Deprecated:标记已过时的方法、类或属性,提示开发者该内容不建议继续使用。
  • @SuppressWarnings:用于压制编译警告,可清除未使用变量、冗余代码等带来的黄色警告,让代码界面更整洁。
  1. 元注解(基础了解)
    元注解是用来修饰自定义注解的注解,常用的有四种:
  • @Target:限定注解可以标注的位置(类、方法、变量等);
  • @Retention:设置注解的保留生命周期(源码阶段、编译阶段、运行阶段);
  • @Documented:使用该注解后,自定义注解会被提取到 API 文档中;
  • @Inherited:表示子类可以继承父类上的该注解。

三、本周实操练习与代码案例

结合本周所学内容,完成了成员内部类、静态内部类、匿名内部类以及基础注解的实操练习,以下是典型案例。

案例 1:静态内部类演示

java
public class StaticOuter {
private static String name = "静态成员";

// 静态内部类
public static class StaticInner {
public void show() {
// 访问外部类静态成员
System.out.println(name);
}
}

public static void main(String[] args) {
// 直接创建静态内部类对象
StaticOuter.StaticInner inner = new StaticOuter.StaticInner();
inner.show();
}
}

案例 2:匿名内部类实现接口

无需单独创建接口实现类,借助匿名内部类快速重写接口方法,是日常开发的常用写法:

java
// 定义接口
interface Work {
void doWork();
}

public class AnonymousTest {
public static void main(String[] args) {
// 匿名内部类快速实现接口
new Work() {
@Override
public void doWork() {
System.out.println("练习Java内部类与注解知识点");
}
}.doWork();
}
}

案例 3:基础注解综合使用

java
public class AnnotationTest {

// 标记方法已过时
@Deprecated
public void oldMethod() {
System.out.println("这是一个过时方法");
}

// 压制警告 + 方法重写
@SuppressWarnings("all")
@Override
public String toString() {
return "注解测试类";
}

public static void main(String[] args) {
AnnotationTest test = new AnnotationTest();
test.oldMethod();
System.out.println(test);
}
}

四、学习中遇到的问题与解决方法

  1. 成员内部类实例化格式记混
    刚开始经常写错创建对象的代码,分不清成员内部类和静态内部类的实例化区别。后来总结规律:成员内部类依赖外部类实例,格式为外部类.内部类 对象 = new 外部类().new 内部类();静态内部类直接外部类.内部类 对象 = new 外部类.内部类(),反复练习后逐渐熟练。
  2. 匿名内部类理解困难
    一开始不理解为什么不需要类名就能使用,后来通过多次手写代码练习,明白它的核心作用就是临时使用、简化代码,多用于接口和抽象类的快速实现,慢慢掌握了使用场景。
  3. 注解作用混淆
    初期分不清三个基础注解的用途,通过在代码中逐个添加、观察编译提示,分清了@Override用于校验重写、@Deprecated标记过时内容、@SuppressWarnings消除警告,能够根据需求正确使用。

五、本周学习总结与后续计划

本周学习的内部类和注解,是 Java 面向对象知识的重要拓展。内部类让类的划分更加灵活,封装性更强,尤其是匿名内部类,在简化代码方面作用突出;注解则规范了代码编写,减少开发中的低级错误。

目前我已经掌握了基础用法,但对于局部内部类、自定义注解的复杂用法还不够熟练。接下来我会多做课后习题,结合实际场景练习代码,巩固本周知识点。同时提前预习下一阶段内容,稳步推进 Java 学习。

posted @ 2026-06-07 17:44  张一威  阅读(4)  评论(0)    收藏  举报