*獲取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
吃什麼好呢?繼承