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