Reflection Java 反射(九)
来源:互联网 发布:新东方 知乎 编辑:程序博客网 时间:2024/05/22 01:49
/**
* 通过反射技术,获得类对象 方法属性
* 放射获得了自由,提高了效率,丢了些性能
* 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);
}
}
- Reflection Java 反射(九)
- Java反射(Reflection)
- Java 反射(Reflection)
- Java 反射(Reflection)
- Java 反射(Reflection)
- Java Reflection(九):泛型
- java反射学习(Reflection)
- java反射学习(Reflection)
- Java反射机制(Reflection )
- Java基础---反射(Reflection)
- Java反射机制(Reflection)
- java Reflection(反射)机制
- Java反射(Reflection)详解
- java reflection(反射机制)
- Java Reflection(一):Java反射指南
- Java Reflection (JAVA反射)
- Java Reflection (JAVA反射)
- Java Reflection (JAVA反射)
- 基于spark的精准推荐系统
- spring mvc @ModelAttribute使用
- 事件冒泡的原理?如何禁止事件冒泡 ?
- 源码阅读--EventBus
- Java 面试准备系列3-JDBC
- Reflection Java 反射(九)
- dao--2.dao模式
- javaSE_8系列博客——Java语言的特性(三)--类和对象(8)--对象
- CSU 1120 病毒 最长公共递增子序列
- 偶数求和
- C语言关键字auto与register的深入理解
- 为div设置的背景色默认会延伸到哪里?
- 通俗解释matlab之遗传算法程序汇总与结果显示(三)
- RedHat中安装Oracle