(一) 获得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. phpcms 去掉默认自动获取关键词、自动提取第一张图片?

    进入后台,内容--模型管理--管理模型,选择文章模型的字段管理,选择第13项内容--修改,然后把字段提示代码中的2个checked去掉就行了. <label><input name= ...

  2. Unity 屏幕适配小脚本

    屏幕适配是可以通过代码实现的,相信给你时间就一定能写出来. 我们公司貌似没有分辨率适配框架通常对应小屏幕的苹果4要额外设置下等等就完了! 屏幕适配框架实现思路:  通过代码获取当前的分辨率 –> ...

  3. freemarker报错之三

    1.错误描写叙述 Expression students is undefined on line 30, column 24 in student.ftl. The problematic inst ...

  4. 文件atime未变问题的研究

    1. atime, ctime 以及mtime 这三个名词属于文件/文件夹的属性,存在于inode数据结构之中. 通过系统调用stat可以获取stat结构,其中包括:atime(accesstime) ...

  5. Linux文件权限管理

    一.设置文件所属的用户以及所属的组(chown,chgrp) chgrp用来更改文件的组拥有者,其一般格式为:chgrp [option] group file(1)把文件test的组拥有者改为zfs ...

  6. NET基础课--Linq第二讲

    这一讲,来说说集合.因为linq主要用于对数据源进行查询,集合是最常见的数据源. 集合 形式: 数组,列表List<T> Arraylist等. 特点: 可通过索引或键访问.可进行fore ...

  7. SQL常用分页

    top式 string sqltext = string.Format(" SELECT TOP {0} * FROM '表' WHERE ('字段' NOT IN (SELECT TOP ...

  8. easyui-window

    <div id="win" class="easyui-window" title="My Window" style="w ...

  9. Android Studio ---------------- 软件使用小细节(更新中。。。。。。)

    ###鼠标放到相关类或方法等上,没有提示. *解决方法:File----Setting-----Editor-----General------Show quik documentation on m ...

  10. iOS——protoco和delegate (事件代理)

    一:被代理人personOne personOne.h #import <Foundation/Foundation.h> @protocol SomeThing<NSObject& ...