*获取class对象的方式java
package Demo; public class Person { private String name; private int age; public int a; public int b; @Override public String toString() { return "Peroson{" + "name='" + name + '\'' + ", age=" + age + ", a=" + a + ", b=" + b + '}'; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getA() { return a; } public void setA(int a) { this.a = a; } public int getB() { return b; } public void setB(int b) { this.b = b; } public Person(String name, int age, int a, int b) { this.name = name; this.age = age; this.a = a; this.b = b; } public Person() { } }
import Demo.Person; public class Main{ public static void main(String[] args) throws Exception { //第一种方式 Class.forname("全类名"); Class cls1 = Class.forName("Demo.Person"); System.out.println(cls1);//class Demo.Person //第二种方式 类名.class Class cls2 = Person.class; System.out.println(cls2);//class Demo.Person //第三种方式 对象.getClass() Person p=new Person(); Class cls3= p.getClass(); System.out.println(cls3);//class Demo.Person } }
import Demo.Person; import java.lang.reflect.Field; public class Main{ public static void main(String[] args) throws Exception { Class cls = Person.class; Field[] fields = cls.getFields();//Public 修饰的成员变量 for (Field field : fields) { System.out.println(field); } System.out.println("---------------------"); Field[] fields1 = cls.getDeclaredFields();//全部的成员变量 for (Field field : fields1) { System.out.println(field); } Field age = cls.getDeclaredField("age"); System.out.println(age); Person p=new Person(); age.setAccessible(true);//暴力反射 age.set(p,18); Object o = age.get(p); System.out.println(o); } }
打印结果:ide
public int Demo.Person.a
public int Demo.Person.b
---------------------
private java.lang.String Demo.Person.name
private int Demo.Person.age
public int Demo.Person.a
public int Demo.Person.b
private int Demo.Person.age
18this
2.0 获取构造方法spa
import Demo.Person; import java.lang.reflect.Constructor; public class Main{ public static void main(String[] args) throws Exception { Class cls = Person.class; Constructor constructor = cls.getConstructor(String.class, int.class, int.class, int.class); Object v = constructor.newInstance("V", 25, 12, 30); System.out.println(v); System.out.println("空参构造方法"); Constructor constructor1 = cls.getConstructor(); Object o = constructor1.newInstance(); System.out.println(o); Object o1 = cls.newInstance(); System.out.println(o1); } }
3.0 获取成员方法3d
import Demo.Person; import java.lang.reflect.Constructor; import java.lang.reflect.Method; public class Main{ public static void main(String[] args) throws Exception { Class cls = Person.class; Method[] methods = cls.getMethods();//person类继承了object类 for (Method method : methods) { System.out.println(method); System.out.println(method.getName()); } Method method = cls.getMethod("eat"); Person person=new Person(); method.invoke(person); Method method1 = cls.getMethod("eat",String.class); Person p=new Person(); method1.invoke(p,"披萨"); } }
public java.lang.String Demo.Person.toString() toString public java.lang.String Demo.Person.getName() getName public void Demo.Person.setName(java.lang.String) setName public int Demo.Person.getAge() getAge public void Demo.Person.eat() eat public void Demo.Person.eat(java.lang.String) eat public void Demo.Person.setAge(int) setAge public void Demo.Person.setA(int) setA public int Demo.Person.getB() getB public int Demo.Person.getA() getA public void Demo.Person.setB(int) setB public final void java.lang.Object.wait(long,int) throws java.lang.InterruptedException wait public final void java.lang.Object.wait() throws java.lang.InterruptedException wait public final native void java.lang.Object.wait(long) throws java.lang.InterruptedException wait public boolean java.lang.Object.equals(java.lang.Object) equals public native int java.lang.Object.hashCode() hashCode public final native java.lang.Class java.lang.Object.getClass() getClass public final native void java.lang.Object.notify() notify public final native void java.lang.Object.notifyAll() notifyAll 吃什么好呢? 那就吃披萨好了
配置文件:Demo01/src/pro.Properties对象
classname=Demo.Person methodname=eat
package Demo; import java.io.InputStream; import java.lang.reflect.Method; import java.util.Properties; public class TestPractice { public static void main(String[] args) throws Exception{ Properties pro=new Properties(); //类加载器 获取class目录下的文件 ClassLoader classLoader=TestPractice.class.getClassLoader(); InputStream stream = classLoader.getResourceAsStream("pro.Properties"); pro.load(stream); String classname = pro.getProperty("classname"); String methodname = pro.getProperty("methodname"); Class cls = Class.forName(classname); Object o = cls.newInstance();//空参构造方法 Method method = cls.getMethod(methodname);//方法参数 method.invoke(o); } }
打印结果:blog
吃什么好呢?继承