java

位置:IT落伍者 >> java >> 浏览文章

java高级技术总结 2


发布日期:2018年07月14日
 
java高级技术总结 2
ArrayList集合与HashSet的区别

Arraylist : add方法直接把所以元素加进来不会判断是否存在

HashSet:在调用add方法之前会先判断该元素是否存在

HashCode()方法用于判断两个元素是否相等在元素相应的类中定义相应的hashcode值是由元素中相关成员变量算出 来的

同时还会覆盖equals()方法

框架

在某些东西还没写出来之前就能对他们进行调用相当于一个基本架构利用的是反射的原理

classforName(配置信息newInstance() 这样我们只要在配置文件里面将要引用的类名写进去就行了同时可以随时更改

用类加载器的方式管理资源和配置文件

当程序给普通用户时加载配置文件回事一个问题因为它的路径不好找此时有两种方法解决

getRealPath()方法通过运算获得配置文件的路径不是硬编码(普通方法)

类加载器类名classgetClassLoader()getResourceAsStream(com/baidu/exam/configureproperties

也可以简化为类名classgetResourceAsStream(configureproperties

配置文件与java类放在同一个包中

javabean与内省

是一种类他里面有get()set()方法用于外界访问本类的私有变量

属性去掉getset之后的东西即为属性但不一定和成员变量名相同他们是看不到的

内省用于处理javabean类的Api

String propertyname = x;

PropertyDescriptor pd = new PropertyDescriptor(propertynamepgetClass())

Method methodx = pdgetReadMethod()

Object retval = methodxinvoke(p)

eclipse小技巧方法的重构

将某段很长的代码放入一个函数中但只需要将他们选择出来再右键选择重构

InspectorBeanInfo用于处理属性的类

BeanUtils工具包

注解

注解相当于一种标记在程序中加了注解就等于为程序打上了某种标记没加则等于没有某种标记以后javac编译器开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记看你有什么标记就去干相应的事标记可以加在包字段方法方法的参数以及局部变量上

为注解增加属性

什么是注解的属性注解是一种标识注解的属性是注解标识的内容

加了属性的标记效果为@MyAnnotation(color=red

定义基本类型的属性和应用属性

在注解类中增加String color()

@MyAnnotation(color=red

用反射方式获得注解对应的实例对象后再通过该对象调用属性对应的方法

MyAnnotation a = (MyAnnotation)AnnotationTestclassgetAnnotation(MyAnnotationclass)

Systemoutprintln(lor())

可以认为上面这个@MyAnnotation是MyAnnotaion类的一个实例对象

为属性指定缺省值

String color() default yellow;

value属性String value() default zxx;

如果注解中有一个名称为value的属性且你只想设置value属性(即其他属性都采用默认值或者你只有一个value属性)那么可以省略value=部分例如@MyAnnotation(lhm

注意 :枚举和注解都是特殊的类不能用new 创建它们的实例对象创建枚举的实例对象就是在其中增加元素在程序中如何创建出一个注解的实例对象啊?用@注解名

@Retention(RetentionPolicyRUNTIME)

@Target({ElementTypeMETHODElementTypeTYPE})

public @interface ItcastAnnotation {

String color() default blue;

String value()

int[] arrayAttr() default {};

EnumTestTrafficLamp lamp() default EnumTestTrafficLampRED;

MetaAnnotation annotationAttr() default @MetaAnnotation(lhm

}

[nextpage]

泛型

泛型是提供给javac编译器使用的可以限定集合中的输入类型让编译器挡住源程序中的非法输入编译器编译带类型说明的集合时会去除掉类型信息使程序运行效率不受影响对于参数化的泛型类型getClass()方法的返回值和原始类型完全一样由于编译生成的字节码会去掉泛型的类型信息只要能跳过编译器就可以往某个泛型集合中加入其它类型的数据例如用反射得到集合再调用其add方法即可

参数化类型与原始类型的兼容

参数化类型不考虑类型参数的继承关系

泛型通配符

使用?通配符可以引用其他各种参数化的类型?通配符定义的变量主要用作引用可以调用与参数化无关的方法不能调用与参数化有关的方法

限定通配符的上边界

正确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>()               

上一篇:使用javamail自动获取gmail邮件

下一篇:Java线程:线程的调度-休眠