import java.io.Serializable;java
public class Car extends Demo1 implements Serializable,Cloneable{函數
public Car(){}this
public Car(String color) throws NullPointerException {this.color=color;}spa
private Car(String a,String b){}.net
private String color ;對象
public String desc;繼承
public static String desc2;接口
public void setColor(String color) {get
this.color = color;it
}
public String getColor() {
return color;
}
public static void run()throws ClassCastException,IndexOutOfBoundsException{
System.out.println("汽車跑!!滴滴!");
}
private String getDesc() {
return desc;
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import org.junit.Test;
//Class
public class Demo1 {
public void fun1() throws Exception{
//1得到Class的方式
//1> 根據實例得到
Car car = new Car();
Class clazz1 = car.getClass();
//2>根據類得到
Class clazz2 = Car.class;
//3>根據完整類名
Class clazz3 = Class.forName("cn.itcast.reflect.Car");
}
public void fun2() throws Exception{
Class clazz3 = Class.forName("cn.itcast.reflect.Car");
//2得到class能夠作什麼?
//1> 得到類中的信息
//得到類名
String name1 = clazz3.getName();
String name2 = clazz3.getSimpleName();
System.out.println(name1);
System.out.println(name2);
//得到類的修飾符
System.out.println(Modifier.toString(clazz3.getModifiers()));
//類的父類,接口
System.out.println(clazz3.getSuperclass().getName());
System.out.println(clazz3.getInterfaces().length);
//得到類中的構造方法
//如下兩個方法不能得到私有構造
Constructor con1 = clazz3.getConstructor(String.class);//指定參數得到構造
Constructor[] cons = clazz3.getConstructors();
System.out.println(con1.getName());//cn.itcast.reflect.Car
System.out.println(cons.length);//2
//得到私有構造
Constructor con2 = clazz3.getDeclaredConstructor(String.class,String.class);
Constructor[] cons2 =clazz3.getDeclaredConstructors();
System.out.println(cons2.length);//3
//得到類中的變量/字段
//得到公有屬性
Field f1 = clazz3.getField("desc");
Field[] fs1 = clazz3.getFields();
System.out.println(f1.getName());//desc
System.out.println(fs1.length);//1
//得到私有屬性
Field f2 = clazz3.getDeclaredField("color");
Field[] fs2 = clazz3.getDeclaredFields();
System.out.println(f2.getName());//color
System.out.println(fs2.length);//2
//得到類中的方法=> 類中全部公有方法(包含繼承來的)
Method m1 = clazz3.getMethod("run");
Method[] ms1 = clazz3.getMethods();
System.out.println(m1.getName());//run
System.out.println(ms1.length);//13
//得到類中的方法=> 得到類中的全部方法(包括私有)(不包括繼承的)
Method m2 = clazz3.getDeclaredMethod("getDesc");
Method[] ms2 = clazz3.getDeclaredMethods();
System.out.println(m2.getName());//getDesc
System.out.println(ms2.length);//3
}
public void fun3() throws Exception{
Class clazz3 = Class.forName("cn.itcast.reflect.Car");
//2> 建立實例
Car car = (Car) clazz3.newInstance();
car.run();
//注意:使用類的newInstance方法,只能調用空參構造.
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import org.junit.Test;
//Constructor
public class Demo2 {
public void fun1() throws Exception{
Class clazz3 = Class.forName("cn.itcast.reflect.Car");
//1得到Constructor的方式
//如下兩個方法不能得到私有構造
Constructor con1 = clazz3.getConstructor(String.class);//指定參數得到構造
Constructor[] cons = clazz3.getConstructors();
System.out.println(con1.getName());//cn.itcast.reflect.Car
System.out.println(cons.length);//2
//得到私有構造
Constructor con2 = clazz3.getDeclaredConstructor(String.class,String.class);
Constructor[] cons2 =clazz3.getDeclaredConstructors();
System.out.println(cons2.length);//3
}
public void fun2() throws Exception{
Class clazz3 = Class.forName("cn.itcast.reflect.Car");
//public Car(String color) {this.color=color;}
Constructor con1 = clazz3.getConstructor(String.class);//指定參數得到構造
//2得到Constructor能夠作什麼?
//1> 描述信息
//限定名稱 public
System.out.println(Modifier.toString(con1.getModifiers()));
//構造方法名稱
System.out.println(con1.getName());//cn.itcast.reflect.Car
//參數列表 String
Class[] ps = con1.getParameterTypes();
System.out.println(ps.length);//1
//得到拋出異常信息
Class[] es = con1.getExceptionTypes();
System.out.println(es.length);
System.out.println(es[0].getName());
}
@Test
public void fun3() throws Exception{
Class clazz3 = Class.forName("cn.itcast.reflect.Car");
//public Car(String color) {this.color=color;}
Constructor con1 = clazz3.getConstructor(String.class);//指定參數得到構造
//2>根據構造函數建立實例
Car car = (Car) con1.newInstance("yellow");
System.out.println(car.getColor());//yellow
//--------私有構造函數調用-------------
//理論上不能使用私有構造建立對象
Constructor con2 = clazz3.getDeclaredConstructor(String.class,String.class);//指定參數得到構造
//設置能夠被訪問 ==> 不推薦,由於破壞了封裝性.
con2.setAccessible(true);
Car car2 = (Car) con2.newInstance("a","b");
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import org.junit.Test;
//Method
public class Demo3 {
@Test
public void fun1() throws Exception{
Class clazz3 = Class.forName("cn.itcast.reflect.Car");
//1得到Method的方式
//得到類中的方法=> 類中全部公有方法(包含繼承來的)
Method m1 = clazz3.getMethod("run");
Method[] ms1 = clazz3.getMethods();
System.out.println(m1.getName());//run
System.out.println(ms1.length);//13
//得到類中的方法=> 得到類中的全部方法(包括私有)(不包括繼承的)
Method m2 = clazz3.getDeclaredMethod("getDesc");
Method[] ms2 = clazz3.getDeclaredMethods();
System.out.println(m2.getName());//getDesc
System.out.println(ms2.length);//3
}
@Test
public void fun2() throws Exception{
Class clazz3 = Class.forName("cn.itcast.reflect.Car");
// public void run(){ System.out.println("汽車跑!!滴滴!"); }
Method m1 = clazz3.getMethod("run");
//2得到Method能夠作什麼?
//1> 描述信息
//修飾符
System.out.println(Modifier.toString(m1.getModifiers()));//public
//返回值
System.out.println(m1.getReturnType().getName());//void
//方法名
System.out.println(m1.getName());//run
//參數列表
System.out.println(m1.getParameterTypes().length);//0
//拋出異常
System.out.println(m1.getExceptionTypes().length);//2
}
@Test
public void fun3() throws Exception{
Class clazz3 = Class.forName("cn.itcast.reflect.Car");
// public void setColor(String color) { this.color = color; }
Method m1 = clazz3.getMethod("setColor",String.class);
//2>使用方法能夠作什麼
Car car =new Car();
System.out.println(m1.invoke(car, "blue"));//null
System.out.println(car.getColor());//blue
//---私有方法調用--- setAccessable(true)
//---靜態方法調用--- 不須要對象
Method m2 = clazz3.getMethod("run");
m2.invoke(null);
}
}
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import org.junit.Test;
//Field
public class Demo4 {
@Test
public void fun1() throws Exception{
Class clazz3 = Class.forName("cn.itcast.reflect.Car");
//1得到Field的方式
//得到公有屬性
Field f1 = clazz3.getField("desc");
Field[] fs1 = clazz3.getFields();
System.out.println(f1.getName());//desc
System.out.println(fs1.length);//1
//得到私有屬性
Field f2 = clazz3.getDeclaredField("color");
Field[] fs2 = clazz3.getDeclaredFields();
System.out.println(f2.getName());//color
System.out.println(fs2.length);//2
}
@Test
public void fun2() throws Exception{
Class clazz3 = Class.forName("cn.itcast.reflect.Car");
// public String desc;
Field f1 = clazz3.getField("desc");
//2得到Field能夠作什麼?
//1> 描述信息
//修飾符
System.out.println(Modifier.toString(f1.getModifiers()));//public
//類型
System.out.println(f1.getType().getName());//java.lang.String
//變量名稱
System.out.println(f1.getName());//desc
}
@Test
public void fun3() throws Exception{
Class clazz3 = Class.forName("cn.itcast.reflect.Car");
// public String desc;
Field f1 = clazz3.getField("desc");
//2>使用屬性能夠作什麼
Car car =new Car();
//設置值
f1.set(car, "haha");
//取出值
System.out.println(f1.get(car));//haha
//---操做靜態變量
Field f2 = clazz3.getField("desc2");
//設置值
f2.set(null, "haha");
//取出值
System.out.println(f2.get(null));//haha
System.out.println(Car.desc2);//haha
}
}