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

目录
  • 一.class与Class区别
  • 二.Class介绍
  • 三.如何得到Class对象
    • 1.通过getClass()方法获取到Class对象
    • 2.通过forName()方法获取到Class对象
    • 3.类.class获得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区别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 简单了解JAVA public class与class区别

    1. 每个编译单元(文件)都只能有一个public类.即每个编译单元都有单一的公共接口,用public类实现.此时,mian()就必须要包含在public类中. 2.public类的名称必须完全与含有该编译单元的文件名称一致,包括大小写.如果不匹配,编译时错误. 3.如果编译单元(文件)中不含有一个public类,此时编译单元文件名称可以与启动类名称可以不一致,即可以随意对文件命名. 这样的话,main()不是必须要放在public类中才能运行程序. 总的来说,一个Java源文件中最多只能有一个

  • java中public class与class的区别详解

    在编写类的时候可以使用两种方式定义类:public class定义类:class定义类:如果一个类声明的时候使用了public class进行了声明,则类名称必须与文件名称完全一致.范例:定义一个类(文件名称为:Hello.java) 复制代码 代码如下: public class HelloDemo{    //声明一个类,类名称的命名规范:所有单词的首字母大写    public static void main(String args[]){    //主方法        System.

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

    目录 一.class与Class区别 二.Class介绍 三.如何得到Class对象 1.通过getClass()方法获取到Class对象 2.通过forName()方法获取到Class对象 3.类.class获得Class对象(类字面常量) 四.Class常用方法 总结 一.class与Class区别 class是Java中的关键字,如public class Xxx 或者 class Xxx ,在声明Java类时使用. 而Class是一个类. 我们通常认为类是对象的抽象和集合,Class就相

  • java中 String和StringBuffer的区别实例详解

    java中 String和StringBuffer的区别实例详解 String: 是对象不是原始类型.            为不可变对象,一旦被创建,就不能修改它的值.            对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.            String 是final类,即不能被继承. StringBuffer: 是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象            它只能通过构造函数来建立,  

  • Java中的Collections类的使用示例详解

    Collections的常用方法及其简单使用 代码如下: package Collections; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Stack; public class collections { public static void main(String[]args){ int array[]={125,75,56,7}; Li

  • Java中动态规则的实现方式示例详解

    背景 业务系统在应用过程中,有时候要处理"经常变化"的部分,这部分需求可能是"业务规则",也可能是"不同的数据处理逻辑",这部分动态规则的问题,往往需要可配置,并对性能和实时性有一定要求. Java不是解决动态层问题的理想语言,在实践中发现主要有以下几种方式可以实现: 表达式语言(expression language) 动态语言(dynamic/script language language),如Groovy 规则引擎(rule engine

  • Java中的权限修饰符(protected)示例详解

    前言 大部分来自:https://blog.csdn.net/justloveyou_/article/details/61672133.并在这个博客的基础上,加上了自己的一些理解. 权限控制表 修饰词 本类 同一个包的类 继承类 其他类 private √ × × × 无(默认) √ √ × × protected √ √ √ × public √ √ √ √ 关于protected 最近在看Effective Java时,遇到了一个关于protected修饰符的问题.这个问题中,对于它的认识

  • 在java中如何定义一个抽象属性示例详解

    前言 本文主要给大家介绍的是在java中定义一个抽象属性的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: Abstract关键字通常被用于类和方法,用来把某些行为的实现委托给子类.由于Java不支持抽象属性,如果你试图将类属性标记为抽象,将会得到一个编译时错误. 在本教程中,我们将介绍两种定义抽象属性的方法,这些抽象属性可以由子类进行设置,而且不使用Abstract 关键字. 实用案例 假设我们想要实现一个记录事务的日志模块,用来记录特定事务的信息.我们希望这个模块是抽

  • Java中的vector类使用方法示例详解

     基本操作示例 VectorApp.java import java.util.Vector; import java.lang.*; import java.util.Enumeration; public class VectorApp { public static void main(String args[]) { Vector v1 = new Vector(); Integer integer1= new Integer(1); //加入为字符串对象 v1.addElement("

  • golang中make和new的区别示例详解

    前言 本文主要给大家介绍了关于golang中make和new区别的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍: new 和 make 都可以用来分配空间,初始化类型,但是它们确有不同. new(T) 返回的是 T 的指针 new(T) 为一个 T 类型新值分配空间并将此空间初始化为 T 的零值,返回的是新值的地址,也就是 T 类型的指针 *T,该指针指向 T 的新分配的零值. p1 := new(int) fmt.Printf("p1 --> %#v \n &quo

  • Mongoose中document与object的区别示例详解

    前言 本文主要给大家总结介绍了关于Mongoose中document与object区别的相关内容,分享出来供大家参考学习,其实这个问题其实是mongoose非常常见的问题,经常有很多以前没遇到这个问题的人都会被这个问题弄得怀疑人生. 我们先介绍一些问题的背景. 先看下面一段代码: router.get('/', function(req, res, next) { // res.render('index', { title: 'Express' }); const model = mongoo

  • BeanFactory和FactoryBean的区别示例详解

    目录 正文 BeanFactory和FactoryBean的区别 1.BeanFactory 2.FactoryBean 正文 这个之前经常会遇到别人问 但是一直不是很能理解 工作开发中我对于bean的使用比较少 就是偶尔启动出错才会出现 可能是水平有限 但是bean 也是非常核心的问题 书到用时方恨少 且看且珍惜 BeanFacotry是spring中比较原始的Factory. 如XMLBeanFactory就是一种典型的BeanFactory.原始的BeanFactory无法支持spring

随机推荐