复习Class类的使用

此博客围绕Java反射展开,介绍了获取类的类类型的三种方式,包括通过类的隐含静态成员变量class、对象的getClass方法以及Class.forName方法。还说明了动态加载类与静态加载类的区别,并展示了如何通过类的类类型创建类的实例对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.imooc.reflect;

 

public class ClassDemo1 {

public static void main(String[] args){

   //Foo的实例对象怎么表示

   Foo foo1=new Foo();//foo1就表示出来了

   //Foo这个类本身也是Class类的实例对象

   //任何一个类都是Class类的实例对象 这三个实例对象有三种表示方式

  

   //第一种--->实际在告诉我们任何一个类都有一个隐含的静态成员变量class

   Class c1=Foo.class;

   //第二种 已知该类的对象 通过getClass方法

   Class c2=foo1.getClass();

   //注意:foo1Foo类的实例对象;c1c2Class类的实例对象即Foo这个类

    /*官网说法:c1c2表示了Foo类的类类型(class type

     *万事万物皆对象

     *类也是对象,是Class类的实例对象

     *这个对象我们称为该类的类类型

     */

  

   //下面输出的是true 因为不管是c1还是c2都代表了Foo类的类类型,一个类只可能是Class类的一个实例对象

   System.out.println(c1==c2);

  

   //第三种表达方式

   Class c3=null;

   try {

      c3=Class.forName("com.imooc.reflace.Foo");

      //Class.forName("类的全称")不仅代表了类的类类型,还代表了动态加载类

      //要区分编译和运行,编译时刻加载类是静态加载类,运行时刻加载类是动态加载类

   } catch (ClassNotFoundException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

   }

  

  

   //综上,我们完全可以通过该类的类类型创建该类的实例对象--->通过c1c2或者c3创建Foo类的实例

    try {

      Foo foo=(Foo)c1.newInstance();//使用newInstance()方法创建Foo的实例对象,此方法只能调用无参构造

   } catch (InstantiationException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

   } catch (IllegalAccessException e) {

      // TODO Auto-generated catch block

      e.printStackTrace();

   }

}

}

 

class Foo{}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值