导航:首页 > 编程语言 > java获取class类

java获取class类

发布时间:2023-05-22 10:35:38

1. java 如何获取基本类的class

publicstaticObjectgetType(Classc)throwsException{
Fieldf=c.getDeclaredField("TYPE");
Objectobj=f.get(c);
returnobj;
}
publicstaticvoidmain(String[]args)throwsException{
System.out.println(getType(Integer.class));
}

2. java class

java class是什么,让我们一起了解一下?

CLASS是在网络工程中的一种协议,在java中有两种对象:实例对象和Class对象。每个类运行时的类型信息就是用Class对象表示的,它包含了与类有关的信息,其实实例对象就是通过Class对象来创建的。

那我们如何获得Class对象?

1、Class.forName(“类的全限定名”)

2、实例对象.getClass()

3、类名.class (类字面常量)

实战操作:如何获得一个实例的类型类?

Object类中包含一个方法名叫getClass,利用这个方法就可以获得一个实例的类型类。类型类指的是代表一个类型的类,因为一切皆是对象,类型也不例外,在Java使用类耐滑型类来表示一个类型,所有的类型类都是Class类的实例。getClass()会看到返回Class 。

JDK中,普通的Class.newInstance()方法的定义返回Object,要将该返回类型强制转换为另一种类型,但是使用泛型的Class ,Class.newInstance()方法具有一个特定的返回类型。

代码如下: public class Main2 {     public static void main(String[] args) throws InstantiationException, IllegalAccessException {         System.out.println("1-----------");         Dog dog1 = creatNew1(Dog.class);         System.out.println(dog1.name + " is " + dog1.type+ "\n");         System.out.println("2-----------");         Animal ani1 = creatNew2(Cat.class);         Cat cat1 = (Cat) ani1;         System.out.println(cat1.name + " is " + cat1.type + "\n");         System.out.println("3-----------");         Object obj = creatNew3(Dog.class);         Dog dog2 = (Dog) obj;         System.out.println(dog1.name + " is " + dog2.type + "\n");         System.out.println("4-----------");         Object obj2 = creatNew4(Cat.class);         Cat cat2 = (Cat) obj2;         System.out.println(cat2.name + " is " + cat2.type + "\n");         System.out.println("5-----------");         Object obj3 = creatNew5(new Cat());         Cat cat3 = (Cat) obj3;  蔽亩码       System.out.println(cat3.name + " is 宏哪" + cat3.type + "\n");     }     /**      * 此方法是一个非泛型类中的泛型方法,参数为Class 类型,可以传入任何类,但是Class 将参数在函数内部的类型固定为 T类,使用clazz.newInstance(),返回的类型也为固定的 T 类型。      * 如: 传入Dog.class, 函数中的 T 固定为Dog.class,函数返回的是Dog类型,不需要强制转换为Dog类型      * (当然,函数返回类型也可以是Object类型,但是没必要)      */     public static   T creatNew1(Class  clazz) throws IllegalAccessException, InstantiationException {         System.out.println(clazz);//打印具体传入的类型。         return clazz.newInstance();     }     /**      * 此方法参数是Class ,只能传入Animal及其子类的类型,函数返回类型只能声明为Animal或Object类型,      * 如:传入Cat.class,函数返回一个Animal的子类对象,需将此子类对象强制转换为具体的子类(即Cat类)。      */     public static Animal creatNew2(Class  clazz) throws IllegalAccessException, InstantiationException {         System.out.println(clazz);//打印具体传入的类型。         return clazz.newInstance();     }     /**      * 此方法参数是Class,可传入任何类,其返回只能声明为Object类对象。      * 如:传入Dog.class, 返回的是Object类型的对象,需强制转换为Dog类型的对象。      */     public static Object creatNew3(Class clazz) throws IllegalAccessException, InstantiationException {         System.out.println(clazz);//打印具体传入的类型。         return clazz.newInstance();     }     /**      * 传入参数Class  和 上一个方法传入 Class 的区别还不是很清楚,其返回只能声明为Object类对象。      * 如:Cat.class, 返回的是Object类型的对象,需强制转换为Cat类型的对象。      */     public static Object creatNew4(Class  clazz) throws IllegalAccessException, InstantiationException {         System.out.println(clazz);//打印具体传入的类型。         return clazz.newInstance();     }     /**      * 传入Object类型的对象,返回也声明为Object类型。      */     public static Object creatNew5(Object object) {         System.out.println(object.getClass());//打印具体传入的类型。         return object;     } } abstract class Animal {     public String type = "type = animal "; } class Dog extends Animal {     public String name = "name = gou"; } class Cat extends Animal {     public String name = "name = mao"; } /**  * 这些方法,传的参数声明不同,其返回的声明也必然要随之不同。  */

3. java 如何获取 泛型的 class

package com.leo.common;
public class Genericity<T> {
public static void main(String[] args) {
Genericity<String> test = new Genericity<>("test1");
System.out.println(test.getGenericityName());
Genericity<Double> test1 = new Genericity<>(new Double(123));
System.out.println(test1.getGenericityName());
}
private T data;
public Genericity(T data) {
this.data = data;
}
public T getData() {
return this.data;
}
public String getGenericityName() {
return data.getClass().getName();
}
}

4. java web怎么获取class类的编译路径

javaweb中的java文件会在服务器中生成class文件,比如tomcat目录下的webapps目录下,放你的javaweb项目,在项目中有个WEB-INF目录,里面有一个classes文件夹,里面放的都是对源码进行编译后生成的.class文件

5. java中如何得到一个数组的class的元素class

1、在Java中,所有的数组都有一个缺省的属性length,用于获取数组中元素的个数。
2、数组的复制:System.array()。浅拷贝
3、数组的排序:Arrays.sort()。
4、在已排序的数组中查找某个元素:Arrays.binarySearch()。
5、获取Class的三种方式:
(1)利用对象调用getClass()方法获取该对象的Class实例;
(2)使用Class类的静态方法forName(),用类的名字获取一个Class实例;
(3)运用.class的方式来获取Class实例,对于基本数据类型的封装类,还可以采用.TYPE来获取相对应的基本数据类型的Class实例。

6. java获取泛型class

很多朋友都想知道java怎么获取泛型class?下面侍袭就一起来了解一下吧~
获取泛型Class的方法
Class类的方法:
public Type getGenericSuperclass()
方法作用:

如果超类是参数化类型,则返回的 Type 对象必须准确反映源代码中所使用的实际类型参数。如果以前未曾创建表示超类的参数化类型,则创建这个类型。有关参数化老做兄类型创建过程的语义,请参阅 ParameterizedType 声明胡好。如果此 Class 表示 Object 类、接口、基本类型或 void,则返回 null。如果此对象表示一个数组类,则返回表示 Object 类的 Class 对象。

ParameterizedType类的方法:

Type[] getActualTypeArguments()

方法作用:返回表示此类型实际类型参数的 Type 对象的数组。

注意,在某些情况下,返回的数组为空。如果此类型表示嵌套在参数化类型中的非参数化类型,则会发生这种情况。

二、获取泛型Class对象

(解析Excel的类代码较多,这里定义几个简单的类记录)

定义获取泛型Class对象的工具类

GenericSuperclassUtil
import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public class GenericSuperclassUtil { /* * 获取泛型类Class对象,不是泛型类则返回null */ public static Class  getActualTypeArgument(Class  clazz) { Class  entitiClass = null; Type genericSuperclass = clazz.getGenericSuperclass(); if (genericSuperclass instanceof ParameterizedType) { Type[] actualTypeArguments = ((ParameterizedType) genericSuperclass) .getActualTypeArguments(); if (actualTypeArguments != null && actualTypeArguments.length > 0) { entitiClass = (Class ) actualTypeArguments[0]; } } return entitiClass; } }
定义BaseService ,用来测试不使用父类时泛型Class的获取

BaseService
public class BaseService  { public Class  getEntityClass() { return GenericSuperclassUtil.getActualTypeArgument(this.getClass()); } }
测试BaseService.getEntityClass() @Testpublic void testBaseService() { System.out.println(new BaseService ().getEntityClass());// 控制台输出:null }

7. java 怎么获取t的class

1. public Type getGenericSuperclass()
用来返回表示当前Class 所表示的实体(类、接口、基本类型或 void)的直接超类的Type。如果这个直接超类是参数化类型的,则返回的Type对象必须明确反映在源代码中声明时使用的类型。比如:

import java.lang.reflect.ParameterizedType;
public class GT1 extends GT2<Integer>{
public static void main(String[] args) {
System.out.println(((ParameterizedType)new GT1().getClass().getGenericSuperclass()));
}
}

则输出结果即为:
GT2<java.lang.Integer>

如果此Class代表的是Object 类、接口、基本类型或 void,则返回 null。。如果此对象表示一个数组类,则返回表示 Object 类的 Class 对象。

2. public Type[] getGenericInterfaces()
与上面那个方法类似,只不过Java的类可以实现多个接口,所以返回的Type必须用数组来存储。
以上两个方法返回的都是Type对象或数组,在我们的这个话题中,Class都是代表的参数化类型,因此可以将Type对象Cast成ParameterizedType对象。而 ParameterizedType对象有一个方法, getActualTypeArguments()。
public Type[] getActualTypeArguments()
用来返回一个Type对象数组,这个数组代表着这个Type声明中实际使用的类型。接着使用上面的例子:

import java.lang.reflect.ParameterizedType;
public class GT1 extends GT2<Integer>{
public static void main(String[] args) {
System.out.println(((ParameterizedType)new GT1().getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
}
}

8. Java 获取包所有class

既然是封到包里的,遍历确实是有点麻烦

思路如下:

  1. 输入包名

  2. 转换为资源路径名,即以‘/’替换‘.’

  3. 找到ClassLoader,并获得资源名对于的资源对象

  4. 判断资源对象是否为jar包内

4.1若否,则使用文件系统进行处理为文件夹,之后遍历名称进行类加载。这里直接使用资源路径名,会是其真实位置,不用关注因部署在tomcat上而产生的路径变化。

4.2若是,则构造一个jar文件类,使用jar操作类遍历内容,进行类加载。

实现参考(其实我只是把它的思路总结出来):http://guoliangqi.iteye.com/blog/644876

阅读全文

与java获取class类相关的资料

热点内容
python编程基础豆瓣 浏览:710
程序员乱码是什么意思 浏览:372
交友app怎么删除动态 浏览:90
男士穿衣哪个app好 浏览:38
如何把桌面软件改造成app 浏览:742
我的世界如何打开最近玩的服务器 浏览:384
程序员试用期汇报问题协助怎么写 浏览:129
抖音算法到底是什么 浏览:128
哪个vlan技术对报文加密 浏览:574
单片机定时电路 浏览:676
山西平台服务器云主机 浏览:704
按摩肚脐解压视频 浏览:993
php55安装教程 浏览:141
云服务器怎么查找本机域名 浏览:26
qd123y压缩机参数 浏览:389
程序员妈妈怀孕 浏览:492
金普国际编程 浏览:539
java什么是引用类型 浏览:948
这是命令吗txt 浏览:318
支付宝android包名 浏览:158