以下学习笔记记录于:2024.08.21-2024.08.27
文章目录
阶段二 JavaSE进阶
第一章 面向对象高级部分
1-6 内部类
31 内部类概述、成员内部类【了解】
- 内部类有4种形式:成员内部类、静态内部类、局部内部类、匿名内部类*
- JDK 16开始才支持在成员内部类中定义静态成员;
- 成员内部类对象依赖于外部类对象,所以要先创建好外部类对象才能new一个成员内部类对象。
32 静态内部类、局部内部类(鸡肋)【了解】
33 匿名内部类**
34 匿名内部类的使用场景
若在开发中只用创建一次子类对象来进行使用,则可以用匿名内部类。
匿名内部类的应用场景:其通常作为一个参数传输给方法。
1-7 枚举、泛型
35 枚举:概述
- intelliJ IDEA 有时候反编译结果不太准确,可以用javap方式进行查看(也存在不全的情况)或者使用专业反编译软件;
- javap命令反汇编一个或多个class文件。输出依赖使用的参数,若不使用参数,直接使用javap命令会打印 protected 和 public 限定的类属性和方法;
- javap命令直接将结果打印到控制台。
enum类提供了一个ordinal()方法,用来返回枚举对象的序数。
36 枚举:应用场景
37 泛型:概述
本小节以ArrayList为例进行理解,具体内容请参考笔记5的阶段一第三章有关ArrayList的内容。
38 泛型:泛型类
public class MyArrayList1<E>{} // 泛型定义形式1:此处的类型变量E可以改为其他字母,建议用大写字母替代
public class MyArrayList2<E, T>{} // 泛型定义形式2:可以声明多个类型变量
public class MyArrayList3<E extends Animal>{} // 泛型定义形式3:可以对所声明的类型变量进行限定。此处的意义是:在使用该泛型类时,填写的泛型具体数据类型,它必须是继承Animal类型的或者是Animal本身才可以
39 泛型:泛型接口
40 泛型:泛型方法
自己声明类型变量的方法才是泛型方法,使用泛型类声明的类型变量而非自己声明则不是。
package com.itheima.hello.ObjectDemo.d8_generics_method;
import com.itheima.hello.ObjectDemo.d3_abstract.Dog;
import java.util.ArrayList;
// 目标:掌握泛型方法的定义和使用
// 其中 Car 是父类,BMW 和 BENZ 是 Car 的子类
public class Test {
public static void main(String[] args) {
String rs = test("java");
System.out.println(rs);
// 需求:所有汽车可以一起参加比赛
ArrayList<Car> cars = new ArrayList<>();
cars.add(new BMW());
cars.add(new BENZ());
go(cars);
ArrayList<BMW> bmws = new ArrayList<>();
cars.add(new BMW());
cars.add(new BMW());
go(bmws);
ArrayList<BENZ> benzs = new ArrayList<>();
cars.add(new BENZ());
cars.add(new BENZ());
go(benzs);
// go 泛型方法用 "T extends Car" 过滤掉除汽车之外的其他类型
// ArrayList<Dog> dogs = new ArrayList<>();
// cars.add(new Dog());
// cars.add(new Dog());
// go(dogs);
}
// ? 通配符
public static void go(ArrayList<? extends Car> cars){}
// 泛型方法
// public static <T extends Car> void go(ArrayList<T> cars){}
public static <T> T test(T t){
return t;
}
}
41 泛型:注意事项
- 编译之后的Test.class放在了out文件夹下。