java中的反射問題

 
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());
 }
 

}



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章