天天看点

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

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

继续阅读