Java获得Class对象的几种方式

1.类、枚举、接口、注解、数组类型、原生类型的名称.class

示例:

Class classString=String.class;//类
Class classEnum=RetentionPolicy.class;//枚举
Class classInterface=Serializable.class;//接口
Class classAnnotation=Retention.class;//注解
Class classInt=int.class;//原生类型
Class classIntArray=int[].class;//原生数组类型
Class classStringArray=String[].class;//数组类型

2.对象.getClass()

由于原生类型不是对象,所以无法使用getClass(),其他类型都是支持的。

示例

Class classString = new String().getClass();// 类
Class classEnum = RetentionPolicy.SOURCE.getClass();// 枚举
Class classInterface = new Serializable() {}.getClass();// 接口
Class classAnnotation = new Documented() {public Class<? extends Annotation> annotationType() {return null;}}.getClass();// 注解
// Class classInt=。。。;//原生类型不是对象,不能使用getClass()方法
Class classIntArray = new int[] {}.getClass();// 原生数组类型
Class classStringArray = new String[] {}.getClass();// 数组类型

3.使用Class.forName

Class.forName方法有两个:

1.forName(String name)

2.forName(String name, boolean initialize,ClassLoader loader)

forName(String name)其实调用的是forName(String name,boolean initialize,ClassLoader loader)

forName(className, true, ClassLoader.getCallerClassLoader());

boolean initialize参数很关键,如果为true,类会被初始化,静态变量会赋上初始值,静态代码块会被执行,如果为false则不会被初始化。

Class.forName仍然不支持原生类型,但其他类型都是支持的。

示例:

Class classString = Class.forName("java.lang.String");// 类
Class classEnum = Class.forName("java.lang.annotation.RetentionPolicy");// 枚举
Class classInterface = Class.forName("java.io.Serializable");// 接口
Class classAnnotation = Class.forName("java.lang.annotation.Documented");// 注解
// Class classInt=。。。;//原生类型不是对象,不能使用Class.forName方法
Class classIntArray = Class.forName("[I");// 原生数组类型
Class classStringArray =  Class.forName("[Ljava.lang.String;");// 数组类型

4.使用ClassLoader.loadClass

此方法也能加载类,效果同Class.forName(className, false, ClassLoader.getCallerClassLoader()),不会初始化类。

但ClassLoader.loadClass跟Class.forName相比,ClassLoader.loadClass不能对数组类型使用。

除了原生类型和数组类型,其他类型都是支持的。

示例:

Class classString = ClassLoader.getSystemClassLoader().loadClass("java.lang.String");// 类
Class classEnum =  ClassLoader.getSystemClassLoader().loadClass("java.lang.annotation.RetentionPolicy");// 枚举
Class classInterface =  ClassLoader.getSystemClassLoader().loadClass("java.io.Serializable");// 接口
Class classAnnotation =  ClassLoader.getSystemClassLoader().loadClass("java.lang.annotation.Documented");// 注解
//Class classInt=。。。;//原生类型不是对象,不能使用ClassLoader.loadClass方法
//Class classIntArray =  ClassLoader.getSystemClassLoader().loadClass("[I");// 数组类型不能使用ClassLoader.loadClass方法
//Class classStringArray =  ClassLoader.getSystemClassLoader().loadClass("[Ljava.lang.String;");// 数组类型不能使用ClassLoader.loadClass方法
时间: 2024-10-13 09:57:33

Java获得Class对象的几种方式的相关文章

Java遍历Map对象的四种方式

关于java中遍历map具体哪四种方式,请看下文详解吧. 方式一 这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. 1 Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 2 for (Map.Entry<Integer, Integer> entry : map.entrySet()) { 3 System.out.println("Key = " + e

java中产生对象的两种方式

/* * 普通new对象的过程! */ Person pp = new Person(); System.out.println(pp); /* * 利用代用参数的构造器产生对象实例! * 首先获得相应带参数的构造器,然后利用构造器产生对象实例! */ pclass = Class.forName("get_class_method.Person"); //getConstructor(Class... parameterTypes) //parameterTypes 参数是 Clas

Java反射机制(创建Class对象的三种方式)

1:SUN提供的反射机制的类: java.lang.Class<T> java.lang.reflect.Constructor<T> java.lang.reflect.Field java.lang.reflect.Method java.lang.reflect.Modifier 2:什么是反射 JAVA反射机制是在运行状态中,对于任意一个类.都能都知道这个类的所有属性和方法,对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称

Java反射获取class对象的三种方式,反射创建对象的两种方式

Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName 静态方法. 前提:已明确类的全路径名. 第二种,使用 .class 方法. 说明:仅适合在编译前就已经明确要操作的 Class 第三种,使用类对象的 getClass() 方法. 适合有对象示例的情况下 package com.reflection; /** * Created by Liuxd

Java文件上传的几种方式

文件上传与文件上传一样重要.在Java中,要实现文件上传,可以有两种方式: 1.通过Servlet类上传 2.通过Struts框架实现上传 这两种方式的根本还是通过Servlet进行IO流的操作. 一.通过Servlet类上传 1.编写Sevlet类 package com.chanshuyi.upload; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.

JavaScript学习12 JS中定义对象的几种方式

JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工厂方式 3.构造函数方式 4.原型("prototype")方式 5.动态原型方式 一.基于已有对象扩充其属性和方法 <script type="text/javascript"> var object = new Object(); object.name

反射概念:获取class文件对象的三种方式

反射 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 要想解剖一个类,必须先要获取到该类的字节码文件对象.而解剖使用的就是Class类中的方法.所以先要获取到每一个字节码文件对应的Class类型的对象. 利用class文件对象,去使用该文件中的成员变量,构造方法,成员方法. 例子1:获取class文件对象的三种方式 public cla

Intent传递对象的几种方式

原创文章,转载请注明 http://blog.csdn.net/leejizhou/article/details/51105060 李济洲的博客 Intent的用法相信你已经比较熟悉了,Intent可以用来启动Activity,Service等等,同时我们也可以通过Intent来进行传递数据,比如以下代码 Intent intent=new Intent(MainActivity.this,OtherActivity.class); intent.putExtra("name",&q

9.9-全栈Java笔记:遍历集合的N种方式总结&Collections工具类

遍历集合的N种方式总结 [示例1]遍历List方法1,使用普通for循环 for(int i=0;i<list.size();i++){         //list为集合的对象名 String temp = (String)list.get(i); System.out.println(temp); } [示例2]遍历List方法2,使用增强for循环(使用泛型定义类型!) for (String   temp : list) { System.out.println(temp); } [示例