Object源码研究2——getClass()方法分析
来源:互联网 发布:单片机无线抢答器 编辑:程序博客网 时间:2024/06/07 16:10
1. 关于getClass()方法?
getClass()往往用于动态获得Class,可以运行如下代码进行检验
/** * @author lcx * */public class MainTest {public static void main(String[] args) {Father son1=new Son1();Father son2=new Son2();System.out.println(Father.class);readClass(son1);readClass(son2);}public static void readClass(Father f){System.out.println(f.getClass());}}class Son1 extends Father{}class Son2 extends Father{}class Father{}
结果如下:
class Fatherclass Son1
class Son2
追问: 还有什么方法来获取class?
class.forName与.class当然都是静态的
追问: 我在哪用到过getClass方法?
有的地方比如equals判断,需要先检查class
追问: Class.forName()在哪用到?
事实上,
A a = (A)Class.forName("pacage.A").newInstance(); 这和A a = new A();是一样的。实际上在JVM中,这两种情况分别对应的是显示加载与隐式加载A类所对应的Class对象,当然,第一种情况只能对应无参构造器且效率较低。
追问:为什么使用JDBC时候需要Class.forName("com.mysql.jdbc.Driver"); ?
因为后面DriverManager.getConnection()方法需要Driver加载到JVM中并进行初始化
追问:怎么样证明Class.forName速度更慢?
public class MainTest {public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {long t1=System.currentTimeMillis();for(int i=0;i<10000;i++)new MainTest();long t2=System.currentTimeMillis();for(int i=0;i<10000;i++)Class.forName("MainTest").newInstance();long t3=System.currentTimeMillis();System.out.println(t2-t1);System.out.println(t3-t2);}}
打印结果为
1
20
0 0
- Object源码研究2——getClass()方法分析
- JAVA源码分析之---Object类(一)---registerNatives,getClass方法的使用
- object类----getClass方法
- OpenStack_Swift源码分析——Object-auditor源码分析(2)
- Object中getClass()方法详解
- Object 类的 getClass方法
- Object源码研究1——整体研究
- Object的getClass()方法(面试题)
- OpenStack_Swift源码分析——Object-auditor源码分析(1)
- Java之类Object方法源码分析
- Object源码分析(一)-- clone方法
- Object源码分析(二)-- hashcode方法
- 02-(Object类-equals方法覆盖)1 2 03-(Object类-hashCode方法) 04-(Object类-getClass方法) 05-to String方法
- java.lang.Object中getClass()方法的用途
- java.lang.Object中getClass()方法的用途
- Object常用方法介绍及注意事项equals(),hashCode(),getClass(),toString()
- java学习日记_52:Object类的getClass()方法
- getClass方法
- HDU 2191(悼念512汶川大地震遇难同胞——珍惜现在,感恩生活)多重背包
- android 中 setTextColor 方法使用注意事项
- C++中堆栈,堆和栈的区别
- IOS界面适配一: Pt与Px的关系
- Hive安装及基础知识总结
- Object源码研究2——getClass()方法分析
- Makefile中include、-include、sinclude的区别
- HttpURLConnection 提交表单+ 上传文件
- Getting Configurable Product from Simple Product ID
- uva 11292 Dragon of Loowater
- 详解C++代码反汇编后的堆栈寄存器EBP和ESP
- 网站攻击类型跨站攻击的解决方案
- 指定eclipse启动时使用的jdk版本(在64位操作系统中同时运行64位eclipse和32位eclipse)
- iOS 9应用开发教程之定制应用程序图标以及真机测试