1,枚举 Enum 1.5引入 确保某个类型的实例是预先定义的,不能由使用者创建 ,
单例模式是否可由枚举实现?
枚举类型是java.lang.Enum抽象类的子类型
声明一个枚举:使用enum
内容主要声明若干个静态常量实例
也可以有属性,构造方法(private修饰)
任务:
声明一个表示季节的枚举(Season) 四个实例(Spring,Summer,Autumn,Winter)
public enum Season{
SPRING,SUMMER,AUTUMN,WINTER
}
在一个新的类中写一个方法,接收一个Season类型的参数,使用switch-case,条件成立输出提示
在main测试
public class Enum { public void fang(Season s){ switch (s) { case Spring: System.out.print("春"); break; case Summer: System.out.print("夏"); break; case Autumn: System.out.print("秋"); break; case Winter: System.out.print("冬"); break; default: break; }
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Enum enum1=new Enum();
enum1.fang(Season.Spring);
}
}
EnumSet存储枚举类型的元素 EnumMap存储元素的键是枚举
2,泛(范)型 1.5引入
保证类型安全,消除了强制类型转换
实现泛型版本的Stack
Pager<E>{
private List<E> data;
}
//只能接受Number类型
public static <T> void add1(T t1,T t2) {
}
public class Job1 { public static <T extends Number> Integer add1(T x ,T y){ return x.intValue()+y.intValue(); } public static void main(String[] args) { // TODO Auto-generated method stub System.out.print( add1(10,0.1)); } }
3,Lambda表达式(二)
Lambda表达式中使用外部变量
循环中的Lambda表达式
方法引用
java.util.function包
4,反射 Reflection
目的:
1,运行时获取类的信息
2,动态创建实例,调用方法
Class类;
搞清楚getDeclaredMethods与getMethods的区别
1.输出某个类的所有的方法(本类中的public,private,。。。方法,继承而来的方法)
2,输出某个类的所有的Filed(本类中的public,private,。。。方法,继承而来的Filed)
3, 输出某个类的所有的构造方法
4,得到某个方法的信息,是否是静态的,是否是final
5,得到某个Field
6,得到包的信息
7,得到父类信息
8,得到泛型类的类型的信息
java.lang.reflect.Modifier public class Job2 { public static void main(String[] args){ Class<Myclass> myint= Myclass.class; //公共方法fulei //Method[] method1=myint.getMethods(); //for (Method method2 : method1) { // System.out.println(method2); //} //输出自身所有方法 不包含父类 /*Method[] method2=myint.getDeclaredMethods(); for (Method method : method2) { System.out.println(method); } */ //输出自身所有域 不包含父类 /*Field[] file1=myint.getDeclaredFields(); for (Field field : file1) { System.out.println(field); System.out.println(" "+field.getType()); } */ //公共yu /*Field[] file2=myint.getFields(); for (Field field : file2) { System.out.println(field); } */ //查找方法根据方法名和参数类型 /* try { Method method=myint.getDeclaredMethod("aa"); System.out.println(method); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } */ //查找类中所有的构造函数 /* Constructor[] x=myint.getDeclaredConstructors(); for (Constructor field : x) { System.out.println(field); } */ //根据名字查找属性 /* Field file2; try { file2 = myint.getDeclaredField("a"); System.out.println(file2); } catch (NoSuchFieldException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } */ //查找类所在的包 /* Package package1=myint.getPackage(); System.out.print(package1); */ //查找所在的父类 /* Class class1=myint.getSuperclass(); System.out.print(class1); */ }
任务: 声明一个JavaBean
public class User{
private String name;
private int age;
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
.......
}
设计一个方法,获取其中所有属性的get与set方法
1,先找到所有的私有属性
2,"set"+"Name" setMethod()
"get"+"Name" getMethod()
public class Job1 { public static void name(Class<?> c ) { Field[] fields=c.getDeclaredFields(); for (Field field : fields) { // if (Modifier.isPrivate(field.getModifiers())) { // } String getname="get"+field.getName().substring(0,1).toUpperCase()+field.getName().substring(1); String setname="set"+field.getName().substring(0,1).toUpperCase()+field.getName().substring(1); try { Method getMethod=c.getDeclaredMethod(getname); Method setMethod=c.getDeclaredMethod(setname,field.getType()); System.out.println(getMethod); System.out.println(setMethod); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
public class Job1test { public static void main(String[] args) { // TODO Auto-generated method stub Job1 job1=new Job1(); User user=new User(); job1.name(user.getClass()); } } public class User { private int aa; private int bb; private int cc; private int dd; public int getAa() { return aa; } public void setAa(int aa) { this.aa = aa; } public int getBb() { return bb; } public void setBb(int bb) { this.bb = bb; } public int getCc() { return cc; } public void setCc(int cc) { this.cc = cc; } public int getDd() { return dd; } public void setDd(int dd) { this.dd = dd; } }