增强for循环:
只能取数组和实现Iterable接口的集合元素。
Map结合没有实现iterable接口,要先转SET 然后取。
只适合取数据,不适合赋值
遍历的同时,修改数据,可以使用传统方式。(set)
ListIterator:
迭代中对集合操作,可用。
可变参数:
Public void sum(int...num){}//可传多个参数,传入时,可直接传入数组
可变参数可当数组来用。
细节:
传入参数类型和可变参数类型要相同。
Public void sum(int i,int ...nums)//可变参数一般是最后一个参数
应用:
asList(...)接收的参数时一个对象类型可变参数,如果传入基本数据类型数组,则整个数组会被当成一个对象,记录的是地址。
枚举:
方法需要指定范围的参数时,可用。
枚举是特殊java类,可定义属性,构造函数(必须是私有),方法,可实现接口,可继承抽象类
每个枚举值代表一个实例对象。
如果枚举只有一个枚举值,可当单态来用(构造函数私有,只提供一个实例)
Enum Grade{
A,B,C,D,E;//相当于5个grade的实例对象
}
给实例封装属性:
Enume Grade{
Private String valuep;
Private Grade(String value){
Thi.value=value}
A{"100-90"}(public String getLocalValue(){
Return " 优";
}),B{"89-80"}(public String getLocalValue(){//内部类实现抽象类
Return "良";
});
Public String getValue(){
Return value;
}
Public adstract String getLocalValue();//可使用内部类,让每个实例有方法和方法的不同实现
}
String value=Grade.A.getValue();可以获得属性
Enum API:
Name()取得枚举值的名字
Ordinal()是第几个枚举值
valueOf()根据字符串,求枚举值
Values()返回枚举值组成的数组
Switch语句:
除了可接受int ,shor, byte ,char参数外,也可以接受枚举
反射:(用于做框架)
反射的作用:根据字符串,加载类,并解析类有什么方法和属性,构造函数。
加载类:
方式一Class.forName();//参数为完整类名,返回class
方式二 Person.class;
方式三
Person p=new Person();
P.class;
Class API:
getFiled();//get();
getMehod();//invoke();
getConstructor();//newInstance();
解析出属性,方法,构造函数,可调用Field,Method,Constructor的API
内省:
Intorspector
API:
getBeanInfo()
getPropertyDiscriptor()//beaninfo的方法
getReadMethod(),getWriteMethod()//属性描述器的方法
泛型:
泛型的类型必须是引用类型(对象类型)
使用泛型,两边的类型要一致。两边只有一边使用泛型,也可以。
类上的泛型,可以给方法用,方法的泛型只能给方法用。
作用:数据存入集合中会失去其特性,取出数据时要进行转换,为避免转换异常,可用泛型。
泛型是给编译器用的,把运行时问题提到编译时解决。生成的class文件不带泛型。
应用:
迭代器迭代有泛型的集合
增强for循环迭代泛型集合
泛型方法实现数组元素交换:
Public <T> void swap(T arr[],int i,int j){
T temp=arr[i];
Arr[i]=arr[j];
Arr[j]=temp;
}
一个数,异或另一个数2次,等于本身。