Java泛型
Java泛型的主要目的是可以建立具有类型安全的数据结构,如链表,散列表,等数据结构其重要的一个优点就是,在使用这些泛型类建立的数据结构时,不必进行强制类型转换,即不要求进行运行时类型检查.
泛型类
为了和普通类有所区别,通常都是使用"class名称<泛型列表>"声明一个类
class People<E> //声明一个泛型类
其中People是泛型类的名称,E因为没有指明是那种类型,所以E可以是任何类或接口,但不能是基本数据类型
泛型类的类体和普通类体完全相似,由成员变量和成员方法组成
例如
public class Cone<E> { //创建一个泛型类
double height;
E bottom;
public Cone(E b) { //构造方法,将E的类型b传给bottom
bottom = b;
}
}
使用泛型类声明对象
和普通类相比泛型类声明和创建对象时类名后多了一对<>,而且要用具体类型替换<>中的泛型
- 使用具体类型
Cone<ConcreteObject> object = new Cone<ConcreteObject>(concrete)//意思是<>内只能是ConcreteObject类型的类
- 使用通配符"?"
Cone<? extends Father> man = new Cone<Son>(son) //意思就是<>内只能是Father的子类
Cone<? super Son> man = new Cone<Father>(father)//意思是<>内只能是Son的父类或者自身
Cone<?> man = new Cone<Man>(man)//意思是<>内没有限制
具体的例子
public class Cone<E> { //创建一个泛型类
double height;
E bottom;
public Cone(E b) { //构造方法,将E的类型b传给bottom
bottom = b;
}
public void setHeight(double height) {
this.height = height;
}
public double getVolume(){
double area = Double.parseDouble(bottom.toString()); //泛型类变量只能调用继承或重写的方法
return height*area;
}
}
class Rect {
double sideA;
double sideB;
Rect(double sideA, double sideB, double sideC) {
this.sideA = sideA;
this.sideB = sideB;
}
@Override
public String toString() { //重写toString方法
double area = sideA * sideB;
return "" + area;
}
}
public class Example13_1 {
public static void main(String[] args) {
Cone<?> cone = new Cone<Rect>(new Rect(10, 10, 10)); //<?>表示没有限制具体什么类型
System.out.println("底面积是" + cone.bottom); //因为重写了toString方法,所以直接显示面积
cone.setHeight(10); //设置高
System.out.println("体积是" + cone.getVolume());
}
}
运行结果
D:\HelloWorld\out\production\HelloJava Chapter_13.Part_1.Example13_1
底面积是100.0
体积是1000.0
进程已结束,退出代码 0
泛型类可以使用泛型接口
可以使用interface名称<泛型列表>声明一个接口,这样声明接口称为泛型接口
interface Computer<E> //声明一个泛型接口
具体例子
interface Computer<E,F>{ //泛型接口
public abstract void makeChorus(E e,F f); //抽象方法
}
class Chorus<E,F>implements Computer<E,F>{ //泛型类实现了泛型接口
@Override
public void makeChorus(E e, F f) { //带泛型类型变量
e.toString();
f.toString();
}
}
class Singer{
@Override
public String toString() { //重写toString方法
System.out.println("我和你,心连心,同住地球村");
return "";
}
}
class Music{
@Override
public String toString() { //重写toString方法
System.out.println("|4 2 3-|2 3 6-|5 2 _2 2|");
return "";
}
}
public class Example13_2 {
public static void main(String[] args) {
Chorus<Singer,Music> chorus = new Chorus<Singer,Music>(); //<>指定了哪种类型
chorus.makeChorus(new Singer(),new Music());
}
}
运行结果
D:\HelloWorld\out\production\HelloJava Chapter_13.Part_1.Example13_2
我和你,心连心,同住地球村
|4 2 3-|2 3 6-|5 2 _2 2|
进程已结束,退出代码 0
值得注意的是
//泛型变量只能调用从Object类继承或重写的方法
进程的控制
进程的控制机构是由操作系统内核实现的
-
支撑功能
1.中断处理 //操作系统的各种重要活动最终都依赖于中断
2.时钟管理 //操作系统的许多活动都要用到时钟管理
3.原语操作 //内核在执行某些基本操作时,往往是通过原语操作进行的 -
资源管理功能
1.进程管理
2.存储器管理
3.设备管理
CET4P180
- butterfly
- rocket
- charge
- internal
- criticize
- dump
- installation
- dispute
- disorder
- dessert