(一) 获得Class对象的四种方式

  • 第1种方法:Object.getClass()
  • 第2种方法:.class语法
  • 第3种方法:Class.forName()
  • 第4种方法:包装类的TYPE域
import java.util.Date;

public class Demo1 {

    public static void main(String[] args) throws ClassNotFoundException {

        // 第1种方法:Object.getClass()
Class c1 = new Date().getClass();// 使用getClass()方式获得Class对象
System.out.println(c1.getName());// 输出对象名称 // 第2种方法:.class语法
Class c2 = boolean.class;// 使用.class语法获得Class对象
System.out.println(c2.getName());// 输出对象名称 // 第3种方法:Class.forName()
Class c3 = Class.forName("java.lang.String");// 使用Class.forName()获得Class对象
System.out.println(c3.getName());// 输出对象名称 // 第4种方法:包装类的TYPE域
Class c4 = Double.TYPE;// 使用包装类获得Class对象
System.out.println(c4.getName());// 输出对象名称
} }

(二) 获取类对象的

  • 类的标准名称
  • 类的修饰符
  • 类的泛型参数
  • 类所实现的接口
  • 类的直接继承类
  • 类的注解
  • 类的构造方法
  • 类的非继承域变量
  • 类的非继承方法
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable; public class Demo2 { public static void main(String[] args) throws ClassNotFoundException { // 获得ArrayList类对象
Class<?> clazz = Class.forName("java.util.ArrayList"); // 类的标准名称
System.out.println("类的标准名称:" + clazz.getCanonicalName()); // 类的修饰符
System.out.println("类的修饰符:" + Modifier.toString(clazz.getModifiers())); // 输出类的泛型参数
System.out.print("类的泛型参数:");
TypeVariable<?>[] typeVariables = clazz.getTypeParameters();
if (typeVariables.length != 0) {
for (TypeVariable<?> typeVariable : typeVariables) {
System.out.println(typeVariable + "\t");
}
} else {
System.out.println("空");
} // 输出类所实现的所有接口
System.out.println("类所实现的接口:");
Type[] interfaces = clazz.getGenericInterfaces();
if (interfaces.length != 0) {
for (Type type : interfaces) {
System.out.println("\t" + type);
}
} else {
System.out.println("\t" + "空");
} // 输出类的直接继承类,如果是继承自Object则返回空
System.out.print("类的直接继承类:");
Type superClass = clazz.getGenericSuperclass();
if (superClass != null) {
System.out.println(superClass);
} else {
System.out.println("空");
} // 输出类的所有注释信息,有些注释信息是不能用反射获得的
System.out.print("类的注解:");
Annotation[] annotations = clazz.getAnnotations();
if (annotations.length != 0) {
for (Annotation annotation : annotations) {
System.out.println("\t" + annotation);
}
} else {
System.out.println("空");
} // 获得该类对象的所有构造方法
System.out.println("类的构造方法:");
Constructor<?>[] constructors = clazz.getConstructors();
if (constructors.length != 0) {
for (Constructor<?> constructor : constructors) {
System.out.println("\t" + constructor);// 输出构造方法
}
} else {
System.out.println("\t空");
} // 获得该类对象的所有非继承域
System.out.println("类的非继承域变量:");
Field[] fields = clazz.getDeclaredFields(); if (fields.length != 0) {
for (Field field : fields) {
System.out.println("\t" + field);// 输出非继承域
}
} else {
System.out.println("\t空");
} // 获得该类对象的所有非继承方法
System.out.println("类的非继承方法:");
Method[] methods = clazz.getDeclaredMethods();
if (methods.length != 0) {
for (Method method : methods) {
System.out.println(method);// 输出非继承方法
}
} else {
System.out.println("\t空");
}
} }

代码来源:明日科技[Java经典编程300例源代码]。

Class对象的更多相关文章

  1. 如何一步一步用DDD设计一个电商网站(九)—— 小心陷入值对象持久化的坑

    阅读目录 前言 场景1的思考 场景2的思考 避坑方式 实践 结语 一.前言 在上一篇中(如何一步一步用DDD设计一个电商网站(八)—— 会员价的集成),有一行注释的代码: public interfa ...

  2. javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

    Array 是javascript中经常用到的数据类型.javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据.本文主要讨论javascript中数组的声明.转换 ...

  3. 探究javascript对象和数组的异同,及函数变量缓存技巧

    javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...

  4. Asp.Net WebApi核心对象解析(下篇)

    在接着写Asp.Net WebApi核心对象解析(下篇)之前,还是一如既往的扯扯淡,元旦刚过,整个人还是处于晕的状态,一大早就来处理系统BUG,简直是坑爹(好在没让我元旦赶过来该BUG),队友挖的坑, ...

  5. JS核心系列:浅谈原型对象和原型链

    在Javascript中,万物皆对象,但对象也有区别,大致可以分为两类,即:普通对象(Object)和函数对象(Function). 一般而言,通过new Function产生的对象是函数对象,其他对 ...

  6. Chrome出了个小bug:论如何在Chrome下劫持原生只读对象

    Chrome出了个小bug:论如何在Chrome下劫持原生只读对象 概述 众所周知,虽然JavaScript是个很灵活的语言,浏览器里很多原生的方法都可以随意覆盖或者重写,比如alert.但是为了保证 ...

  7. XStream将java对象转换为xml时,对象字段中的下划线“_”,转换后变成了两个的解决办法

            在前几天的一个项目中,由于数据库字段的命名原因 其中有两项:一项叫做"市场价格"一项叫做"商店价格" 为了便于区分,遂分别将其命名为market ...

  8. ASP.NET内置对象的总结

    1. Response对象可形象的称之为响应对象,用于将数据从服务器发送回浏览器. 实例源码:链接: http://pan.baidu.com/s/1dDCKQ8x 密码: ihq0  2. Requ ...

  9. ADO.NET对象的详解

    1. Connection 类 和数据库交互,必须连接它.连接帮助指明数据库服务器.数据库名字.用户名.密码,和连接数据库所需要的其它参数.Connection对象会被Command对象使用,这样就能 ...

  10. 对Castle Windsor的Resolve方法的解析时new对象的探讨

    依赖注入框架Castle Windsor从容器里解析一个实例时(也就是调用Resolve方法),是通过调用待解析对象的构造函数new一个对象并返回,那么问题是:它是调用哪个构造函数呢? 无参的构造函数 ...

随机推荐

  1. poj 3579 Median (二分搜索之查找第k大的值)

    Description Given N numbers, X1, X2, ... , XN, let us calculate the difference of every pair of numb ...

  2. Android学习总结——欢迎页和导航页的实现

    activity_welcome.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayo ...

  3. jqGrid源代码分析(一)

    废话少说.先上grid.base.js 整体结构图 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3B5MTk4ODEyMDE=/font/5a6L5L2 ...

  4. iPhone图形开发绘图小结

    iPhone图形开发绘图教程是本文要介绍的内容,介绍了很多关于绘图类的使用,先来看详细内容讲解. 1.绘图总结: 绘图前设置: CGContextSetRGBFillColor/CGContextSe ...

  5. XML读写

    private string fileName = HttpContext.Current.Server.MapPath("~/Student.xml"); protected v ...

  6. Android系统,动态找出一个包下所有的类

    最近在写一个android应用,由于针对不同机型功能很不同,为了隔离变化,希望将各项功能插件化,通过编译开关来控制不同版本的功能,而不是在代码中通过逻辑来判断. 我想了一个办法,用表驱动的方法,结合插 ...

  7. sql 模糊查询带下划线的字段 _

    1.SELECT * FROM dbo.tb_Test 2.SELECT * FROM dbo.tb_Test WHERE name LIKE '%c_%' 3.SELECT * FROM dbo.t ...

  8. OAuth协议与第三方登录:(QQ,百度,微信,微博)

    OAuth 相当于授权的U盾,提供第三方认证的协议,是个安全相关的协议,作用在于,使用户授权第三方的应用程序访问用户的web资源,并且不需要向第三方应用程序透露自己的密码. 传统互联网:应用于PC端, ...

  9. LP64是什么意思

    在64位机器上,如果int是32位,long是64位,pointer也是64位,那么该机器就是LP64的,其中的L表示Long,P表示Pointer,64表示Long和Pointer都是64位的.由于 ...

  10. maven使用笔记一 下载json-lib引发的问题

    一.问题描述(IDEA中): 1,在pom.xml中配置了 <dependency> <groupId>net.sf.json-lib</groupId> < ...