Java高级特性,XML读写,注解,反射的使用讲解(学习笔记)

java代码要获取到数据库properties.xml配置中的键值对,url或者Drivername之类的

Properties pop=new Properties();
pop.load(new FileInputStream("resource/test.properties"));
sout(pop.getProperty("url"));

Java高级特性  XML读写

要进行XML解析(dom解析)时,要引入dom4j的jar包 

demo.xml文件:

<?xml version="1.0" encoding="utf-8" ?>
<students>
 <student  color="red">
  <name>laowang</name>
  <age>28</age>
 </student>
 <student>
  <name>laoli</name>
  <age>29</age>
 </student>
</students>
在java中XML读,主函数:
SAXReader reader=new SAXReader();
Document doc=  reader.read(new File("resources/demo.xml"));
Element eml=doc.getRootElement();
sout(eml.getText());     //输出students
sout(eml.getName());  //输出students
sout(eml.attribute("color").getValue());  //输出red
List<Element> list=  eml.elements("students");  //获取到list集合  用增强for循环取数据
for(Element em:list){
  sout(em.element("name").getText());
  sout(em.element("age").getText());
}
在java中XML写:
Document doc=DocumentHelper.createDocument();
doc.addElement();  //添加子节点
XMLWriter writer=new XMLWriter();
writer... 点出来的方法写XML

Java高级特性 反射和注解
反射  class  ----  java代码
Java虚拟机   java代码---class 
在java中写反射  (反射可以把程序弄得很灵活)
示范类:
public class Demo{
 private String name;
    Demo(){}  //无参构造函数
  Demo(String name){     
    }
    public int add(int a,int b){
        return a+b;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
  public String getPubName(){
        return name;
    }
}
在主函数里面写:
         Class clazz=Class.forName("Demo");
         Demo demo= (Demo)clazz.newInstance();    //创建类的新实例
         int x= demo.add(3,5);  //x为8   通过反射  用字符串找到了一个类然后弄了个对象 再调用了类方法求值
         Field field= clazz.getDeclaredField("name");  //寻找成员变量
         System.out.println(field.getName());  //输出name
         field.setAccessible(true);   //设置主函数可以访问私有成员变量
         field.set(demo,"laowang");      //通过反射修改了私有变量的值
         System.out.println(demo.getPubName());  //输出laowang
         Method method= clazz.getDeclaredMethod("add", int.class, int.class);   //通过反射获得方法 私有的也可以拿到  假如要调用,就要setAccessible一下
       Class clax=     method.getReturnType();  //获得方法返回类型
        int i=(int)method.invoke(demo,2,3);    //通过反射调用了add方法(公有的)  假如要访问私有的就setAccessible一下  暴力破解一个类
        System.out.println(i);  //输出5

在java中自定义注解   (平常开发时用到注解就必然要用反射)  (自定义注解的原理是动态代理)
示范类:
public class Demo {
    private String name;
    Demo(){}  //无参构造函数
    Demo(String name){
    }
    //当某些方法使用时  有条黄线横在哪里,想要黄线消失就在那方法上加@SuppressWarnings()压制警告,编译器就不会提醒黄线了
    //假如该方法已经开发了更好的代替该方法的方法  但现有的功能也会用到该方法,不能直接删除,下次使用该方法时可以提醒自己不要用这个方法
    //可以用@Deprecated     demo.add(); add方法会有一条横线  提醒你不要用这个没那么好的方法
   @Test(value = "demo")
 public int add(int a,int b){
        return a+b;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPubName(){
        return name;
    }
}

在src目录下创建Class  kind选为Annotation(注解的意思)
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Test {
    //描述自定义注解的注解  叫源注解
    //@Target(ElementType.FIELD) 注解的作用是只能在成员变量上使用  不能在成员方法上使用    Test注解加在成员方法上时就会报错
    //@Target(ElementType.METHOD) 注解的作用是只能在成员方法上使用  不能在成员变量上使用
    //@Retention(RetentionPolicy.SOURCE) 意思是经过java虚拟机编译成class字节码   这个注解就失效了
    //@Retention(RetentionPolicy.CLASS)  意思是经过编译成class字节码 这个注解依然是有效的
    //@Retention(RetentionPolicy.RUNTIME) 意思是编译运行时注解都是生效的
    //@Document  把注解生成文档
    //@Inherited   注解作用于该类上的方法   继承该类的子类此注解也生效
    public String value();
    public String desc() default "这是一个描述";    //在方法后面加一个值
}
在主函数中写:
    Class clazz=Class.forName("Demo");
        Method method= clazz.getDeclaredMethod("add", int.class, int.class);   //通过反射获得方法 私有的也可以拿到  假如要调用,就要setAccessible一下
        Test test=  method.getAnnotation(Test.class);  //通过方法拿到自定义Test类型的注解
        System.out.println(test.desc());  //输出这是一个描述
        System.out.println(test.value());   //输出demo


时隔好久才更新博客...,之前都忙考试和做项目比赛,都把博客落下了,趁着寒假,想和大家分享更多的学习笔记-.-






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值