一、自动封箱和自动解箱技术
1、
自动封箱技术:编译器会自动将简单类型转换成封装类型。
2、
编译器会自动将封装类型转换成简单类型
3、
注:自动封箱和自动解箱只会在必要的情况下执行。
二、静态引用概念:
如:import static java.lang.System.*;
out.println(“a”);
三、新型for循环for—each,用于追求数组与集合的遍历方式统一
1、
数组举例:
String[]
ss = {“a”,”b”,”c”};
for(String
s : ss){ // s:遍历元素类型
ss:要遍历的对象
System.out.println(s);
}
2、
集合举例:
List
ll = new
ArrayList();
for(Object o : ll ){
System.out.println(o);
}
注:凡是实现了java.lang.Iterable接口的类就能用for—each遍历;
四、可变长的参数
一个关于变长参数的例子:
/**********************************************************/
import
static java.lang.System.*;
public
class TestVararg {
public
static
void main(String... args){
m();
m("Liucy");
m("Liucy","Hiloo");
}
static
void m(String... s){
//s可以看作是一个字符串数组String[]
s
out.println("m(String...)");
}
static
void m(){
out.println("m()");
}
static
void m(String s){
out.println("m(String)");
}
}
/**********************************************************/
注:一个方法的参数列表中最多只能有一个变长参数,而且这个变长参数必须是最后一个参数。方法调用时只会在必要时去匹配变长参数。
五、枚举enum
1、
定义:枚举是一个具有特定值的类型,对用户来说只能任取其一。对于面向对象来说时一个类的对象已经创建好,用户不能新生枚举对象,只能选择一个已经生成的对象。
2、
枚举本质上也是一个类。枚举值之间用逗号分开,以分号结束。
3、
枚举分为两种:类型安全的枚举模式和类型不安全的枚举模式
4、
枚举的超类是:Java.lang.Enum。枚举的构造方法默认也必须是private并且枚举是一个final类所以不能有子类。
5、
一个枚举值实际上是一个公开静态的常量,也是这个类的一个对象。
6、
枚举中可以定义抽象方法,其实现在个个枚举值中(匿名内部类的方式隐含继承)
/**********************************************************/
final
class Season1{
public
static
final Season1
SPRING=new
Season1("春");
public
static
final Season1
SUMMER=new
Season1("夏");
public
static
final Season1
AUTUMN=new
Season1("秋");
public
static
final Season1
WINTER=new
Season1("冬");
private Season1(){}
String name;
private Season1(String name){
this.name=name;
}
public String getName(){
return
this.name;
}
}
/**********************************************************/
/**********************************************************/
enum
Season2{
SPRING("春"),
SUMMER("夏"),
AUTUMN("秋"),
WINTER("冬");
String name;
Season2(String name){
this.name=name;
}
public String getName(){
return
this.name;
}
}
/**********************************************************/
7、
一个关于枚举的例子
/**********************************************************/
import
static java.lang.System.*;
public
class TestTeacher {
public
static
void main(String[] args) {
for(TarenaTeacher t:TarenaTeacher.values()){
t.teach();
}
}
}
enum
TarenaTeacher{
LIUCY("liuchunyang"){
void teach(){out.println(name+"
teach UC");}},
CHENZQ("chenzongquan"){
void teach(){out.println(name+"
teach C++");}},
HAIGE("wanghaige"){
void teach(){out.println(name+"
teach OOAD");}};
String name;
TarenaTeacher(String name){
this.name=name;
}
abstract
void teach();
}
/**********************************************************/
六、泛型
1、
为了解决类型安全的集合问题引入了泛型。
泛型是一个编译时语法。
2、
List<String>
l = new
ArrayList<String>();
<String>:表示该集合中只能存放String类型对象。
3、
使用了泛型技术的集合在编译时会有类型检查,不再需要强制类型转换。String str
= l.get(2);
注:一个集合所允许的类型就是这个泛型的类型或这个泛型的子类型。
4、
List<Object> l =
new ArrayList<Integer>×
必须类型一致,泛型没有多态
5、
泛型的通配符<?>
泛型的通配符表示该集合可以存放任意类型的对象。
static void print( Cllection<?> c ){
for( Object o : c )
out.println(o);
}
6、
带范围的泛型通配符
(1)、向下匹配:<?
extends Number>
表示该集合元素可以为Number类型及其子类型(包括接口)
(2)、向上匹配:<?
super Number>
表示该集合元素可以为Number类型及其父类型
(3)、接口实现:<? extends
Comparable>
表示该集合元素可以为实现了Comparable接口的类
7、
泛型方法
在返回值与修饰符之间可以定义一个泛型方法
Public static <T> void copy(T[] array,Stack<T> sta){……}
public static <T,E extends T> void copy (T[] array,Stack<E> sta){…..}
public static <T extends Number&Comparable>
void copy(List<T> list,T[] t);
8、
不能使用泛型的情况:
(1)、带泛型的类不能成为Throwable类和Exception类的子类
因为cathc()中不能出现泛型。
(2)、不能用泛型来new一个对象
如:T t = new T();
(3)