学习目标:
泛型
枚举
线程
学习内容:
- 泛型类泛型接口的应用,何时确定泛型类型。
- 枚举类的声明和使用
- 什么是进程
泛型 Generics
广泛的、普通的类型,反应可以帮助我们把类型确定下来,即把【类型明确】的工作推迟到创建对象或者调用方法的时候
超级数组中要么只能存数字,要么什么都能存
利用泛型可以解决问题
泛型的修饰
- 泛型类
- 泛型方法
- 泛型接口
泛型类:把泛型定义在类上,用户在使用类的时候才能把类型给确定。
使用方法:<> 加上一个未知数,通常用大写字母表示 K T V(实际只要是个单词就可以)
public class SupperSrray<>{T}B
我们在一个类的后面加上了泛型<>,这个T就是一个数据类型,数据T就是一个数据类型,可以直接拿过来用: pivate T t;
如果一个类泛型类没有在创建对象的时候指定泛型类型,默认是Object。在使用这个类的时候去确定这个类型。 SuperArray<String> superArray=new SuperArray<>(); 这个给超级数组就只能存String类型
泛型方法:我们如果只关心某个方法,我们可以不定义泛型类,之定义泛型方法
泛型方法不是一定要在泛型类里,类里不一定要有方法,与抽象方法类似
在定义泛型方法时,要首先定义泛型类型,定义在方法中间,泛型的使用处之前
public <T> T show(T t){ (要传参)
sout(t);
return t; }
void 没返回值 但是泛型通常需要返回值
new Ch03.show(“哈哈”);
泛型类里使用泛型的方法不是泛型方法
要知道什么方法是泛型方法
父类是泛型类,子类是不是泛型类都可以 泛型的声明只能在当前类名后或者方法中
class Father<T>{}
class son<T> extends Father<T>{} (是通过子类的泛型定义了父类的:父跟的子 子类的T 与父类无关,而且声明的类是自己的)
如果继承的时候,没有指出任何泛型,当前子类不是泛型
如果在一个泛型类中尽量不要使用泛型方法,泛型方法多适用于非泛型类中。
静态方法:static <T> T info(T t)
静态方法如果是泛型方法,泛型的声明必须写,因为静态结构是属于类的,不属于某个对象。
<?>通配符 可以接受任何类型
如果使用Object类型,就不应用泛型
类型参数化:
类型擦除:为了兼容性,使用原始类型(没有泛型)是可以的,在泛型新出的时候,还存在大量未使用泛型代码,为了保证代码的兼容性,将参数化类类型的实例传给设计用于原始类型的方法必须
为了保持兼容性,Java的泛型中,有一种伪泛型,在编译的时候所有的泛型都会被擦掉。
泛型的本质就是约定了一个需要遵守的规则 确定了泛型之后,这个数组统一只放统一类型
要求
1.泛型不能是基本数据类型 用包装器类型,或long
<>里面应该放的类名,数组是在编译后才会生产一个类($xxxx)
- 方法重载 同一个类 方法名相同 参数不同
类型擦除
- 多态上
泛型的应用场景
- 发生在父类或者接口中,起到的规范的作用,对里面的数据类型没有明确要求
- 容器类(超级数组,链表,队列,栈)
当类型无法确定时,使用泛型
更多的使用的泛型类和接口
枚举 enum
应用场景:某些情况下,一个类的对象的个数是有限的,如季节、星期。对象是有限个的时 候可以使用枚举
规定这个类的对象的个数
public enum Season{
SPRING(1,春天),
SUMMER(2,夏天);
}
不需要无参构造器,默认构造器是私有化的,不可以创建对象
Season season=Season.SPRING;
类名+属性名
在枚举类中,把需要用到的对象声明出来
写对应的构造器
可以有set,get方法
枚举的应用:
1.switch...case中使用 case SPRING
2.枚举的静态导入 static com.jsoft.afternoon.Season.*(枚举全类名) *代表导入枚举类的全部对象
3.所有的枚举类要以Enum结尾 SeasonEnum
使用枚举类实现单例模式: 单元素的枚举类型已经成为实现单例模式的最佳方案
枚举可以当内部类用
class Singleton{
私有化构造器
private Singleton(){}6
提供公有的获取实例的静态方法
public static Singleton getInstance(){
return SinglutonHolder.INSTANT.instant;
}
声明一个枚举类(内部类)
private enum SingletonHolder{
INSTANT;
private final Singleton instant;
SingletonMolder(){
instant=new Singleton();
}
}
}
public class Ch05{
sout(Sing)
}
所有东西都是静态的
枚举的优势
- int 类型不具备安全性,如果定义int的时候少写了个final,会存在被他人修改的风险。如果是枚举类,他天然就是一个常量类。
- int类型定义不够明确。如果想在控制台打印输出1
枚举里都是常量,静态 推荐使用==符号比较
- 泛型类泛型接口的应用,确定泛型类型。
- 枚举类的声明和使用
- 什么是进程