从入门到放弃的第5周(面向对象)......day.1.。。。。。泛型和枚举;

 

 

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

  



 

原文地址:https://www.cnblogs.com/suxiao666/p/11415086.html