java 类型信息

Posted 飞龙dragon

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 类型信息相关的知识,希望对你有一定的参考价值。

本章主要学习如何让我么在运行时识别对象和类的信息的.主要有两种方式:一种是传统的RTTI它假定我们在编译时已经知道了所有的类型. 另一种是反射机制它允许我们在运行时发现和使用类的信息.

一.为什么需要RTTI(Run-Time Type Information)

 1. RTTI :在运行时识别一个对象的类型

2.反射   允许在运行时发现和使用类型信息

3.传统的RTTI 在编译期通过Class文件识别类型信息,反射在运行期通过Class文件识别类型信息。

4.Java类型转换都发生在运行时期。

 

二.Class对象

        Class对象是用来创建类的所有的"常规"对象的.java使用Class对象来执行其RTTI即使你正在执行的是转型这样的操作.

  1. 每个类都有Class对象,即编译了一个新类就会产生一个该类的Class对象,并且保存在.class文件中。Class对象就是用来产生“常规”对象的。
  2. Java使用Class对象来执行RTTI。
  3. 所有类都是第一次使用时动态加载到jvm中。 动态加载就是需要时再加载不使用不加载。
  4. 只要创建了对一个类的静态成员的引用就会加载该类。new 的时候加载类说明 类的构造器虽然没写static但也是静态方法。

一旦某个类的Class对象载入内存后,他就会用来创建该类的对象。

package test;

class Candy {
static { System.out.println("Loading Candy"); }
}

class Gum {
static { System.out.println("Loading Gum"); }
}

class Cookie {
static { System.out.println("Loading Cookie"); }
}

public class SweetShop {
public static void main(String[] args) {    
 System.out.println("inside main");
 new Candy();
 System.out.println("After creating Candy");
 try {
   Class.forName("Gum");//返回的是一个Class对象的引用如果获取失败会抛出异常 ClassNotFoundException
 } catch(ClassNotFoundException e) {
   System.out.println("Couldn‘t find Gum");
 }
 System.out.println("After Class.forName("Gum")");
 new Cookie();
 System.out.println("After creating Cookie");
}
} /* Output:
inside main
Loading Candy
After creating Candy
Loading Gum
After Class.forName("Gum")
Loading Cookie
After creating Cookie
*///:~
/* 注意新版本jdk和作者的结果不一样
 * inside main
Loading Candy
After creating Candy
Couldn‘t find Gum
After Class.forName("Gum")
Loading Cookie
After creating Cookie
*///~
 */

 

以上是关于java 类型信息的主要内容,如果未能解决你的问题,请参考以下文章

《java精品毕设》基于javaweb宠物领养平台管理系统(源码+毕设论文+sql):主要实现:个人中心,信息修改,填写领养信息,交流论坛,新闻,寄养信息,公告,宠物领养信息,我的寄养信息等(代码片段

VSCode创建自定义用户片段

部分代码片段

错误记录Android Studio 编译报错 ( Could not determine java version from ‘11.0.8‘. | Android Studio 降级 )(代码片段

错误记录Android Studio 编译报错 ( Could not determine java version from ‘11.0.8‘. | Android Studio 降级 )(代码片段

对这个带有 & 不带 = 的代码片段返回类型感到非常困惑