泛型 枚举 线程

学习目标:

泛型

枚举

线程


学习内容:

  1. 泛型类泛型接口的应用,何时确定泛型类型。
  2. 枚举类的声明和使用
  3. 什么是进程

泛型 Generics

广泛的、普通的类型,反应可以帮助我们把类型确定下来,即把【类型明确】的工作推迟到创建对象或者调用方法的时候

超级数组中要么只能存数字,要么什么都能存

利用泛型可以解决问题

泛型的修饰

  1. 泛型类
  2. 泛型方法
  3. 泛型接口

泛型类:把泛型定义在类上,用户在使用类的时候才能把类型给确定。

使用方法:<> 加上一个未知数,通常用大写字母表示 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)

  1. 方法重载 同一个类 方法名相同 参数不同

类型擦除

  1. 多态上

泛型的应用场景

  1. 发生在父类或者接口中,起到的规范的作用,对里面的数据类型没有明确要求
  2. 容器类(超级数组,链表,队列,栈)

   当类型无法确定时,使用泛型

更多的使用的泛型类和接口

枚举 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)

}

所有东西都是静态的

枚举的优势

  1. int 类型不具备安全性,如果定义int的时候少写了个final,会存在被他人修改的风险。如果是枚举类,他天然就是一个常量类。
  2. int类型定义不够明确。如果想在控制台打印输出1

  枚举里都是常量,静态  推荐使用==符号比较

 


  • 泛型类泛型接口的应用,确定泛型类型。
  • 枚举类的声明和使用
  • 什么是进程
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烫嘴的辛拉面

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值