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;
}
}