package com.refect.demo;
import java.io.Serializable;
public class Product implements Serializable{
public String productName;
protected String productNo;
private double price;
public Product(){}
public Product(String productName,String productNo,double price){
this.productName = productName;
this.productNo = productNo;
this.price = price;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductNo() {
return productNo;
}
public void setProductNo(String productNo) {
this.productNo = productNo;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String toString(){
return productName+":"+productNo+":"+price;
}
}
****************************************************************************************************
package com.refect.demo;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class Test {
public static void main(String[] args) {
//1.基本數據類型
//Class cls1 = int.class;
//2.引用數據類型
//Class cls2 = Product.class;
Class cls2 = null;
try {
cls2 = Class.forName("com.refect.demo.Product");
} catch (ClassNotFoundException e1) {
e1.printStackTrace();
}
// Product p = new Product("杯具","bj0010",20.8);
// Object p = null;
// try {
// 調用該類型中的無參的構造函數
// p = cls2.newInstance();
// } catch (InstantiationException e1) {
// e1.printStackTrace();
// } catch (IllegalAccessException e1) {
// e1.printStackTrace();
// }
//Product p = new Product();
//Class cls = p.getClass();
//類名
System.out.println("類路徑:"+cls2.getName());
System.out.println("類名:"+cls2.getSimpleName());
//本類定義的所有的屬性,但是不包含父類屬性
Field[] fs = cls2.getDeclaredFields();
//返回本類以及父類所有的公共的屬性
//Field[] fs = cls2.getFields();
//指定獲取本類定義的屬性
//Field f = cls2.getDeclaredField("productName");
//指定獲取本類及父類公有的屬性
//Field f = cls2.getField("productName");
for(Field f : fs){
System.out.println("屬性訪問修飾符:"+Modifier.toString(f.getModifiers()));
System.out.println("屬性數據類型:"+f.getType());
System.out.println("屬性名:"+f.getName());
// f.setAccessible(true);
// try{
// if(f.getName().equals("price")){
// f.set(p,26.8);
// }
// System.out.println("屬性值:"+f.get(p));
// } catch (IllegalArgumentException e) {
// e.printStackTrace();
// } catch (IllegalAccessException e) {
// e.printStackTrace();
// }
}
//本類定義的所有的方法,但是不包含父類方法
Method[] ms = cls2.getDeclaredMethods();
//Method[] ms = cls2.getMethods();
for(Method m : ms){
System.out.println("方法的訪問修飾符:"+Modifier.toString(m.getModifiers()));
System.out.println("方法的返回值類型:"+m.getReturnType());
System.out.println("方法名稱:"+m.getName());
System.out.println("參數類型:"+m.getParameterTypes());
}
// try {
// Method m1 = cls2.getDeclaredMethod("setPrice", new Class[]{double.class});
// m1.invoke(p, new Object[]{38.2});
// Method m2 = cls2.getDeclaredMethod("getPrice", null);
// Object res = m2.invoke(p, null);
// System.out.println(res);
// } catch (NoSuchMethodException e) {
// e.printStackTrace();
// } catch (SecurityException e) {
// e.printStackTrace();
// } catch (IllegalAccessException e) {
// e.printStackTrace();
// } catch (IllegalArgumentException e) {
// e.printStackTrace();
// } catch (InvocationTargetException e) {
// e.printStackTrace();
// }
Constructor[] cons = cls2.getConstructors();
for(Constructor c : cons){
System.out.println("構造函數的訪問修飾符:"+Modifier.toString(c.getModifiers()));
System.out.println("構造函數的方法名:"+c.getName());
for(Class pc : c.getParameterTypes()){
System.out.println("構造函數的參數:"+ pc);
}
}
try {
Constructor c = cls2.getConstructor(new Class[]{String.class,String.class,double.class});
Object o = c.newInstance(new Object[]{"洗具","盆",5.00});
System.out.println(o);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
//獲取父類信息
Class sc = cls2.getSuperclass();
System.out.println("父類名稱:"+sc.getName());
//實現接口的信息
Class[] ic = cls2.getInterfaces();
for(Class i : ic){
System.out.println("接口名稱:"+i.getName());
}
//包信息
Package p = cls2.getPackage();
System.out.println("包名稱:"+p.getName());
}
}
java中的反射問題
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.