ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

class类

2021-12-12 22:04:04  阅读:150  来源: 互联网

标签:Class obj 对象 生成 shapes class


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类的对象的所在位置。如下图所示:

2.获得一个Class类对象

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

  1.   public class shapes{}
  2.   Class obj= Class.forName("shapes");

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

  1.   public class shapes{}
  2.   shapes s1=new shapes();
  3.   Class obj=s1.getClass();
  4.   Class obj1=s1.getSuperclass();//这个函数作用是获取shapes类的父类的类型

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

  1.   Class obj=String.class;
  2.   Class obj1=int.class;

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

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

生成不精确的object实例

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

  1.   Class obj=Class.forName("shapes");
  2.   Object ShapesInstance=obj.newInstance();

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

  1.   Class<shapes> obj=shapes.class;
  2.   shapes newShape=obj.newInstance();

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

  1.   Class obj1=int.class;
  2.   Class<Integer> obj2=int.class;
  3.   obj1=double.class;
  4.   //obj2=double.class; 这一行代码是非法的,obj2不能改指向别的类了

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

  1.   Class<? extends Number> obj=int.class;
  2.   obj=Number.class;
  3.   obj=double.class;

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

  1.   Class<?> obj=int.class;
  2.   obj=double.class;
  3.   obj=shapes.class;

最后一个奇怪的用法是,当你使用这种泛型

标签:Class,obj,对象,生成,shapes,class
来源: https://www.cnblogs.com/2213953937abc/p/15680738.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有