学习XML的反射,就必须了解类类的使用。有一句话牢记:一切的反射从类类开始
一.类类
一.类类的概念
在Java反射(reflection)中,Class类被称为“类类”,每个Java类在内存中都有一个对应的Class类实例对象,可以通过Java的反射机制获取。
二.类类的使用
三种:1.getClass()
2.类.Class
3.Class.forName
通过这些方法我们可以得到Java类的Class实例对象。
代码如下:
这是一个实体类,封装了有参,无参,私有的构造方法。
package com.lya.xml3; 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 + "你好!我是" + "您爹"); } @SuppressWarnings("unused") private Integer add(Integer a, Integer b) { return new Integer(a.intValue() + b.intValue()); } }
三.类类的获取方式/获取无参构造
运行结果:
代码:
package com.lya.xml3; /** * 类类的获取方式/获取无参构造 * * @author 李永安 * */ public class Demo1 { public static void main(String[] args) throws Exception { // 获取类类的方式 // ①Classforname Student student = new Student(); Class c1 = Class.forName("com.lya.xml3.Student"); System.out.println(c1); // ②getclass Class s1 = student.getClass(); System.out.println(s1); // ③class Class s2 = Student.class; System.out.println(s2); // 获取无参构造 // 基于类类基础上:实例对象 Student student1 = (Student) c1.newInstance(); System.out.println(student1);// com.lya.xml3.Student@26f0a63f } }
二.反射
一.什么是反射?
Java反射是指在运行时动态地获取类的信息以及动态调用对象的方法和属性。Java反射API包括java.lang.Class类、java.lang.reflect包以及java.lang.reflect.Method、java.lang.reflect.Field、java.lang.reflect.Constructor等类,这些类提供了获取类的信息、动态创建对象、调用对象的方法和属性等功能。
简而言之就是:通过反射能够获取到类的所有信息
二.使用反射
调用公有,私有 的参构造方法运行结果如下:
代码如下:
package com.lya.xml3; import java.lang.reflect.Constructor; import java.lang.reflect.Method; /** * 反射动态方法使用 * * @author 李永安 * */ public class Demo3 { public static void main(String[] args) throws ClassNotFoundException, Exception { // 创造对象 Student student = new Student(); // 使用类类 Class c1 = Class.forName("com.lya.xml3.Student"); // 一,无参方法 Method m1 = c1.getMethod("hello"); // obj实例 args参数 Object invoke = m1.invoke(student); System.out.println(invoke); // 二,有参方法 Method m2 = c1.getMethod("hello", String.class); // obj实例 args参数 Object invoke2 = m2.invoke(student, "朱俊良"); System.out.println(invoke2); // 三,有参私有方法 Method m3= c1.getDeclaredMethod("add", Integer.class,Integer.class); //这里还要用setAccessible打开访问私用权限 m3.setAccessible(true); // obj实例 args参数 Object invoke3= m3.invoke(student, 1,2); System.out.println(invoke3); } }
好了今天就分享到这了,希望能ban我们下期再见!!!