Class类和Class实例
来源:互联网 发布:预付款融资模式优化 编辑:程序博客网 时间:2024/04/29 18:47
Class类和Class实例
张三、李四两个对象
class Person{
//张三、李四共同的具备的行为(方法)和状态(字段)
}
Person就是张三、李四这两个对象的类型,即是张三李四两个对象的描述
一切皆对象,那么person、Date、String...又是什么类型呢?--Class,即都是Class类的对象,都由Class类来描述
Class的实例是什么?--就应该是类或接口【更严格的说是java中的字节码(类或接口编译后生成的.class文件)】
Class类:用于描述一切类或接口
Class实例:就是JVM中的一份字节码(一个类或接口) (枚举是一种类、注解是一种接口)
问题:那Class实例到底表示的是哪一份字节码(或者哪一个类或接口)?
Class clz1=Date.class;
Class clz2=String.class;
为了明确区分出Class实例表示的是谁的字节码,Class类提供了泛型!!
上面两个示例中,是省略了泛型的写法------第一个示例的clz1表示的是Date的字节码,Date.class的类型就是Class<Date>;第二个示例的clz2表示的是String的字节码,String.class的类型就是:Class<String>
(上面的写法会出现编译警告)
在实例化时无法确定所表示的字节码类型时通常使用通配符?或者T,上面的两个示例可以写为下面的方式:
Class<Date> clz1=Date.class;//不会出现编译警告
Class<String> clz2=String.class;
或者使用通配符:Class<?> clz1=Date.class;//不会出现编译警告
Class<?> clz2=String.class;
public void demo(Class<?> clazz);
泛型通配符?(或者T):表示的是当前所表示的字节码类型-----?是在实例化时无法确定所表示的字节码类型时使用的,通配所有类型
Class类中没有字段、显示构造器
如何得到Class的实例?------有三种方式
1、数据类型.class-------就是一个字节码
2、静态方法forName(String className);----Class.forName(String className);-----根据一个类的全限定名来构建Class对象,该方法会抛出ClassNotFoundException异常---注意必须是全限定名才能获得对应实例
3、对象.getClass();----------每个对象都有该方法,因此该方法定义在Object类中----返回的是该对象的真实类型,即运行时类型
Object obj=new Date();
Obj的编译是类型Object
obj.toLocalString();//toLocalString是Date类的方法,代码在编译阶段去编译类型Object中检查是否有该方法,如没有,编译失败;–这条语句会在编译阶段报错
反射可以解决:
Class clz=obj.getClass();//等价于Class<Date> clz=obj.getClass(); 通常写法:Class<?> clz=obj.getClass();--------此时的?表示的时obj的运行时类型,即Date类型
clz.toLocalString();//正确
一个类或接口在Java虚拟机(JVM)中,有且只有一份字节码
- Class类和Class实例
- 反射:Class类Class实例
- 实例化Class类对象
- Java中的Class类和Class对象
- Class<T>和Class<?>
- Class.forName 和 .class
- 类方法(class method)和实例方法(instance method)
- 类方法(class method)和实例方法(instance method)区别
- 实例方法(instance method) 和 类方法(class method)
- Class类和反射
- Class类和反射
- getClass() 和类.class
- class类和对象
- Class类和反射
- 对象和实例 Object 与 Class
- 【Class】Java中类、实例与Class对象
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- YARN/MRv2 MRAppMaster深入剖析—整体架构
- DEVICE_ATTR的使用
- 用morphologyEx进行图像膨胀
- 二叉排序树
- 进程创建函数fork和vfork的区别
- Class类和Class实例
- 用morphologyEx进行图像腐蚀
- 11.24
- javaoop--io操作
- redis基本数据类型
- javascript基础4-对象2
- YII安装
- Swift-Sort排序函数
- 用morphologyEx进行图像形态学开运算用法示例