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

网友投稿 359 2022-08-16


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方法

SyssKjJzmZZTtem.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 {

}

输出截图如下:

总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:RabbitMQ消息队列实现延迟任务示例
下一篇:G1垃圾回收器在并发场景调优详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~