xml反射

简介: xml反射

什么叫类类?

反射实例化

反射方法调用

反射读写属性

什么叫类类?

1.类类的实例是猫类、狗类、学生类等等

2.类类的三种获取方式

2.1.Class.forName

2.2.类实例.getClass

2.3.类名.class

package com.zhulinjun;
  public class Student {
    private String sid;
    private String sname;
    public Integer age;
    static{
      System.out.println("加载进jvm中!");
    }
    public Student() {
      super();
      System.out.println("调用无参构造方法创建了一个学生对象");
    }
    public Student(String sid) {
      super();
      this.sid = sid;
      System.out.println("调用带一个参数的构造方法创建了一个学生对象");
    }
    public Student(String sid, String sname) {
      super();
      this.sid = sid;
      this.sname = sname;
      System.out.println("调用带二个参数的构造方法创建了一个学生对象");
    }
    @SuppressWarnings("unused")
    private Student(Integer age) {
      System.out.println("调用Student类私有的构造方法创建一个学生对象");
      this.age = age;
    }
    public String getSid() {
      return sid;
    }
    public void setSid(String sid) {
      this.sid = sid;
    }
    public String getSname() {
      return sname;
    }
    public void setSname(String sname) {
      this.sname = sname;
    }
    public void hello() {
      System.out.println("你好!我是" + this.sname);
    }
    public void hello(String name) {
      System.out.println(name + "你好!我是" + this.sname);
    }
    @SuppressWarnings("unused")
    private Integer add(Integer a, Integer b) {
      return new Integer(a.intValue() + b.intValue());
    }
  }
package com.zhulinjun;
public class demo1 {
public static void main(String[] args) throws ClassNotFoundException {
Student stu=new Student();
//第一种:Class.forName(java.lang.Class 类类,应用在jdbc连接数据库中)
Class c1=Class.forName("com.zhulinjun.Student");
//System.out.println(c1);//加载进jvm中!调用无参构造方法创建了一个学生对象  class com.zhulinjun.Student
//第二种,增删改
Class c2 = stu.getClass();
//System.out.println(c2);
//第三种
Class c3=Student.class;
System.out.println(c3);
}
}

反射实例化(所有实体类,添加了有参构造器,一定记得补一个无参构造器)

package com.zhulinjun;
import java.lang.reflect.Constructor;
public class demo2 {
  public static void main(String[] args) throws Exception {
  //一切反射从类类开始
  Class c=Class.forName("com.zhulinjun.Student");
//  所有实体类,添加了有参构造器,一定记得补一个无参构造器
//  1.调用无参构造器反射实例化
  Student s1 = (Student) c.newInstance();
  System.out.println(s1);//加载进jvm中!调用无参构造方法创建了一个学生对象 com.zhulinjun.Student@7852e922
//  2.调用有一个参数构造器反射实例化
//  parameterTypes:代表参数的类别,例如String.class
  Constructor cr1=c.getConstructor(String.class);
  Student s2 = (Student) cr1.newInstance("s001");
  System.out.println(s2);//加载进jvm中!调用带一个参数的构造方法创建了一个学生对象 com.zhulinjun.Student@7852e922
//  3.调用有两个参数构造器反射实例化
  Constructor cr2=c.getConstructor(String.class,String.class);
  Student s3 = (Student) cr2.newInstance("s002","nb");
  System.out.println(s3);//加载进jvm中!调用带二个参数的构造方法创建了一个学生对象 com.zhulinjun.Student@7852e922
//  4.调用私有的带有一个参数的构造器实例化
//  getConstructor方法只能获取到公有的构造器对象
  Constructor cr3=c.getDeclaredConstructor(Integer.class);
//  Exception in thread "main" java.lang.IllegalAccessException: Class com.zhulinjun.demo2 can not access a member of class com.zhulinjun.Student with modifiers "private"
  //setAccessible:打开私有修饰符的访问权限
  cr3.setAccessible(true);
  Student s4= (Student) cr3.newInstance(18);
  System.out.println(s4);//加载进jvm中!调用Student类私有的构造方法创建一个学生对象 com.zhulinjun.Student@5c647e05
  }
}

反射方法调用

package com.zhulinjun;
import java.lang.reflect.Method;
public class demo3 {
public static void main(String[] args) throws Exception {
  Class c=Student.class;
  Student stu = (Student) c.newInstance();
//  1.反射调用无参方法,先获取到方法对象
//  name:方法名      parameterTypes:调用这个方法要传的参数类型
  Method m1=c.getMethod("hello");
//  obj:类实例  args:参数值  invoke:方法的返回值
  Object invoke = m1.invoke(stu);
  System.out.println(invoke);//你好!我是null
//  2.反射调有参方法
  Method m2=c.getMethod("hello", String.class);
  Object invoke2 = m2.invoke(stu, "大傻");
  System.out.println(invoke2);//大傻你好!我是null
//  3.调用有参的私有的方法
  Method m3=c.getDeclaredMethod("add", Integer.class,Integer.class);
  m3.setAccessible(true);
  Object invoke3 = m3.invoke(stu, 1,2);
  System.out.println(invoke3);//3
}
}

反射读写属性

package com.zhulinjun;
import java.lang.reflect.Field;
import javax.annotation.Generated;
import org.omg.CORBA.Request;
public class demo4 {
public static void main(String[] args) throws Exception {
  Class clz=Student.class;
  Student stu=new Student("s001","nb");
  stu.age=18;
//  获取到该学生的stu的sid值以及sname值
  System.out.println(stu.getSid());//s001
  System.out.println(stu.getSname());//nb
//  获取某一个对象的所有值(读)
//  field:属性对象
  Field[] Fields = clz.getDeclaredFields();
  for (Field f : Fields) {
    f.setAccessible(true);
    System.out.println(f.getName()+":"+f.get(stu));//sid:s001 sname:nb age:18
  }
//  修改值(写)
  Field nameFields = clz.getDeclaredField("sname");
  nameFields.setAccessible(true);
  nameFields.set(stu, "zml");
  System.out.println(nameFields.getName()+":"+nameFields.get(stu));//sname:nb age:18 sname:zml
}
}
目录
相关文章
|
5月前
|
XML Java API
XML之反射
XML之反射
27 0
|
XML 数据格式
XML学习总结——SAXReader解析xml文件,实现反射 代码实例
XML学习总结——SAXReader解析xml文件,实现反射 代码实例
203 0
|
XML Java 关系型数据库
java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-【费元星Q9715234】
java+反射+多线程+生产者消费者模式+读取xml(SAX)入数据库mysql-【费元星Q9715234】 说明如下,不懂的问题直接我【费元星Q9715234】 1.反射的意义在于不将xml tag写死在sax 的代码中,直接配置到一个bean就可以了。
1203 0
|
XML C# 数据格式
C#对象序列化XML时报错:反射类型XXX时出错
弄了半天,查了很多资料,原来是类中没有含有参数为空的构造函数造成。如果要根据xmlserializer来把对象序列化成XML,必须至少有一个参数为空的构造函数,否则就会报该类型错误。
1679 0
|
1月前
|
XML JavaScript 数据格式
打开 XML 文件报错 There is no Unicode byte order mark
打开 XML 文件报错 There is no Unicode byte order mark
32 0
|
1月前
|
XML 存储 数据格式
什么是 XML 文件的 Schema
什么是 XML 文件的 Schema
13 0
|
2月前
|
XML C# 数据格式
c# 追加 数据至xml文件
c# 追加 数据至xml文件
13 0
|
2月前
|
XML JSON JavaScript
XML文件的读写操作详解
XML文件的读写操作详解
16 0
|
2月前
|
XML JavaScript Java
Spring5源码(16)-Spring将Xml文件解析为Document对象
Spring5源码(16)-Spring将Xml文件解析为Document对象
30 0

相关课程

更多