您的位置:首页 > 编程语言 > Java开发

Java基础加强总结(2)

2011-10-02 11:32 323 查看
一、用类加载器管理资源和配置文件

两种类加载器加载配置文件的方式

InputStream ips1 = ReflectTest2.class.getClassLoader().getResourceAsStream("config.properties");

InputStream ips2 = ReflectTest2.class.getResourceAsStream("config.properties");

二、内省IntroSpector

内省相关的两个类

PropertyDescriptor

BeanInfo

设置和读取一个JavaBean的属性值

private static void setGetX(ReflectPoint pt1)throws Exception {
PropertyDescriptor pd = new PropertyDescriptor("x",ReflectPoint.class) ;
Method methodSetX = pd.getWriteMethod();
methodSetX.invoke(pt1, 8);//设置X的值
Method methodGetX = pd.getReadMethod();
Object valueX = methodGetX.invoke(pt1);//取得X的值
System.out.println(valueX);
}
private static void getBeanPropertys() throws IntrospectionException {
BeanInfo beanInfo = Introspector.getBeanInfo(ReflectPoint.class);
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
for(PropertyDescriptor e : pds){
System.out.println(e.getName());
}
}

三、使用BeanUtils工具包操作JavaBean

private static void beanUtils(ReflectPoint pt) throws Exception {
String val = BeanUtils.getProperty(pt, "x");
System.out.println(val);
BeanUtils.setProperty(pt, "x", 9);
System.out.println(BeanUtils.getProperty(pt, "x"));
//支持属性的级联操作
BeanUtils.setProperty(pt, "birthday.time",111);
System.out.println(pt.getBirthday());
System.out.println(BeanUtils.getProperty(pt, "birthday.time"));

PropertyUtils.setProperty(pt, "birthday.time",111);
Object value = PropertyUtils.getProperty(pt, "birthday.time");
System.out.println(value);
}

支持JavaBean和Map的互转。

可以把一个Bean的属性值拷贝给另一个Bean的属性。

其他方法参见api

Map map = {name:"zhangsan",age:23}//Java7的新特性

四、注解-------(Java5的新特性)

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

JDK提供的三个注解

Deprecated 标记过时

Orerride 重写

SuppressWarnings 消除提醒

注解的应用结构图



package day2;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
public @interface ItcastAnnotation {

}
package day2;
@ItcastAnnotation
public class AnnotationTest {
public static void main(String[] args){
boolean flag = AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class);
if(flag){
ItcastAnnotation annotation = (ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
System.out.println(annotation);
}
}
}


元注解

@Target

@Retention其有三种取值:RetetionPolicy.SOURCE(Java源文件)-->RetetionPolicy.CLASS(class文件)-->RetetionPolicy.RUNTIME(内存中的字节码)。默认为RetetionPolicy.CLASS

注解的属性

package day1;
public class EnumTest {
public enum TrafficLamp{
RED(30){
public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){
this.time = time;
}
}
}
package day2;

public @interface MetaAnnotation {
String value();
}
package day2;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import day1.*;
@Retention(RetentionPolicy.RUNTIME)
public @interface ItcastAnnotation {
String color() default "blue";
String value();
int[] intArray = {2,9,7,0};
EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.GREEN;
MetaAnnotation annotationAttr();
}
package day2;
@ItcastAnnotation(annotationAttr=@MetaAnnotation("flx"), value = "xx",color="read")
public class AnnotationTest {
public static void main(String[] args){
boolean flag = AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class);
if(flag){
ItcastAnnotation annotation = (ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
System.out.println(annotation);
System.out.println(annotation.color());
System.out.println(annotation.intArray.length);
System.out.println(annotation.value());
System.out.println(annotation.annotationAttr());
}
}
}

注解的属性可以是:基本类型、数组、枚举、注解、Class
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐