面向对象进阶第三天
内部类
内部类是什么?
使用场景
内部类有几种
-
1、静态内部类
-
是什么?有static修饰,属于外部类本身。
-
特点:只是位置在类里面。类有的成分它都有。
-
创建对象:
- 外部类.内部类名 对象名 = new 外部类名.内部类构造器;
-
拓展
1、静态内部类可以直接访问外部类的静态成员吗? 可以的
2、静态内部类中是否可以直接访问外部类的实例成员? 不可以的
-
2、成员内部类(实例内部类)
-
是什么?
-
特点:JDK 16中类有的成分,它都有。
-
创建对象 :
- 外部类.内部类 对象名 = new 外部类构造器.new 内部类构造器;
-
拓展
1、成员内部类中是否可以直接访问外部类的静态成员? 可以
2、成员内部类的实例方法中是否可以直接访问外部类的实例成员? 可以
-
3、局部内部类
-
4、匿名内部类(重点)
-
使用匿名内部类的好处:
-
方便构建子类对象,最终目的:简化代码
-
格式:
- new 类名|接口|抽象类(){
方法重写;
}
-
特点:
-
匿名内部类是一个没有名字的局部内部类,本身也是一个所谓的子类对象。
-
匿名内部类产生的对象类型,相当于是当前new的那个的类型的子类类型。
枚举
是什么? 是一种特殊类型。 枚举的特征:
-
枚举类都是继承了枚举类型:java.lang.Enum
-
枚举都是最终类,不可以被继承。
-
构造器都是私有的,枚举对外不能创建对象。
-
枚举类的第一行默认都是罗列枚举对象的名称的。
-
枚举类相当于是多例模式。
泛型
认识泛型
泛型类
泛型接口
泛型方法
泛型通配符、上下限
-
? 可以在“使用泛型”的时候代表一切类型。
-
E T K V 是在定义泛型的时候使用的。
-
泛型的上下限
泛型的注意事项:擦除问题、基本数据类型问题
java.lang包下常用API
API概述
API全称是应用程序编程接口,是Java写好的程序,程序员可以直接调用。
Object类:toString方法
Object是祖宗类,它里面的方法,一切子类对象都可以使用。
public String toString()
Student s = new Student("张三",'女', 23);
toString存在的意义:
Object类:equals方法
public boolean equals(Object o )
equals存在的意义
Object类:clone方法
protected Object clone()
当某个对象调用这个方法时,这个方法会复制一个一模一样的新对象返回。
分类:
-
浅克隆:拷贝出的新对象,与原对象中的数据一模一样(引用类型拷贝的只是地址)
-
深克隆:
对象中基本类型的数据直接拷贝。
对象中的字符串数据拷贝的还是地址。
对象中还包含的其他对象,不会拷贝地址,会创建新对象。
Objects
Objects是一个工具类,提供了更安全的方式比较2个对象。
Student s = null;
Objects常见方法:
方法名 | 说明 |
public static boolean equals(Object a, Object b) |
比较两个对象的,底层会先进行非空判断,从而可以避免空指针异常。再进行equals比较 |
public static boolean isNull(Object obj) |
判断变量是否为null ,为null返回true ,反之返回false |
包装类
其实就是8种基本数据类型对应的引用类型。
作用:实现一切皆对象
包装类的分类:
基本数据类型 | 引用数据类型 |
byte |
Byte |
short |
Short |
int |
Integer |
long |
Long |
char |
Character |
float |
Float |
double |
Double |
boolean |
Boolean |
包装类其实可以随便用的:int integer
包装类的特有功能:
1、基本类型变成字符串
- // 1、调用包装类继承自Object的toString方法
- String rs1 = it6.toString(); // "23"
- System.out.println(rs1 + 1); // 231
- ?
- // 2、调用静态方法: public static String toString(int i)
- String rs2 = Integer.toString(it6);// "23"
- System.out.println(rs2 + 1);
- ?
- // 3、直接加 “”
- String rs3 = it6 + ""; // "23"
- System.out.println(rs3 + 1);
2、把字符串变成基本数据类型(重点)
- String age = "23";
- // int ageInt = Integer.parseInt(age);
- int ageInt = Integer.valueOf(age);
- System.out.println(ageInt + 1);
- ?
- String price = "98.5";
- // double priceDb = Double.parseDouble(price);
- double priceDb = Double.valueOf(price);
- System.out.println(priceDb + 0.5);