Java反射机制——Class类的介绍(二)
来源:互联网 发布:jquery能储存数据不 编辑:程序博客网 时间:2024/06/05 10:16
一、Class类简单介绍
Class类的实例表示Java应用运行时的类(class and enum)或接口(interface and annotation)。
(每个java类运行时都在JVM里表现为一个class对象,可通过类名.class,类型.getClass(),
Class.forName("类名")等方法获取class对象)。数组同样也被映射为为class 对象的一个类,
所有具有相同元素类型和维数的数组都共享该 Class 对象。基本类型boolean,byte,char,short,
int,long,float,double和关键字void同样表现为 class 对象。
二、Class类的特征
Class
没有公共构造方法。Class
对象是在加载类时由 Java 虚拟机以及通过调用类加载器中
的defineClass
方法自动构造的以下示例使用Class
对象来显示对象的类名:
void printClassName(Object obj) { System.out.println("The class of " + obj + " is " + obj.getClass().getName()); }
还可以使用一个类字面值(JLS Section 15.8.2)来获取指定类型(或 void)的 Class
对象。例如:
System.out.println("The name of class Foo is: "+Foo.class.getName());
三、Class类主要方法重要的几个方法:
1、public static Class<?> forName(String className):natice 方法,动态加载类。非常重要。
如在sql中动态加载驱动程序:class.forName(sqlDriver);
2、public T newInstance() :根据对象的class新建一个对象,用于反射。非常重要。
可用在反射中构建对象,调用对象方法:
class doubleClass= class.forName("java.lang.Double");
Object objDouble = doubleClass.newInstance();
如在javaBean中就应用了这个方法,因为java默认要有一个无参构造函数。
3、 public ClassLoader getClassLoader():获得类的类加载器Bootstrap ,Extension ,System or user custom ClassLoader(一般为system classloader)。重要。
4、public String getName():获取类或接口的名字。记住enum为类,annotation为接口。重要
5、public native Class getSuperclass():获取类的父类,继承了父类则返回父类,否则返回java.lang.Object。返回Object的父类为空-null。
6、public java.NET.URL getResource(String name) :根据字符串获得资源。
7、其他类
public boolean isEnum() :判断是否为枚举类型。
public native boolean isArray() :判断是否为数组类型。
public native boolean isPrimitive() :判断是否为基本类型。
public boolean isAnnotation() :判断是否为注解类型。
public Package getPackage() :反射中获得package,如java.lang.Object 的package为java.lang。
public native int getModifiers() : 反射中获得修饰符,如public static void等 。
public Field getField(String name):反射中获得域成员。
public Field[] getFields() :获得域数组成员。
public Method[] getMethods() :获得方法。
public Method getDeclaredMethod(String name, Class<?>... parameterTypes):加个Declared代表本类,继承,父类均不包括。
public Constructor<?>[] getConstructors() :获得所有的构造函数。
如此我们可以知道反射可以运行时动态获得类的所有信息,并新建对象(newInstance()方法)。
四、有关Class类需要注意几点- Class类也是类的一种,只是名字和class关键字高度相似。Java是大小写敏感的语言。
- Class类的对象内容是你创建的类的类型信息,比如你创建一个Student类,那么,Java会生成一个内容是Student的Class类的对象。
- Class类的对象不能像普通类一样,以 new Student() 的方式创建,它的对象只能由JVM创建,因为这个类没有public构造函数
Class类的作用是运行时提供或获得某个对象的类型信息,和C++中的typeid()函数类似。这些信息也可用于反射。
(1)、使用Class类forName()方法
public class Student{} Class obj= Class.forName("Student"); //这里也可以使用包名加上类名组成的字符串创建Class类对象
(2)、使用对象的getClass()方法public class Student{}Student s=new Student();Class obj=s.getClass();Class obj1=s.getSuperclass(); //这个函数作用是获取Student类的父类的类型
(3)、使用类的字面变量
Class obj=String.class; //得到String类的运行时的Class对象Class obj1=int.class;//得到int类型的运行时的Class对象
注意:使用这种办法生成Class类对象时,不会使JVM自动加载该类(如String类)。而其他办法会使得JVM初始化该类。
- Java反射机制——Class类的介绍(二)
- java反射机制剖析(二)— Class Loader
- java反射机制剖析(二)— Class Loader
- Java反射机制——反射的介绍(一)
- Java反射机制—class类
- Java反射机制—class类
- JAVA反射机制——Class 类的使用
- java反射机制剖析(三)—类类型Class
- Java反射基础(二)— Class类
- java反射机制与调用&&Class的介绍
- 认识class类 JAVA的反射机制
- JAVA反射机制-class类的获取
- 16---java反射机制00(Class类的理解)
- java反射机制剖析— Class Loader
- java进阶(二):反射的基础——Class类
- Java反射机制-class类
- Java反射机制--Class类
- Java反射机制-Class类
- WampServer自己DIY添加apache、php、mysql版本
- android studio- Gridview学习实践
- RabbitMQ的Java应用(1) -- Rabbit Java Client使用
- 关于EJB异步调用遇到的问题解决
- phpstrom 软件内运行php文件 phpstrom 中 run 的使用
- Java反射机制——Class类的介绍(二)
- iOS 用AFN与后台双向https证书验证
- libjpeg使用
- C#的Enum——枚举
- JAVA并发容器代码随读
- VS2013+opencv2.4.9+cuda6.5+matlabr2014a+配置caffe
- 解决用jquery load加载页面到div时,不执行页面js的问题
- Android studio报:Caused by: java.lang.ClassNotFoundException: Didn't find class "xhs.com.view.ParentV
- Java 获取绝对路径与相对路径