Java实训笔记,二——-抽象类-接口-泛型-集合

1.1方法的可变参数

从JDK1.5之后,定义方法时参数的个数可以变化

语法:最后一个数据类型后增加3个点

注意:

1.可变参数只能处于参数列表的最后;

2.一个方法中最多只能包含一个可变参数;

3.可变参数的本质就是一个数组,因此在调用一个包含可变参数的方法时,既可以传人多个参数,也可以传入一个数组。

1.2装箱与拆箱

基本数据类型与对应的封装类之间能够自动进行转换,其本质是Java的自动装箱与拆箱过程。

-装箱是指将基本类型数据值转换成对应的封装类对象,即将栈中的数据封装成对象存放到堆中的过程。

-拆箱是装箱的反过程,是将封装的对象转换成基本型数据值,即将堆中的数据值存放到栈中的过程。

1.3Math 和Date

Math类包含基本数学运算的方法,都是静态的 ,可以直接调用而无需实例化。

abs(double a) ceil() 向下取整,floor()向上取整,round(),

1.4 Final关键字

表示不可改变,修饰变量方法和类

修饰变量,表示常量

修饰方法,不能被子类重写

修饰类,不能被继承

1.5单例模式

public class SingletonDemo {

public static void main(String[] args) {

Singleton s1 = Singleton.getInstance();

Singleton s2 = Singleton.getInstance();

if(s1==s2)

{

System.out.println("同一个对象");

}

}

}

class Singleton{

private static Singleton instance = null;

private Singleton(){}

public static Singleton getInstance(){

if(instance == null){

instance = new Singleton();

}

return instance;

}

}

1.6抽象类

定义抽象类:

abstract 关键字不能用来修饰变量和构造方法,即没有抽象变量和抽象构造方法的说法 。abstract关修饰的的方法只有被子类重写才有意义。否则这个方法永远没有方法体,因此抽象方法不能被定义为private,即private 和abstract不能同时修饰方法,avstract也不能和static,final 或native 同时修饰同一方法。

抽象类不能被实例化,只能被当成父类来继承。从语义角度上讲,抽象类是从多个具有相同特征的类中抽象出的一个父类。

1.7抽象类和接口的比较:

相似:接口和抽象类都不能被实例化,其类型变量都可以指向其实现类或者子类的变量。

区别:接口体现的是规范,是系统各模块应该遵循的标准。

抽象类体现的是模板式设计。抽象类可以被当成系统中的中间产品,而不是最终产品 ,还需要进一步完善。

接口中定义的变量都是最终的静态常量。

接口中定义的方法默认缺省是public

抽象类与类是默认缺省的

接口不包含构造方法

抽象类可以包含构造方法,抽象类的构造方法不是用于创建对象,而是让其子类调用以便完成初始化操作。

一个类最多只能有一个直接父类,包括抽象类

一个类可以实现多个接口

1.8instanceof关键字

同种类型的两个引用变量调用同一个方法时可能会有不同的行为。

语法:

引用类型变量 instanceof 引用类型

1.9 泛型

从jdk5.0开始,Java引入“参数化类型”的概念,泛型是将数据类型参数化,即在编写代码时将数据类型定义成参数,这些类型参数在使用之前再进行指明。

泛型类语法:

[访问符] class 类名 <类型参数列表>{

//类体......

}

通配符:

声明和创建泛型实例对象时,都应该为此泛型传人一个实参,否则编译器会提出泛型警告。

假设现在定义一个方法,该方法的参数需要使用泛型,但类型参数是不确定的,如果使用Object类型来解决,编译时则会出现错误。

通配符是由?来表示。

有界类型:

-使用extends关键字声明类型参数的上界;

-使用super关键字声明类型参数的下界;

上界:

语法:[访问符] class 类名<类型参数 extends 父类>{

//类体....

}

下界:

<? super String>

泛型的限制:

java编译时类型擦除

-泛型的类型参数只能是类类型;

-同一个泛型类可以有多个版本,不同版本的泛型类的实例是不兼容的。

-定义泛型时,类型参数只是占位符,不能直接实例化,例如:new T()是错误的。

-不能实例化泛型数组,除非是无上界的类型同配符,例如:

“Generic<String>[] a = new Generic<String>[10] 是错误的”,而"Generic<?>[] a=new Generic<?> [10]"是被允许的。

-泛型类不能继承Throwable及其子类,即泛型类不能是异常类,不能抛出也不能捕获泛型类的异常对象,例如:“class GenericException<T> extends Exception”"catch(T e)"都是错误的。

集合类

1.set接口

set无序,不重复。

常用实现类:HashSet、TreeSet、EnumSet

HashSet元素不重复

TreeSet元素不重复, 可以进行自然排序

2.Queue接口及其实现类

队列Queue 先进先出

element offer peek poll remove

Deque接口,双端的队列

addFirst addLast getFirst getLast offerFirst

LinkedList 兼具List和Deque,线程不安全。

ArrayDeque:

PriorityQueue:

Map接口

Map 与Collection接口并列,主要以key-value键值对映射关系:

-HashMap 基于哈希算法,无序映射集合

-TreeMap 根据key自然排序,或定制排序

TreeMap 不允许为空

******************************************************************************