Java RTTI初探
来源:互联网 发布:json的实际应用 编辑:程序博客网 时间:2024/06/05 12:25
RTTI: run-time type identification
import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;/* Class对象的生成方式如下: * 1) Class.forName("类名字符串") (注意:类名字符串必须是全称,包名+类名) * 2) 类名.class * 3) 实例对象.getClass() *//* * (节选自 http://blog.sina.com.cn/s/blog_4c1c2d43010007fx.html) * 每一个类都有一个Class对象,每当编译一个新类,就会产生一个Class对象(保存在一个同名的.class文件中) * 在运行时,当我们想生成这个类的对象时,运行这个程序的JVM首先检查这个类的Class对象是否已经加载, * 如果尚未加载,JVM就会根据类名查找.class文件,并将其载入, * 所以Java程序并不是一开始执行就被完全加载的,这一点与许多传统语言都不同的. * 一旦某个类的Class对象被载入内存,它就被用来创建这个类的所有对象 * */class MyClass { // 构造函数 MyClass() { System.out.println("MyClass--构造函数"); } public void myMethod() { System.out.println("MyClass--myMethod()"); } //静态成员初始化 static{ System.out.println("MyClass--静态成员初始化"); } //非静态成员初始化 { System.out.println("MyClass--非静态成员初始化"); } }public class HelloWorld { public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, NoSuchMethodException, SecurityException, IllegalArgumentException, InvocationTargetException { System.out.println(MyClass.class instanceof Class); // true System.out.println("--------------"); // 然而在打印这行分隔符时,class MyClass仍未进行静态成员初始化 // 说明此时class MyClass还未被完全加载进来 Class ClassMyClass = Class.forName("MyClass"); // 根据打印结果,class MyClass做了静态成员初始化 System.out.println("--------------"); System.out.println(ClassMyClass); System.out.println(ClassMyClass instanceof Class); // true System.out.println(ClassMyClass instanceof Object); // true System.out.println("--------------"); ClassMyClass.newInstance(); MyClass myClass = new MyClass(); // Method用法具体可参考 http://blog.csdn.net/cuiran/article/details/5302074 Method MethodmyMethod = ClassMyClass.getMethod("myMethod", null); MethodmyMethod.invoke(myClass, null); System.out.println("--------------"); //MyClass myClass = new MyClass(); // MyClass.class -- 即"类名.class" // myClass.getClass() -- 即"该类的一个对象.getClass()" // Class.forName("MyClass") -- 即"Class.forName(类名字符串)" // 返回的结果都是Class类(class Class)的对象 System.out.println(MyClass.class instanceof Class); // true System.out.println(myClass.getClass() instanceof Class); // true System.out.println(Class.forName("MyClass") instanceof Class); // true // 并且三者相等 System.out.println(myClass.getClass() == MyClass.class); // true System.out.println(Class.forName("MyClass") == MyClass.class); // true // 仅仅类名的话,啥也不是 //System.out.println(MyClass); System.out.println("quit"); }}
0 0
- Java RTTI初探
- Java RTTI
- java RTTI
- Java RTTI
- Java RTTI
- [Java] RTTI
- Java RTTI -- JAVA 进阶
- java RTTI应用
- Java语言基础:RTTI
- Java语言基础:RTTI
- java的RTTI
- Java RTTI机制
- Java向下转型(RTTI)
- Java进阶04 RTTI
- Java RTTI and Reflection
- Java的RTTI
- Java RTTI与反射
- java的RTTI机制
- bjfu 1008
- 在mac os安装CocoaPods(最详细教程)
- 中小型网站架构分析及优化
- Javascript 实现复制(Copy)动作方法大全
- 关于Java中的paint,repaint,update三个方法的关系
- Java RTTI初探
- CGRectInset、CGRectOffset、等对比整理
- android linux mirror website
- 用 WEKA 进行数据挖掘,第 2 部分: 分类和群集
- test
- [基础] - Python中 raw_input 和 input 的区别
- git的分支
- FileInputStream 读取txt文件内容
- linux ssh ip 超时,ssh 内网ip 和 外网ip的情况