Java中class与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反射机制

参考本人另一篇博客:Java反射机制(初步认识)

目录
相关文章
|
10天前
|
Java
java基础(4)public class 和class的区别及注意事项
本文讲解了Java中`public class`与`class`的区别和注意事项。一个Java源文件中只能有一个`public class`,并且`public class`的类名必须与文件名相同。此外,可以有多个非`public`类。每个类都可以包含一个`main`方法,作为程序的入口点。文章还强调了编译Java文件生成`.class`文件的过程,以及如何使用`java`命令运行编译后的类。
15 3
java基础(4)public class 和class的区别及注意事项
|
5天前
|
Java
java中面向过程和面向对象区别?
java中面向过程和面向对象区别?
14 4
ly~
|
8天前
|
安全 Java 大数据
php跟java有什么区别
PHP 和 Java 是两种常用编程语言,各有特色。PHP 语法简洁灵活,适用于快速开发中小型网站,尤其在 Web 脚本和数据库交互中表现出色。Java 则语法严谨,强类型特性使其在企业级应用、移动开发及大数据处理中更受欢迎,具备高稳定性和安全性。通过优化,PHP 性能可提升,而 Java 在大规模应用中表现更佳。总体而言,PHP 开发效率高但维护性稍差,Java 则更注重代码质量和安全性。
ly~
17 5
|
14天前
|
Java 大数据 API
Java 流(Stream)、文件(File)和IO的区别
Java中的流(Stream)、文件(File)和输入/输出(I/O)是处理数据的关键概念。`File`类用于基本文件操作,如创建、删除和检查文件;流则提供了数据读写的抽象机制,适用于文件、内存和网络等多种数据源;I/O涵盖更广泛的输入输出操作,包括文件I/O、网络通信等,并支持异常处理和缓冲等功能。实际开发中,这三者常结合使用,以实现高效的数据处理。例如,`File`用于管理文件路径,`Stream`用于读写数据,I/O则处理复杂的输入输出需求。
|
9天前
|
Java
java的class类
java的class类
18 5
|
18天前
|
机器学习/深度学习 人工智能 安全
python和Java的区别以及特性
Python:适合快速开发、易于维护、学习成本低、灵活高效。如果你需要快速上手,写脚本、数据处理、做点机器学习,Python就是你的首选。 Java:适合大型项目、企业级应用,性能要求较高的场景。它类型安全、跨平台能力强,而且有丰富的生态,适合更复杂和规模化的开发。
18 3
|
2月前
|
XML JSON 前端开发
Java @RequestParam和@RequestBody的区别是什么?
【8月更文挑战第28天】Java @RequestParam和@RequestBody的区别是什么?
33 5
|
2月前
|
Java
Java 中 notify() 和 notifyAll() 的区别
【8月更文挑战第22天】
54 4
|
2月前
|
Java
下一篇
无影云桌面