Java中 Class类总结
来源:互联网 发布:程序员必备 编辑:程序博客网 时间:2024/06/11 02:15
1 Java 中获取Class对象的方法
分类: Java
Class object 诞生管道
示例
运用getClass()
注:每个class 都有此函数
String str = "abc";
Class c1 = str.getClass();
运用
Class.getSuperclass()2
Button b = new Button();
Class c1 = b.getClass();
Class c2 = c1.getSuperclass();
运用static method
Class.forName()
(最常被使用)
Class c1 = Class.forName ("java.lang.String");
Class c2 = Class.forName ("java.awt.Button");
Class c3 = Class.forName ("java.util.LinkedList$Entry");
Class c4 = Class.forName ("I");
Class c5 = Class.forName ("[I");
运用
.class 语法
Class c1 = String.class;
Class c2 = java.awt.Button.class;
Class c3 = Main.InnerClass.class;
Class c4 = int.class;
Class c5 = int[].class;
运用
primitive wrapper classes
的TYPE 语法
Class c1 = Boolean.TYPE;
Class c2 = Byte.TYPE;
Class c3 = Character.TYPE;
Class c4 = Short.TYPE;
Class c5 = Integer.TYPE;
Class c6 = Long.TYPE;
Class c7 = Float.TYPE;
Class c8 = Double.TYPE;
Class c9 = Void.TYPE;
2 Class 类的简单介绍
在java的帮助文档中,java.lang包中有一个Class类,注意这里的"C“是大写,所以这个不是表示类的声明,而是一个真正的类。在java的帮助文档中,这样定义的Class类:
public final class Class<T>extends Objectimplements Serializable, GenericDeclaration, Type, AnnotatedElement
Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该Class 对象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和double)和关键字 void 也表示为 Class 对象。 Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的defineClass 方法自动构造的。
在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象,用于表示这个类的类型信息。Class类不是我们认为创建的,是由java虚拟机,在我们生成.class文件的时候创建的,我们可以通过几种方法,获得这个Class类实例。下面介绍一下这几种方法:
(1)利用对象调用getClass()方法获取该对象的Class实例;
(2)使用Class类的静态方法forName(),用类的名字获取一个Class实例;
(3)运用.class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的Class实例。下面的是一个实例
class Point{}
Point pt=new Point();
Class c1=pt.getClass();
System.out.println(c1.getName());
try {//forName会抛出一个异常所以需要捕获
Class c2=Class.forName("Point");
System.out.println(c2.getName());
}
catch(Exception e){
e.printStackTrace();
}
Class c3=Point.class;
System.out.println(c3.getName());
Class c4=int.class;
System.out.println(c4.getName());
Class c5=Integer.TYPE;
System.out.println(c5.getName());
Class c6=Integer.class;
System.out.println(c6.getName());
//Point
//Point
//Point
//int
//int
在运行期间,如果我们要产生某个类的对象,Java虚拟机(JVM)会检查该类型的Class对象是否已被加载。如果没有被加载,JVM会根据类的名称找到.class文件并加载它。一旦某个类型的Class对象已被加载到内存,就可以用它来产生该类型的所有对象。换句话说java中的.class文件并不是所有的都会被加载到内存,只有在需要的时候才会进行加载。
Class类有一方法newInstance(),可以在不知道类的名字的情况下创建一个对象。使用newInstance()的方法的时候,应该注意这个方法默认调用的是不带参数的构造方法。如果只是去创建一个一个不带参数的构造方法,那么这个方法的用处就不大了,如果我们想要调用带参数的构造方法,这里我们就需要使用到反色API。对于反色API的介绍,查看我先前转载的一篇文章(http://blog.csdn.net/mengxiangyue/article/details/6825923)。有时候我们会收到一个通过网络发来的一个类,我们需要创建一个对象,但是对于这个类是怎么实现的,我们都不知道。这里我们就可以使用反色API加上Class类的newInstance(),在不知道类的情况下,创建一个对象。对于这个Class的用处目前就知道这么多,如果还有什么,希望有大侠指点。
public final class Class<T>extends Objectimplements Serializable, GenericDeclaration, Type, AnnotatedElement
Class 类的实例表示正在运行的 Java 应用程序中的类和接口。枚举是一种类,注释是一种接口。每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该Class 对象。基本的 Java 类型(boolean、byte、char、short、int、long、float 和double)和关键字 void 也表示为 Class 对象。 Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的defineClass 方法自动构造的。
在Java中,每个class都有一个相应的Class对象。也就是说,当我们编写一个类,编译完成后,在生成的.class文件中,就会产生一个Class对象,用于表示这个类的类型信息。Class类不是我们认为创建的,是由java虚拟机,在我们生成.class文件的时候创建的,我们可以通过几种方法,获得这个Class类实例。下面介绍一下这几种方法:
(1)利用对象调用getClass()方法获取该对象的Class实例;
(2)使用Class类的静态方法forName(),用类的名字获取一个Class实例;
(3)运用.class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的Class实例。下面的是一个实例
class Point{}
Point pt=new Point();
Class c1=pt.getClass();
System.out.println(c1.getName());
try {//forName会抛出一个异常所以需要捕获
Class c2=Class.forName("Point");
System.out.println(c2.getName());
}
catch(Exception e){
e.printStackTrace();
}
Class c3=Point.class;
System.out.println(c3.getName());
Class c4=int.class;
System.out.println(c4.getName());
Class c5=Integer.TYPE;
System.out.println(c5.getName());
Class c6=Integer.class;
System.out.println(c6.getName());
//Point
//Point
//Point
//int
//int
在运行期间,如果我们要产生某个类的对象,Java虚拟机(JVM)会检查该类型的Class对象是否已被加载。如果没有被加载,JVM会根据类的名称找到.class文件并加载它。一旦某个类型的Class对象已被加载到内存,就可以用它来产生该类型的所有对象。换句话说java中的.class文件并不是所有的都会被加载到内存,只有在需要的时候才会进行加载。
Class类有一方法newInstance(),可以在不知道类的名字的情况下创建一个对象。使用newInstance()的方法的时候,应该注意这个方法默认调用的是不带参数的构造方法。如果只是去创建一个一个不带参数的构造方法,那么这个方法的用处就不大了,如果我们想要调用带参数的构造方法,这里我们就需要使用到反色API。对于反色API的介绍,查看我先前转载的一篇文章(http://blog.csdn.net/mengxiangyue/article/details/6825923)。有时候我们会收到一个通过网络发来的一个类,我们需要创建一个对象,但是对于这个类是怎么实现的,我们都不知道。这里我们就可以使用反色API加上Class类的newInstance(),在不知道类的情况下,创建一个对象。对于这个Class的用处目前就知道这么多,如果还有什么,希望有大侠指点。
1 0
- Java中 Class类总结
- Java中Class类与反射机制的用法总结
- Java中Class类与反射机制的用法总结
- Java中Class类
- java中class类
- java 中 class类作用
- 认识Java 中 class 类
- Java中Class类浅谈
- Java中Class类简介
- JAVA之Class类与反射总结
- Java Class类的一些总结
- Java反射机制总结学习--Class类
- JAVA中路径问题总结Class.getResourceAsStream() & ClassLoader的getR...
- Class(java.lang.Class)类中成员函数的区别
- 【Class】Java中类、实例与Class对象
- Java中Class类的学习
- java中Class类的使用
- java中动态加载类 Class.forName
- Socket编程中的强制关闭与优雅关闭及相关socket选项
- 日拱一卒(四十七)
- 集体智慧编程chapter 2提供推荐<寻找相似性的用户>
- 日常-4-18-2015
- 蛇形填数
- Java中 Class类总结
- poj1083
- 数据库上级作业3
- VC线程Thread和事件Event
- 学习笔记之数据结构篇-01顺序表
- 无限滚动 UICollectionView
- JQuery easyui datagrid 单元格编辑时,使用浮动的textarea文本框并进行数据校验
- throw、try块和异常处理总结
- hdu 5208 Where is Bob (数位dp,k进制树合并)