Java 高新技术总结
2012-06-14 17:01
113 查看
1.静态导入:import static语句导入一个类中的某个静态方法或所有静态方法。这样可以省略类名,直接调用静态方法。
2.可变参数:只能出现在参数列表的最后。...位于类型和变量名之间,前后有无空格都可以。调用可变参数的方法时 ,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。eg: add(int a,int...b)
3.增强的for循环:迭代变量必须在()中定义。集合变量可以是数组或实现了Iterable接口的结合类。
4.自动装箱与拆箱:自动装箱:Integer i=4; 自动拆箱:i+5 (i为Integer类型) 。两个指向-128-127之间同一数的对象引用,相同。
5.享元模式(flyweight):如果很多很小的对象他们有很多相同的东西,就可以将他们变成一个对象。不同的部分作为外部属性,作为方法的参数传入。
6.枚举:(星期天用0表示,星期六用6表示。)
为什么要用枚举?
问题:要定义星期几或性别的变量,该怎么定义?假设1-7分别表示星期一到星期日,但有人可能写成int weekday=0 ;枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中的填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
枚举中的方法:name(),rodinal(),valuesOf()
枚举可以定义构造方法,但必须私有。枚举构造方法加个(),里面参数表示调用哪个构造方法。 枚举中可以定义抽象方法,子类实现。
7.反射:
将类变成二进制字节码,然后加载到内存。在由它们来去创造对象。
forName()获取类的字节码,若缓冲区有,直接得到。没有,加载到缓冲区,再得到。
如何得到各个字节码对应的实例对象?类名.class ;对象.getClass();Class.forName("类名")
八个基本类型对应八个class对象。
isPrimitive():是否是基本类型 。基本类型的字节码和他们的包装类的字节码不同。但是int.class=Integer.Type
判断是否是数组类型:Class.isArray()
总之,只要在源程序中出现的类型,都有各自的class实例对象。
反射就是把Java类中的各种成分映射成相应的java类的字节码。
Field: 用反射调用私有方法时,需要用setAccessible(true);
如果传递给Method对象的invoke()方法的第一个参数为null,这有着什么样的意义呢?说明该method对象对应的是一个静态方法。
数组中若类型相同,则对应Class相同。
配置文件:一定要记住用完整的路径,但是完整的路径不是硬编码,而是运算出来的。配置文件可以通过类加载器来取获得。
PropertyDescriptor :属性描述符 。用于处理JavaBean的属性和方法获取。
IntroSpector.getBeanInfo :在 Java Bean 上进行内省,了解其所有属性、公开的方法和事件。
Beanutils工具包用来操作JavaBean。需要下载导入。
若属性是引用,可以设置引用的属性。
PropertyUtils :也可以用于操作JavaBean。他直接操作员属性的类型,可避免类型转换的错误。而Beanutils是把属性值当做String类型操作。但后者更强大。
8.Java7新特性:Map map =(name:"zhangsan" , age : 18);
9.注解:
覆盖参数也必须相同。否则不是覆盖。可用注解Override来防止此类事件发生。
重构(抽取方法)只适用于变量。
isAnnotationPresent( annotation) :某个注解是否在上面。在反射中使用。
getA nnotation(java.lang.class):获取某个注解。在反射中使用。
需要在自定义的注解上加上注解:@Retention(RetentionPolicy.******)。括号内容代表作用范围(RUNTIME ,SOURCE ,CLASS)。 .默认是CLASS.。
@Target(****):注解作用的范围(方法,类(ElementType.TYPE))。
注解中可以有方法,使用注解是必须为其注解赋值,以属性的形式为方法赋值。如color()方法,赋值为:color="red",调用时仍用color()方法。
注解也可以有属性。特殊的属性:value ,若只有这一个属性,使用注解时可以直接赋值,value和= 都可以省略。
注解的属性值也可以是注解。
10.泛型:
泛型中,参数化类型中不存在继承。即左右泛型要一致。
在创建数组实例时,数组的元素不能使用参数化的类型,例如:下面语句有错误:
Vector<Integer> vectorList[] =new Vector<Integer>[10].
下面语句没错误:Vector v1=new Vector<String>(); Vector<Object> v=v1; 因为编译期无类型参数。
使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。
限定通配符的上边界:正确:Vector<? extends Number> x=new Vector<Integer>();
错误:Vector<? extends Number> x=new Vector<String>();
限定通配符的下边界:正确:Vector<? super Integer> x=new Vector<Number>();
错误:Vector<? super Integer> x=new Vector<Byte>();
自定义泛型举例:public static <T> void swap( T x, T y){}
可以抛出泛型类型的异常。
定义泛型的时候可以定义多个泛型参数,用“,”隔开。
类中增加泛型:在类的后面加,如:class GenericDao<T>{} 它里面的方法都需要与此类型保持一致。此类中的静态方法不能增加泛型(因为对象类型无法确定)。
11.类加载器:
类加载器:当前类加载器会把类加载交给父类,父类在交给他的父类,若上面无法处理,则返回。若当前类加载器也无法处理,则抛出异常。不会再往下推。
与父类加载器中相同的类的将无法被加载,委托加载机制。
12.StringBuilder 在单线程下效率更高,StringBuffer 在多线程下效率更高(会考虑安全问题)。
2.可变参数:只能出现在参数列表的最后。...位于类型和变量名之间,前后有无空格都可以。调用可变参数的方法时 ,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。eg: add(int a,int...b)
3.增强的for循环:迭代变量必须在()中定义。集合变量可以是数组或实现了Iterable接口的结合类。
4.自动装箱与拆箱:自动装箱:Integer i=4; 自动拆箱:i+5 (i为Integer类型) 。两个指向-128-127之间同一数的对象引用,相同。
5.享元模式(flyweight):如果很多很小的对象他们有很多相同的东西,就可以将他们变成一个对象。不同的部分作为外部属性,作为方法的参数传入。
6.枚举:(星期天用0表示,星期六用6表示。)
为什么要用枚举?
问题:要定义星期几或性别的变量,该怎么定义?假设1-7分别表示星期一到星期日,但有人可能写成int weekday=0 ;枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中的填写的非法值,普通变量的方式在开发阶段无法实现这一目标。
枚举中的方法:name(),rodinal(),valuesOf()
枚举可以定义构造方法,但必须私有。枚举构造方法加个(),里面参数表示调用哪个构造方法。 枚举中可以定义抽象方法,子类实现。
7.反射:
将类变成二进制字节码,然后加载到内存。在由它们来去创造对象。
forName()获取类的字节码,若缓冲区有,直接得到。没有,加载到缓冲区,再得到。
如何得到各个字节码对应的实例对象?类名.class ;对象.getClass();Class.forName("类名")
八个基本类型对应八个class对象。
isPrimitive():是否是基本类型 。基本类型的字节码和他们的包装类的字节码不同。但是int.class=Integer.Type
判断是否是数组类型:Class.isArray()
总之,只要在源程序中出现的类型,都有各自的class实例对象。
反射就是把Java类中的各种成分映射成相应的java类的字节码。
Field: 用反射调用私有方法时,需要用setAccessible(true);
如果传递给Method对象的invoke()方法的第一个参数为null,这有着什么样的意义呢?说明该method对象对应的是一个静态方法。
数组中若类型相同,则对应Class相同。
配置文件:一定要记住用完整的路径,但是完整的路径不是硬编码,而是运算出来的。配置文件可以通过类加载器来取获得。
PropertyDescriptor :属性描述符 。用于处理JavaBean的属性和方法获取。
IntroSpector.getBeanInfo :在 Java Bean 上进行内省,了解其所有属性、公开的方法和事件。
Beanutils工具包用来操作JavaBean。需要下载导入。
若属性是引用,可以设置引用的属性。
PropertyUtils :也可以用于操作JavaBean。他直接操作员属性的类型,可避免类型转换的错误。而Beanutils是把属性值当做String类型操作。但后者更强大。
8.Java7新特性:Map map =(name:"zhangsan" , age : 18);
9.注解:
覆盖参数也必须相同。否则不是覆盖。可用注解Override来防止此类事件发生。
重构(抽取方法)只适用于变量。
isAnnotationPresent( annotation) :某个注解是否在上面。在反射中使用。
getA nnotation(java.lang.class):获取某个注解。在反射中使用。
需要在自定义的注解上加上注解:@Retention(RetentionPolicy.******)。括号内容代表作用范围(RUNTIME ,SOURCE ,CLASS)。 .默认是CLASS.。
@Target(****):注解作用的范围(方法,类(ElementType.TYPE))。
注解中可以有方法,使用注解是必须为其注解赋值,以属性的形式为方法赋值。如color()方法,赋值为:color="red",调用时仍用color()方法。
注解也可以有属性。特殊的属性:value ,若只有这一个属性,使用注解时可以直接赋值,value和= 都可以省略。
注解的属性值也可以是注解。
10.泛型:
泛型中,参数化类型中不存在继承。即左右泛型要一致。
在创建数组实例时,数组的元素不能使用参数化的类型,例如:下面语句有错误:
Vector<Integer> vectorList[] =new Vector<Integer>[10].
下面语句没错误:Vector v1=new Vector<String>(); Vector<Object> v=v1; 因为编译期无类型参数。
使用?通配符可以引用其他各种参数化的类型,?通配符定义的变量主要用作引用,可以调用与参数化无关的方法,不能调用与参数化有关的方法。
限定通配符的上边界:正确:Vector<? extends Number> x=new Vector<Integer>();
错误:Vector<? extends Number> x=new Vector<String>();
限定通配符的下边界:正确:Vector<? super Integer> x=new Vector<Number>();
错误:Vector<? super Integer> x=new Vector<Byte>();
自定义泛型举例:public static <T> void swap( T x, T y){}
可以抛出泛型类型的异常。
定义泛型的时候可以定义多个泛型参数,用“,”隔开。
类中增加泛型:在类的后面加,如:class GenericDao<T>{} 它里面的方法都需要与此类型保持一致。此类中的静态方法不能增加泛型(因为对象类型无法确定)。
11.类加载器:
类加载器:当前类加载器会把类加载交给父类,父类在交给他的父类,若上面无法处理,则返回。若当前类加载器也无法处理,则抛出异常。不会再往下推。
与父类加载器中相同的类的将无法被加载,委托加载机制。
12.StringBuilder 在单线程下效率更高,StringBuffer 在多线程下效率更高(会考虑安全问题)。
相关文章推荐
- 黑马程序员_java高新技术总结【1】(枚举和部分java新特性)
- 黑马程序员 Java自学总结二十 Java高新技术第三天
- 黑马程序员——JAVA高新技术总结(一)
- 黑马程序员 Java高新技术 反射总结
- 黑马程序员__JAVA高新技术--枚举及内省JavaBean、可变参数等知识点总结
- java高新技术总结(一)
- 黑马程序员——JAVA高新技术总结(二)
- java 高新技术学习总结
- 传智播客java培训2010年4月16日JAVA高新技术总结(1)
- java高新技术【3】(枚举总结)
- 黑马程序员_java高新技术总结【2】(反射)
- java高新技术开发实战重点总结
- 黑马程序员_java高新技术总结【3】(内省、注解、代理)
- 黑马程序员——Java高新技术之反射学习总结一
- 黑马程序员——高新技术---Java基础-集合特点和数据结构总结
- 黑马程序员-Java基础总结15——高新技术Day01
- JAVA高新技术---反射总结
- 黑马程序员 Java自学总结十八 Java高新技术第一天
- 黑马程序员-Java基础总结16——高新技术Day02(JavaBean、注解与泛型)
- 黑马程序员 Java自学总结十九 Java高新技术第二天