Java高级特性 2
6.泛型:
1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。
2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。
3、泛型的类型参数可以有多个。
4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上成为“有界类型”。
5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName(java.lang.String);
例子:
a..使用?通配符可以引用其他各种参数化的类型,但不能调用与参数化有关的方法;
Collection<?> c = new Vector<String>();
c.add("abc");//报错
c.size();//正确
所以,?通配符定义的变量主要用作引用,调用与参数化无关的方法,如果要调用与参数化相关的方法,那么必须在使用?通配符引用之前调用,否则就与java 5提供泛型的目的背道而驰了。
b..向下限定通配符:
正确:Vector<? extends Number> x = new Vector<Integer>();
错误:Vector<? extends Number> x = new Vector<String>();
向上限定通配符:
正确:Vector<? super Integer> x = new Vector<Number>();
错误:Vector<? super Integer> x = new Vector<Byte>();
jdk中原有的集合类中存在一些问题,java5以后希望你在定义集合时,明确表示你要向集合中装哪种类型的数据。为了和以前版本的兼容性,无法加入指定类型以外的数据,编译器会去除掉“类型”信息,使运行效率不受影响。在新语法情况,还可以把各种不同类型的数据装到一个集合中,可以按原始的方式去做。ArrayList<E>中的E是类型变量,参数化的类型(整个ArrayList<Integer>,即进行了参数化的类型),原始类型(也就是ArrayList),类型参数(ArrayList<Integer>中的Integer),以上几个术语应该牢记。参数化类型引用一个原始类型的对象,可以,但是报告警告。原始类型引用一个参数化类型的对象,可以,也会报告警告。有时候定义一个方法,打印一个集合中的数据,集合的类型变量该使用?通配符进行参数化。切忌不可以使用Object,如果使用了Object,则这个类型只能匹配Object类型的变量。例如:Vec
相关文档:
List的用法
List包括List接口以及List接口的所有实现类。因为List接口实现了Collection接口,所以List接口拥有Collection接口提供的所有常用方法,又因为List是列表类型,所以List接口还提供了一些适合于自身的常用方法,如表1所示。
表1 List接口定义的常用方法及功能
从表1可以看出,List接口提供的适合于自身的 ......
一。谁在做Garbage Collection?
一种流行的说法:在C++
里,是系统在做垃圾回收;而在Java
里,是Java
自身在做。
在C++
里,
释放内存是手动处理的,要用delete运算符来释放分配的内存。这是流行的说法。确切地说,是应用认为不需要某实体时,就需用delete告诉系统,可
以 ......
我们知道,在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。
这在JVM 1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。
在当前 ......
1. 概念: 序列化就是把对象变成对象流(确切说是把对象的属性写入流),如果需要进而可以把对象流存成二进制文件;
2. 目的: 序列化的目的是为了方便永久存储或者网络传输;
3. 如何实现: 将类实现Serializable接口即可,无必须实现的方法,实现该接口只是为了标识该类可被序列化;
4. (转)其他需要知道的:
  ......