Java中class和Class的区别示例详解

 更新时间:2022年04月02日 15:31:00   作者:YuShiwen  
class 是java的关键字,在声明java类时使用,Class是java JDK提供的一个类,完整路径为java.lang.Class,下面这篇文章主要给大家介绍了关于Java中class和Class区别的相关资料,需要的朋友可以参考下

一.class与Class区别

class是Java中的关键字,如public class Xxx 或者 class Xxx ,在声明Java类时使用。 而Class是一个类。 我们通常认为类是对象的抽象和集合,Class就相当于是对类的抽象和集合。 也可以认为对象是类的实例,类是Class的实例。

二.Class介绍

Class是一个类。如下图,它在java.lang包中。

它的构造函数是private属性,所以我们不能直接new一个Class对象出来,如下图注释段所说: “私有构造函数。只有Java虚拟机创建类对象。不使用此构造函数,并阻止生成默认构造函数。”

三.如何得到Class对象

1.通过getClass()方法获取到Class对象

getClass()方法是Object类的一部分,如下图:

如果我们已经创建了某个类型的对象,那么我们可以通过getClass()方法来获取该类型的Class的对象:

package Task;
import org.junit.Test;
public class Try0 {
    @Test
    public void toTry() throws ClassNotFoundException {
//        //forName方法:参数为其类的路径
//        Class a = Class.forName("Task.Try1");
//        System.out.println(a);
        //通过对象得到类
        Try1 try1 = new Try1();
        Class b = try1.getClass();
        System.out.println(b);
    }
}

class Try1{
}

测试运行结果:

2.通过forName()方法获取到Class对象

Class.forName方法是Class类的一个静态方法,如下图:

所以可以直接通过Class.forName("类的路径")获取Class对象:

package Task;
import org.junit.Test;
public class Try0 {
    @Test
    public void toTry() throws ClassNotFoundException {
        //forName方法:参数为其类的路径
        Class a = Class.forName("Task.Try1");
        System.out.println(a);
    }
}

class Try1{
}

测试运行截图:

3.类.class获得Class对象(类字面常量)

package Task;
import org.junit.Test;
public class Try0 {
    @Test
    public void toTry() throws ClassNotFoundException {
//        //forName方法:参数为其类的路径
//        Class a = Class.forName("Task.Try1");
//        System.out.println(a);

//        //通过对象得到类
//        Try1 try1 = new Try1();
//        Class b = try1.getClass();
//        System.out.println(b);

        //类字面常量
        Class c = Try1.class;
        System.out.println(c);
    }
}

class Try1{
}

测试运行结果:

四.Class常用方法

package Task;
import org.junit.Test;
public class Try0 {
    @Test
    public void toTry() throws ClassNotFoundException {
//        //forName方法:参数为其类的路径
//        Class a = Class.forName("Task.Try1");
//        System.out.println(a);

        //通过对象得到类
        Try1 try1 = new Try1();
        Class b = try1.getClass();
        System.out.println(b);

//        //类字面常量
//        Class c = Try1.class;
//        System.out.println(c);
        //isInterface方法,判断是否为接口
        System.out.println(b.isInterface());
        //isArray方法,判断是否为数组
        System.out.println(b.isArray());
        //isPrimitive方法,判断是否是基本类型,例如int是基本类型,Integer为包装类
        System.out.println(b.isPrimitive());
        //isAnnotation方法,判断是否为注解,注解如常见的重写注解@Override,我们所用的单元测试@Test注解
        System.out.println(b.isAnnotation());
        //isInstance方法参数是一个对象,判断该对象try1对应的类Try1是否是b的对象
        System.out.println(b.isInstance(try1));
        //getClassLoader方法,获取类加载器
        System.out.println(b.getClassLoader());
        //getSuperclass方法,获取父类信息
        System.out.println(b.getSuperclass());
        //getGenericSuperclass方法,也是获取父类信息
        System.out.println(b.getGenericSuperclass());
        //getComponentType方法,如果b的类型是数组,则获取数组里元素的类型
        System.out.println(b.getComponentType());
        //getDeclaredClasses方法,获取b继承于哪个类
        System.out.println(b.getDeclaredClasses());


        //几个获取name的方法:
        //getName方法
        System.out.println(b.getName());
        //getTypeName方法
        System.out.println(b.getTypeName());
        //getCanonicalName方法
        System.out.println(b.getCanonicalName());
        //getSimpleName方法
        System.out.println(b.getSimpleName());

//        以下还有一些方法只列举出来
//        getTypeParameters方法,获取泛型类中的泛型参数数组
//        getClasses方法,获取Class对象中public修饰的内部类
//        getDeclaredClasses方法,获取Class对象中的内部类,继承成员不包含在内
//        getConstructors方法,获取public修饰的构造函数
//        getConstructor方法,查找对应的构造函数
//        getDeclaredConstructors方法,获取Class对象中的构造函数
    }
}

class Try1 {
}

输出截图如下:

总结

到此这篇关于Java中class和Class区别的文章就介绍到这了,更多相关Java class和Class区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 新手初学Java的内部类

    新手初学Java的内部类

    这篇文章主要介绍了java内部类原理与用法,结合实例形式分析了Java内部类的概念、原理、分类及相关使用技巧,需要的朋友可以参考下,希望能给你带来帮助
    2021-07-07
  • IDEA编译乱码Build Output提示信息乱码

    IDEA编译乱码Build Output提示信息乱码

    IDEA编译的时候乱码,Build Output提示信息乱码,本文就详细的介绍一下解决方法,有需要的同学可以了解一下
    2021-06-06
  • Springboot 前后端分离项目使用 POI 生成并导出 Excel的操作方法

    Springboot 前后端分离项目使用 POI 生成并导出 Excel的操作方法

    在做一个 SpringBoot 前后端分离项目的时候,需要将数据存到 Excel中,用户可以下载 Excel,具体实现是采用 Apache 强大的 POI,本文给大家介绍Springboot 前后端分离项目使用 POI 生成并导出 Excel相关知识,感兴趣的朋友一起看看吧
    2023-09-09
  • 详解Java分布式事务的 6 种解决方案

    详解Java分布式事务的 6 种解决方案

    在分布式系统、微服务架构大行其道的今天,服务间互相调用出现失败已经成为常态,本文侧重于其他几项,关于 2PC、3PC 传统事务,网上资料已经非常多了,这里不多做重复,本文通过示例给大家介绍Java分布式事务的 6 种解决方案,一起看看吧
    2021-06-06
  • java HttpClient传输json格式的参数实例讲解

    java HttpClient传输json格式的参数实例讲解

    这篇文章主要介绍了java HttpClient传输json格式的参数实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Java多线程CountDownLatch的实现

    Java多线程CountDownLatch的实现

    本文主要介绍了Java多线程CountDownLatch的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Maven管理SpringBoot Profile详解

    Maven管理SpringBoot Profile详解

    这篇文章主要介绍了Maven管理SpringBoot Profile详解,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • SpringBoot项目拦截器获取Post方法的请求body实现

    SpringBoot项目拦截器获取Post方法的请求body实现

    本文主要介绍了SpringBoot项目拦截器获取Post方法的请求body,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • java启动jar包设置启动参数的实现

    java启动jar包设置启动参数的实现

    本文主要介绍了java启动jar包设置启动参数的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • 在Spring Boot项目中引入本地JAR包的步骤和配置

    在Spring Boot项目中引入本地JAR包的步骤和配置

    本文探讨了在Spring Boot项目中引入本地JAR包的步骤和必要的配置,通过使用Maven的system作用域,开发者可以将自定义的本地库或功能集成到Spring Boot应用程序中,,需要的朋友可以参考下
    2023-10-10

最新评论