黑马java学习笔记8(阶段二 第一章 1-6~1-7)第一章完结

以下学习笔记记录于:2024.08.21-2024.08.27

阶段二 JavaSE进阶

第一章 面向对象高级部分

1-6 内部类

31 内部类概述、成员内部类【了解】

在这里插入图片描述

  • 内部类有4种形式:成员内部类、静态内部类、局部内部类、匿名内部类*

image-20240822170545008

  • JDK 16开始才支持在成员内部类中定义静态成员;
  • 成员内部类对象依赖于外部类对象,所以要先创建好外部类对象才能new一个成员内部类对象。

image-20240822170830930

32 静态内部类、局部内部类(鸡肋)【了解】

image-20240822173631166

image-20240822173541640

image-20240822173739008

33 匿名内部类**

image-20240826164001626

在这里插入图片描述

34 匿名内部类的使用场景

若在开发中只用创建一次子类对象来进行使用,则可以用匿名内部类。

image-20240826164610464

匿名内部类的应用场景:其通常作为一个参数传输给方法。

1-7 枚举、泛型

35 枚举:概述

image-20240826170724952

image-20240826170355856

image-20240828122328911

  • intelliJ IDEA 有时候反编译结果不太准确,可以用javap方式进行查看(也存在不全的情况)或者使用专业反编译软件;
  • javap命令反汇编一个或多个class文件。输出依赖使用的参数,若不使用参数,直接使用javap命令会打印 protected 和 public 限定的类属性和方法;
  • javap命令直接将结果打印到控制台。

image-20240827164828060

enum类提供了一个ordinal()方法,用来返回枚举对象的序数。

36 枚举:应用场景

image-20240827170456299

image-20240827170405435

37 泛型:概述

本小节以ArrayList为例进行理解,具体内容请参考笔记5的阶段一第三章有关ArrayList的内容

image-20240827205510190

38 泛型:泛型类

image-20240828115239580

image-20240828113949830

public class MyArrayList1<E>{}	// 泛型定义形式1:此处的类型变量E可以改为其他字母,建议用大写字母替代
public class MyArrayList2<E, T>{}	// 泛型定义形式2:可以声明多个类型变量
public class MyArrayList3<E extends Animal>{}	// 泛型定义形式3:可以对所声明的类型变量进行限定。此处的意义是:在使用该泛型类时,填写的泛型具体数据类型,它必须是继承Animal类型的或者是Animal本身才可以
39 泛型:泛型接口

image-20240828115837867

image-20240828120207169

40 泛型:泛型方法

image-20240828120400007

自己声明类型变量的方法才是泛型方法,使用泛型类声明的类型变量而非自己声明则不是。

image-20240828121353082

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 泛型:注意事项

image-20240828202558908

image-20240828202832508

  • 编译之后的Test.class放在了out文件夹下。

image-20240828202530677

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值