菜鸟的Java学习笔记(1)-- RTTI
来源:互联网 发布:为什么要用json 编辑:程序博客网 时间:2024/05/16 13:43
RTTI-- runtime type identification
import java.lang.*;
class TestRTTI
...{
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException
...{
//测试类型的加载
new Cls1();
System.out.println("After Create Cls1");
try
...{
//第一次加载时执行static代码段 输出"Cls2"
//若找不到名为Cls2的类则抛出ClassNotFoundException
Class.forName("Cls2");
System.out.println("Inside Try");
}
catch (ClassNotFoundException e)
...{
System.out.println("Can't find Cls2");
}
new Cls2();
System.out.println("After Create Cls2");
//测试通过反射创建对象
if(args.length == 1)
...{
Object obj = Class.forName(args[0]).newInstance();
}
//显示任意对象的类层次
Cls3 obj = new Cls3();
showHierarchy(obj);
//测试静态成员是否能被继承
//结果:无编译错误,可以被继承 且可以被实例对象调用 C#只能由类对象调用
System.out.println(obj.flag);
}
/** *//**显示对象的类层次
*@author Jimmy
*@param Object with any type
×@return No return value
*/
public static void showHierarchy(Object obj)
...{
Class cls = obj.getClass();
System.out.println(cls.getName());
while(cls.getName() != "java.lang.Object")
...{
cls = cls.getSuperclass();
System.out.println(cls.getName());
}
}
}
class Cls1
...{
static
...{
System.out.println("Cls1");
}
}
class Cls2
...{
public static int flag = 1;
static
...{
System.out.println("Cls2");
}
}
class Cls3 extends Cls2
...{
public int tag;
}
class TestRTTI
...{
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException
...{
//测试类型的加载
new Cls1();
System.out.println("After Create Cls1");
try
...{
//第一次加载时执行static代码段 输出"Cls2"
//若找不到名为Cls2的类则抛出ClassNotFoundException
Class.forName("Cls2");
System.out.println("Inside Try");
}
catch (ClassNotFoundException e)
...{
System.out.println("Can't find Cls2");
}
new Cls2();
System.out.println("After Create Cls2");
//测试通过反射创建对象
if(args.length == 1)
...{
Object obj = Class.forName(args[0]).newInstance();
}
//显示任意对象的类层次
Cls3 obj = new Cls3();
showHierarchy(obj);
//测试静态成员是否能被继承
//结果:无编译错误,可以被继承 且可以被实例对象调用 C#只能由类对象调用
System.out.println(obj.flag);
}
/** *//**显示对象的类层次
*@author Jimmy
*@param Object with any type
×@return No return value
*/
public static void showHierarchy(Object obj)
...{
Class cls = obj.getClass();
System.out.println(cls.getName());
while(cls.getName() != "java.lang.Object")
...{
cls = cls.getSuperclass();
System.out.println(cls.getName());
}
}
}
class Cls1
...{
static
...{
System.out.println("Cls1");
}
}
class Cls2
...{
public static int flag = 1;
static
...{
System.out.println("Cls2");
}
}
class Cls3 extends Cls2
...{
public int tag;
}
Class.getDeclaredFields() 函数应用
/** *//**显示类型对象的成员信息
*@author jimmy
*@param 类型对象
*@return void
*/
public static void showFields(Class cls)
...{
Field[] fields = cls.getDeclaredFields();
for(int i = 0; i < fields.length; i++)
...{
System.out.println(fields[i].getName());
}
}
//被测试类型 Cls2同前面代码段
class Cls3 extends Cls2
...{
public int tag;
public static int stag;
public Cls3()
...{
}
public static void sshow()
...{
}
public void show()
...{
}
}
//调用代码
//尝试Class类中getDeclaredFields函数
System.out.println("测试getDeclaredFields函数");
showFields(Cls3.class);
*@author jimmy
*@param 类型对象
*@return void
*/
public static void showFields(Class cls)
...{
Field[] fields = cls.getDeclaredFields();
for(int i = 0; i < fields.length; i++)
...{
System.out.println(fields[i].getName());
}
}
//被测试类型 Cls2同前面代码段
class Cls3 extends Cls2
...{
public int tag;
public static int stag;
public Cls3()
...{
}
public static void sshow()
...{
}
public void show()
...{
}
}
//调用代码
//尝试Class类中getDeclaredFields函数
System.out.println("测试getDeclaredFields函数");
showFields(Cls3.class);
结果显示:
tag
stag
ps:可通过Cls3.class可获取该标识符对应的类型对象
- 菜鸟的Java学习笔记(1)-- RTTI
- RTTI关于dynamic_cast的学习笔记(1)
- 菜鸟的Oracle学习笔记(1)
- 菜鸟Java 学习笔记
- 超级菜鸟的java学习笔记(一)
- 超级菜鸟的JAVA学习笔记(二)
- MFC rtti 学习笔记
- RTTI学习笔记
- RTTI学习笔记
- java RTTI笔记整理
- 菜鸟的学习笔记
- 菜鸟学习笔记之java
- 菜鸟学习java并发笔记
- 菜鸟的C学习笔记(1) 呵呵
- 一个菜鸟的QT学习笔记(1)
- 菜鸟的Dojo学习笔记1
- [Javascript]菜鸟的Dojo学习笔记1
- Java菜鸟的学习
- 使用 Shell 第五篇
- LINQ首部曲: LINQ To Object Part 2 - Using VB.NET
- 台湾网友YST强文:中国大陆2008年的灾难 (中国的崛起是每个炎黄子孙的向往)
- 做一个弱者,站在巨人肩上。
- 监控和剖析数据库操作P6Spy,SQL Profiler,SQL 使用简介
- 菜鸟的Java学习笔记(1)-- RTTI
- Linux系统新手学习的11点建议
- 今天又败了两样东西
- JAVA容器小结
- [THINKING IN C++]CHAPTER 03:EXERCISE 01
- 用dbus-send查看当前system bus或者session bus上面挂载了多少service.
- 安装SQL Server 遇到错误提示:以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机!。
- [THINKING IN C++]CHAPTER 03:EXERCISE 03
- 搜索中心对称的最大子矩阵