/**
* 通過反射技術,獲得類對象 方法屬性
* 放射獲得了自由,提高了效率,丟了些性能
* 10億次調用同一方法耗時:毫秒數
* 通過反射,耗時毫秒數:1682
通過反射,關閉安全檢測,耗時毫秒數:962
常規,對象.方法,耗時毫秒數:24
*/
public class ReflectDemo3 {
public static void main(String[] args) throws Exception {
test01();
test02();
test03();
}
/**
* 反射 方式
* @throws Exception
*/
public static void test01() throws Exception{
String path="mine.annotation.StudentDemo";
//通過:包名+類名 獲得類對象
Class<?> cla= Class.forName(path);
StudentDemo st=(StudentDemo)cla.newInstance();
//通過反射技術 調用方法
Method method=cla.getDeclaredMethod("setId",int.class);
long start=System.currentTimeMillis();
for(int i=0;i<1000000000;i++){
method.invoke(st, 100);
}
long timeSum=System.currentTimeMillis()-start;
System.out.println("通過反射,耗時毫秒數:"+timeSum);
}
/**
* 反射+關閉安全檢查 方式
* @throws Exception
*/
public static void test02() throws Exception{
String path="mine.annotation.StudentDemo";
//通過:包名+類名 獲得類對象
Class<?> cla= Class.forName(path);
StudentDemo st=(StudentDemo)cla.newInstance();
//通過反射技術 調用方法
Method method=cla.getDeclaredMethod("setId",int.class);
method.setAccessible(true);//關閉安全檢測
long start=System.currentTimeMillis();
for(int i=0;i<1000000000;i++){
method.invoke(st, 100);
}
long timeSum=System.currentTimeMillis()-start;
System.out.println("通過反射,關閉安全檢測,耗時毫秒數:"+timeSum);
}
/**
* 常規 方式
*
*/
public static void test03(){
StudentDemo st=new StudentDemo();
long start=System.currentTimeMillis();
for(int i=0;i<1000000000;i++){
st.setId(100);
}
long timeSum=System.currentTimeMillis()-start;
System.out.println("常規,對象.方法,耗時毫秒數:"+timeSum);
}
}
//==============分割線===下面只是測試類=== 隨便寫================
/**
* 假定要與數據庫中 表:td_student對應
* @author Administrator
*
*/
@Table (value="st_student")
public class StudentDemo {
@Fields(columnName="id",type="int",length=10)//對ID經行註解
private int id;
@Fields(columnName="name",type="varchar",length=10)
private String name;
@Fields(columnName="age",type="int",length=3)
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
@MyAnno(name="")
public void test(){}
@MyAnno2("lisi")//一個值,直接賦值"lisi",也可以,value=“lisi”
public void test(int str){
System.out.println(str);
}
}