枚举和JavaBean
---------------------------------------------------------------------------------------------------------------------------------------------
1、枚举
1、简单说,枚举定义的变量就是固定值范围内的某一个值2、枚举不能实例化(new)、枚举不能继承其他类、也不能被其他类继承3、枚举值 列表必须在第一行,4、构造方法必须是 私有的, 构造方法在枚举值 列表之后5、【枚举】只有一个成员时,可以当作【单列】实现方法。
6、掌握高级枚举
2、javaBean
-----------------------------------------------------------------------1、JavaBean是一种拥有特殊方法的Java类,主要用于传递数据信息1、JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省2、PropertyDescriptor(propertyName,Class.class); 快捷取出一个属性4、javaBean既可以当本类使用一些方便的功能,也可以当作普通类使用普通类的功能
【1】
Enum enumeration 枚举:整型常数的集合
Enum enumeration 枚举:整型常数的集合
就是要让某个类型的变量的取值只能为若干固定值之中的一个。是一个特殊的类,其中的每一个元素都是该类的一个对象。枚举在日常生活中很常见,例如表示星期的:SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY,
1、枚举不能实例化(new)、枚举不能继承其他类、也不能被其他类继承
2、枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。
2、枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。
枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
定义枚举:
1、构造方法在 对象列表之后
2、构造方法必须是私有的。
3、指定参数直接在对象后面指定。
【枚举 --入门】
1、构造方法在 对象列表之后
2、构造方法必须是私有的。
3、指定参数直接在对象后面指定。
【枚举 --入门】
public static void showEnum(){
WeekDay1 wd1 =WeekDay1.MON;
System.out.println("今天星期几?:"+wd1);
System.out.println("明天星期几?:"+wd1.nextDay());
// 这里不能new,能调用 枚举WeekDay范围内的某一个值
WeekDay wd2 = WeekDay.FRI;
//这里就只能调用 枚举范围内的某一个值
System.out.println("今天星期几?:"+wd2+"\tS3");
//自动调用toString()方法。
System.out.println(wd2.ordinal()+">>FRI的下标。 FRI排第几");
System.out.println(wd2.name()+"\t WeekDay对象名");
//枚举的静态方法:
System.out.println(WeekDay.valueOf("SUN")+"\t把字符串转换为 枚举对象");
System.out.println(WeekDay.values().length+"\t把枚举编变成数组。 获得数组长度");
//转换为一个数据 用WeekDay类型接收,并循环打印
WeekDay [] str = WeekDay.values();
System.out.println("打印出所有枚举参数");
for(WeekDay day : str){
System.out.println(day);
}
}
//【】常见枚举
public enum WeekDay{
//设定枚举范围。
//SUN,MON,TUE,WED,THU,FRI,SAT;
SUN(1),MON(),TUE,WED,THU,FRI,SAT;
private WeekDay(){
System.out.println("启动无参构造方法");
};
private WeekDay(int day){
System.out.println("有有----------参构造方法");
}
}
【高级枚举 TrafficLamp //交通灯】
enum TrafficLamp{
//1: RED,GREEN,YELLOW; 列出参数列表
//3 RED{},GREEN{},YELLOW{}; 实现父类的子类实例
//6 (30) 传递 不同灯的时间
RED(30){
//4 子类实现 ---父类的方法
public TrafficLamp nextLamp() {
return GREEN;//4-1
}
},
GREEN(36){
public TrafficLamp nextLamp() {
return YELLOW;
}
},
YELLOW(6){
public TrafficLamp nextLamp() {
return RED;
}
};
//2 写出 抽象方法
public abstract TrafficLamp nextLamp(); //返回的是这个类 的类型
//5-1 每个灯都有时间
private int time;
//5-2 构造一个带时间的有参方法
private TrafficLamp(int time){
this.time = time;
}
}
【
该高级枚举】
1、new Date(){} 这是一个子类调用父类的无参构造方法。
->>>new Date(300){} 调用的是有参构造方法
2、内部类。
3、类的方法可以返回自己这个类类型
4、类里面可以定义常量,常量的结果指向这个类型的实例对象
5、【枚举】只有一个成员时,可以当作【单列】实现方法。
【枚举的几个常用方法:】
用法一:常量
见:【枚举 --入门】
用法二:switch
JDK1.7后switch()可以传String等类型的参数,同样可以传递枚举
enum Signal {
GREEN, RED ;
}
class TrafficLight {
Signal color = Signal.RED;
public void change() {
switch (color) {
case RED:
color = Signal.GREEN;
break;
case GREEN:
color = Signal.RED;
break;
}
}
}
用法三:向枚举中添加新方法
见: 【高级枚举 TrafficLamp //交通灯】
private TrafficLamp(int time)带参构造方法
public abstract TrafficLamp nextLamp();抽象方法。
用法四:覆盖枚举的方法
比如toString()的覆盖
用法五:实现接口
所有的枚举都继承自java.lang.Enum类。
由于Java 不支持多继承,所以枚举对象不能再继承其他类。只能实现接口
在【高级枚举 TrafficLamp //交通灯】 基础上定义一个接口
interface imTest{
void show();
}
枚举中方法:
enum TrafficLamp implements imTest
并在类中写覆盖 show()即可
用法六:使用接口组织枚举
【2】
JavaBean与内省
枚举中方法:
enum TrafficLamp implements imTest
并在类中写覆盖 show()即可
用法六:使用接口组织枚举
interface Food {
enum Coffee implements Food{
BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO
}
enum Dessert implements Food{
FRUIT, CAKE, GELATO
}
}
【2】
JavaBean与内省
public class javaBeanTest {
public static void main(String[] args) throws Exception
{
show p = new show("mm");
String propertyName = "name";
//PropertyDescriptor 方法能快速取出 javaBean 方法 参数接收一个变量 对象的Class文件
PropertyDescriptor pd = new PropertyDescriptor(propertyName,p.getClass());
//获取 get方法
Method methodGet = pd.getReadMethod();
//调用目标的方法,取得该值
Object retVal1 = methodGet.invoke(p);
System.out.println("打印该值: "+retVal1);
//获取 set方法
Method methodSet = pd.getWriteMethod();
Object retVal2 =methodSet.invoke(p, ">>把该字符串 写入 p对象");
methodGet = pd.getReadMethod();
retVal1 = methodGet.invoke(p);
System.out.println("新设定的值: "+retVal1);
}
}
class show{
private String name;
private int age;
show(String name){
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
//PropertyDescriptor 读取类一个属性
//写
private static void setProperty(ReflectPoint pt1, String propertyName,
int value) throws IntrospectionException, IllegalAccessException,
InvocationTargetException {
PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
Method methodSetX = pd.getWriteMethod();//获取set 方法
methodSetX.invoke(pt1,value); //调用 该类 写入数据
}
//读取
private static Object getProperty(Object pt1,String propertyName)
throws IntrospectionException, IllegalAccessException,
InvocationTargetException {
PropertyDescriptor pd = new PropertyDescriptor(propertyName,pt1.getClass());
Method methodGetX = pd.getReadMethod(); //获取 get 方法
Object retVal = methodGetX.invoke(pt1); //调用get 方法,获取数据
return retVal;
}
方法摘要
1、PropertyDescriptor(propertyName,Class.class);快捷取出一个属性2、getReadMethod()返回 get方法3、getWriteMethod() 返回 set 方法4、invoke(对象,参数); 调用对象构造函数,把参数传递给对象。
1、JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省
2、拥有特殊格式方法名,也就是说,一个类符合这个特性,就能被当作javaBean使用时,
1、可以当普通类,也可以当JavaBean类,JavaBean提供一些额外的方便1、JavaEE开放中常用JavaBean2、getX访问x 时 JavaBean 具有独特的快捷访问方式。2、JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量,如:getAge()、setAge ->> Age isList ->> List JavaBean的角度就是有Age、List的属性
3、JavaBean是一种特殊的Java类,主要用于传递数据信息,
这种java类中的方法主要用于访问私有的字段,且方法名符合某种命名规则。
4、JavaBean的属性名,
如果第二个字母是小写,则把第一个字符小写 :setAge ->> Age如果第二个字母是大写,则不变 : getCPU ->> CPU
5、如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,
这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)。这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问。
6、
PropertyDescriptor 描述 Java Bean 通过一对存储器方法导出的一个属性。
7、 javaBean提供了一些快捷的方法,根据实际开发可以把符合该类特点的类进行多元的处理方法
7、 javaBean提供了一些快捷的方法,根据实际开发可以把符合该类特点的类进行多元的处理方法
【】Beanutils 工具包
1、添加 BreaUtils.jar 和Logging.jar 2个包
2、读取 BeanUtils.getProperty(对象,变量);
3、写入 BeanUtils.setProperty(对象,变量,值);
4、BeanUtils 在对变量处理的时候,能把String--int 互换,自动转换类型
5、PropertyUtils.setProperty(对象,变量,值);
1、添加 BreaUtils.jar 和Logging.jar 2个包
2、读取 BeanUtils.getProperty(对象,变量);
3、写入 BeanUtils.setProperty(对象,变量,值);
4、BeanUtils 在对变量处理的时候,能把String--int 互换,自动转换类型
5、PropertyUtils.setProperty(对象,变量,值);
public static void getPro()throws Exception{
ReflectPoint rp = new ReflectPoint(8,6);
String propertyName = "x";
//1
Object retVal = getProperty(rp, propertyName);
System.out.println(retVal); //1 end
//2
Object value = 127;
setProperty(rp, propertyName, value);
//3 【BeanUtils】工具包 对比1、2 确实简单方便了好多。
System.out.println(BeanUtils.getProperty(rp, "x"));
BeanUtils.setProperty(rp, "x", "3215");
System.out.println(rp.getX());
}
---------------------------------------------------------------------------------------------------------------------------------------------
----------
android培训、
java培训、期待与您交流!----------
----------------------------------------------