Class对象

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

  • 第1种方法:Object.getClass()
  • 第2种方法:.class语法
  • 第3种方法:Class.forName()
  • 第4种方法:包装类的TYPE域
package com.test;

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());// 输出对象名称
    }

}

(二) 获取类对象的

  • 类的标准名称
  • 类的修饰符
  • 类的泛型参数
  • 类所实现的接口
  • 类的直接继承类
  • 类的注解
  • 类的构造方法
  • 类的非继承域变量
  • 类的非继承方法
package com.test;

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例源代码]。

时间: 2024-10-01 14:22:32

Class对象的相关文章

通过jQuery Ajax使用FormData对象上传文件

转自:http://www.cnblogs.com/labnizejuly/p/5588444.html FormData对象,是可以使用一系列的键值对来模拟一个完整的表单,然后使用XMLHttpRequest发送这个"表单". <form id="uploadForm" enctype="multipart/form-data"> <input id="file" type="file"

对象序列化和反序列--Hibernate的查询和新增极其相似

Hibernate几个关键字持久化,ORM(关系对象映射)(数据库中关系称作是一张表) 应用在项目中,刘一从写的查询代码,每次都挂掉,想要弄出测试数据,自己想着把查询出来的复杂数据弄到文件里自己要是去造那些复杂数据很麻烦public class Object1 { public static void main(String args[]){ HashMap<String, Object> obj=new HashMap<String,Object>(); obj.put(&quo

C#中XML与对象之间的序列化、反序列化

using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Xml.Utility { public static class XmlUtil { /// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列化

菜鸟学python之对象类型及运算

Python 中的变量不需要声明.每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建. 在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型. 等号(=)用来给变量赋值. 1 变量赋值 1.1 单个变量赋值 >>> name="python" >>> print(name) python 1.2 多个变量赋值 >>> name=names="python&

java 类对象使用

在学习反射机制时,总结一下获得类对象方式: 第一种方式:通过类本身来获得对象 Class<?> classname = this.getClass(); 或者this.class 第二种方式:通过子类的实例获取父类对象 ClassName cn = new ClassName(); UserClass = cn.getClass(); Class<?> SubUserClass = UserClass.getSuperclass(); 第三种方式:通过类名加.class获取对象 C

dbutils封装对象,单列,一行一列(用)

基本用法:查找并封装对象与对象集合 public User findUserByNamePassword(String name,String password){ QueryRunner runner = new QueryRunner(DataSourceUtils.getDataSource()); String sql = "select * from user where name='"+name+"' and password = '"+password

Class类 获取Class对象

阅读API的Class类得知,Class 没有公共构造方法.Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的 获取Class对象的三种方式(实例采用Person类) 方式1:通过Object类的getObject()方法 Person p = new Person(); Class c = p.getClass(); 方式2: 通过 类名.class 获取到字节码文件对象(任意数据类型都具备一个class静态属性,看上去要比第一种方

Linux共享对象之编译参数fPIC(转)

最近在看Linux编程的基础知识,打算对一些比较有趣的知识做一些汇总备忘,本文围绕fPIC展开,学习参考见文末. 在Linux系统中,动态链接文件称为动态共享对象(DSO,Dynamic Shared Objects),简称共享对象,一般是以.so为扩展名的文件.在Windows系统中,则称为动态链接库(Dynamic Linking Library),很多以.dll为扩展名.这里只备忘Linux的共享对象. 在实现一共享对象时,最一般的编译链接命令行为: g++ -fPIC -shared t

JavaScript 对象

JavaScript 中的所有事物都是对象:字符串.数值.数组.函数... 此外,JavaScript 允许自定义对象. JavaScript 对象 JavaScript 提供多个内建对象,比如 String.Date.Array 等等. 对象只是带有属性和方法的特殊数据类型. 建 JavaScript 对象 通过 JavaScript,您能够定义并创建自己的对象. 创建新对象有两种不同的方法: 定义并创建对象的实例 使用函数来定义对象,然后创建新的对象实例

hibernate载入持久化对象的两种方式——get、load

一.get与load对照 在hibernate中get和load方法是依据id取得持久化对象的两种方法.但在实际使用的过程中总会把两者混淆,不知道什么情况下使用get好,什么时候使用load方法效率更高.下边具体说一下get和load的不同,有些时候为了对照也会把find加进来. 1.从返回结果上对照: load方式检索不到的话会抛出org.hibernate.ObjectNotFoundException异常 get方法检索不到的话会返回null 2.从检索运行机制上对照: get方法和fin