Java实训笔记——-抽象类-接口-泛型-集合
Posted vector11248
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 不允许为空
以上是关于Java实训笔记——-抽象类-接口-泛型-集合的主要内容,如果未能解决你的问题,请参考以下文章