gpt4 book ai didi

学习Java中Class类及其用法

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章学习Java中Class类及其用法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI。这项信息纪录了每个对象所属的类。虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类。Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建.

简单总结如下:

Class类也是类的一种,只是名字和class关键字高度相似。Java是大小写敏感的语言。 Class类的对象内容是你创建的类的类型信息,比如你创建一个shapes类,那么,Java会生成一个内容是shapes的Class类的对象 Class类的对象不能像普通类一样,以 new shapes() 的方式创建,它的对象只能由JVM创建,因为这个类没有public构造函数 Class类的作用是运行时提供或获得某个对象的类型信息,和C++中的typeid()函数类似。这些信息也可用于反射.

1.Class类原理 。

我们都知道所有的java类都是继承了object这个类,在object这个类中有一个方法:getclass().这个方法是用来取得该类已经被实例化了的对象的该类的引用,这个引用指向的是Class类的对象。我们自己无法生成一个Class对象(构造函数为private),而 这个Class类的对象是在当各类被调入时,由 Java 虚拟机自动创建 Class 对象,或通过类装载器中的 defineClass 方法生成。我们生成的对象都会有个字段记录该对象所属类在CLass类的对象的所在位置。如下图所示:

学习Java中Class类及其用法

2.获得一个Class类对象 。

第一种办法,Class类的forName函数 。

[codec class shapes{}   Class obj= Class.forName("shapes");[/code] 。

第二种办法,使用对象的getClass()函数 。

  。

复制代码代码如下:
class shapes{}
shapes s1=new shapes();
Class obj=s1.getClass();
Class obj1=s1.getSuperclass();//这个函数作用是获取shapes类的父类的类型

  。

  。

第三种办法,使用类字面常量 。

  。

复制代码代码如下:
obj=String.class;
Class obj1=int.class;

  。

注意,使用这种办法生成Class类对象时,不会使JVM自动加载该类(如String类)。而其他办法会使得JVM初始化该类.

3.使用Class类的对象来生成目标类的实例 。

生成不精确的object实例 。

获取一个Class类的对象后,可以用 newInstance() 函数来生成目标类的一个实例。然而,该函数并不能直接生成目标类的实例,只能生成object类的实例 。

  。

复制代码代码如下:
obj=Class.forName("shapes");
Object ShapesInstance=obj.newInstance();

  。

  。

使用泛化Class引用生成带类型的目标实例 。

  。

复制代码代码如下:
shapes> obj=shapes.class;
shapes newShape=obj.newInstance();

  。

因为有了类型限制,所以使用泛化Class语法的对象引用不能指向别的类.

  。

复制代码代码如下:
Class obj1=int.class;
Class<Integer> obj2=int.class;
obj1=double.class;
//obj2=double.class; 这一行代码是非法的,obj2不能改指向别的类了

  。

  。

然而,有个灵活的用法,使得你可以用Class的对象指向基类的任何子类.

  。

复制代码代码如下:
Class<? extends Number> obj=int.class;
obj=Number.class;
obj=double.class;

  。

  。

因此,以下语法生成的Class对象可以指向任何类.

  。

复制代码代码如下:
Class<?> obj=int.class;
obj=double.class;
obj=shapes.class;

  。

  。

最后一个奇怪的用法是,当你使用这种泛型语法来构建你手头有的一个Class类的对象的基类对象时,必须采用以下的特殊语法 。

  。

复制代码代码如下:
public class shapes{}
class round extends shapes{}
Class<round> rclass=round.class;
Class<? super round> sclass= rclass.getSuperClass();
//Class<shapes> sclass=rclass.getSuperClass();

  。

  。

我们明知道,round的基类就是shapes,但是却不能直接声明 Class < shapes >,必须使用特殊语法 。

Class < ? super round > 。

以上就是本文的全部内容,希望对大家的学习有所帮助.

最后此篇关于学习Java中Class类及其用法的文章就讲到这里了,如果你想了解更多关于学习Java中Class类及其用法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com