黑马程序员--java高新技术 25--枚举,反射

来源:互联网 发布:阿里云 宕机 编辑:程序博客网 时间:2024/05/21 09:28

---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------

 

/*1.5 新特性总结:静态导入可变参数增强for(foreach)基本数据的自动拆装箱枚举泛型*//*25-2API: Application Programming Interfacejava EEIDE: Integrated development environmentjmsjmxjndi*//*25-3preference--java--compiler  //javac 编译器版本|--Installed JREs   //java 运行的版本  |--general--keys  //快捷键file--switch workspace  //切换工作间*//*25-4debug 透视图下:r变量--watch*//*25-5r--run as--run configuration--jre //运行环境低版本的java不能运行高版本的javac编译的程序,会出现 UnsupportedClassVersionErrorr(一个工程)--properties--run/debug setting--edit--(edit configuration)  //该路径也可打开运行环境*//*25-6模板代码:properties--java--editer-templates*//*25-7jar Libaray 更改jre库,Libaray 就是很多的jarr工程--build path--configure build path--java build path *//*25-81.5 新特性 静态导入*//*25-91.5 新特性 可变参数overload vs override*//*25-101.5 新特性 增强for*//*25-111.5 新特性 基本数据的自动拆装箱享元设计模式flyweight:有很多个小的对象,它们有很多属性相同,把它们变成一个对象,那些不同的属性变成方法的参数,称之为外部状态,那些相同的属性称之为内部状态。*//*25-121.5 新特性 枚举*//*25-14枚举的基本应用:name();ordinal();//类似数组的角标valueOf("SUN").toString();values(); 把枚举变成数组*//*25-17Class cls = 字节码;获得字节码的三种方式:System.class;new Date().getClass();Class.forName("java.util.Date");//全名预定义的实力对象://参照isPrimitive();void.class;int.class = Integer.Type;//还有其他的7种基本数据类型。isArray();//是否是数组。*//*25-19反射会导致程序的性能下降*//*25-20getField(pt1);getDeclaredField(pt1);setAccessible(true);//暴力反射*//*25-22谁有数据谁就是干这个事的专家,方法就分配给谁。*//*25-23用反射调用 main 方法的原因是可以在没有加载 类的前提下用 class.forName(name); 方法来加载类, 之后就可以执行main 方法了。r--run as--run configuration--arguments   //用于给程序传递参数。*//*25-24getSuperclass();可变参数:若满足1.4 的条件就按照1.4的处理,不满足就按照1.5的处理。*//*25-26存入HashSet 集合的元素(对象) 的 数据发生改变时,其hashcode 的值也会发生改变,因此在使用时应该注意其HashCode 值 是否有发生改变。否则会发生内存泄露。*//*25-27反射的作用:实现框架*//*25-28getClass().getResourceAsStream(); //无法通过类加载器写入数据*//*25-29内省:introspectorjavaBean: 以set 或 get 开头 的方法 的类*///个人疑问:?1, ?2, ?3, ?4import java.lang.reflect.Constructor;public class Demo {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub//WeekDayClass clazz = WeekDay.MON.getClass();//@0  用getClass()获得的构造函数是一个  //?1: 为何是一个? 为何会少掉构造函数?少掉了哪些构造函数?Constructor[] cons = clazz.getDeclaredConstructors();System.out.println("共有 "+cons.length+" 个构造函数");for (Constructor con : cons) {System.out.println(con.toGenericString());}Class clazz1 = WeekDay.class;//@1  与@0 相比 用 .class 的方法却获得3个。  //?2: 为何是3个 ,多出来的那个构造函数是什么意思?   ?3: 为何与@0 不同?Constructor[] cons1 = clazz1.getDeclaredConstructors();System.out.println("共有 "+cons1.length+" 个构造函数");for (Constructor con : cons1) {System.out.println(con.toGenericString());}System.out.println();//Weekday1 Class clazz2 = Weekday1.MON.getClass();//@2  与@0 相比 该方法enum 没有 abstract 方法, 获得的构造函数却是2个Constructor[] cons2 = clazz2.getDeclaredConstructors();System.out.println("共有 "+cons2.length+" 个构造函数");for (Constructor con : cons2) {System.out.println(con.toGenericString());}Class clazz3 = Weekday1.class;//@3  比较WeekDay 和 Weekday1,WeekDay仅多了一个abstract方法。//说明WeekDay 之所以会多出或少掉构造函数是因为 abstract 方法//?4:为何WeekDay 和 Weekday1 会有这样的差异?或者为何abstract方法会造成这样的差异Constructor[] cons3 = clazz3.getDeclaredConstructors();System.out.println("共有 "+cons3.length+" 个构造函数");for (Constructor con : cons3) {System.out.println(con.toGenericString());}}}enum WeekDay{    SUN(){            public WeekDay nextDay(){                    return MON;            }    },MON(){            public WeekDay nextDay(){                    return SUN;            }    };        WeekDay(){            System.out.println("first");    }    WeekDay(int x){            System.out.println("second");    }        public abstract WeekDay nextDay();}enum Weekday1{    SUN,MON;        Weekday1(){            System.out.println("first");    }    Weekday1(int x){            System.out.println("second");    }    }


---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------