Java面试题:获得一个类的类对象有哪些方式

Java面试题:获得一个类的类对象有哪些方式,第1张

给你介绍3种获得类对象方式: 

第一种方式:通过类本身来获得对象

Class classname =  this getClass();

第二种方式:通过子类的实例获取父类对象

ClassName cn =  new  ClassName();

UserClass = cngetClass();

Class SubUserClass = UserClassgetSuperclass();

第三种方式:通过类名加class获取对象

Class ForClass = ClassName class ;(类在包中的路径加 class )

第四种方式:通过类名的字符串获取对象

Class ForName = ClassforName( "ClassName" );

这种方式在jdbc中常用到。

类名class 的方式更加安全,例如当你要获取一个接口的class时,可以使用 类名class 的方式获取

但此时就不能通过 对象getClass 的方式获取了,因为接口是没有实例对象的,接口只有实现类对象,通过这种方式获取到的是接口的实现类的class,而非是接口的class

再者就是对象声明的类型未必是对象本身真正的类型,通过对象获取class容易产生混乱,因此尽量使用更加安全的方式

TgetClass()或者Tclass都是非法的,因为T是泛型变量。

由于一个类的类型是什么是在编译期处理的,故不能在运行时直接在Base里得到T的实际类型。

有一种变通的实现方式:

import javalangreflectArray;

import javalangreflectParameterizedType;

import javalangreflectType;

public class Generic extends Base<String> {

public static void main(String[] args) {

Generic c = new Generic();

Systemoutprintln(carray);

}

Object array ;

public Generic() {

array = ArraynewInstance(getGenericType(0), 100);

}

}

class Base<T> {

public Class getGenericType(int index) {

Type genType = getClass()getGenericSuperclass();

if (!(genType instanceof ParameterizedType)) {

return Objectclass;

}

Type[] params = ((ParameterizedType) genType)getActualTypeArguments();

if (index >= paramslength || index < 0) {

throw new RuntimeException("Index outof bounds");

}

if (!(params[index] instanceof Class)) {

return Objectclass;

}

return (Class) params[index];

}

}

其中Base<T>是泛型类,在父类中声明getGenericType,子类继承具体的Base<String>,那么在子类中就可以通过getGenericType(0)获取到String的class

java中创建对象时其实不是通过类直接创建的,如果你想要使用Test类,在java中JVM首先加载Testjava文件的字节码文件Testclass(也就是编译后的文件),当JVM(java虚拟机)加载字节码文件后,自动为该类创建自己的class对象,在通过class对象创建你以后要创建的对象\x0d\例如:Test t1=new Test(); Test t2=new Test(); 我们都知道java中 == 是比较两个对象的内存地址,t1getClass()==t2getClass();返回是true,证明他们是一个class对象创建出来的。那么可Class对象的意义就是标志一个类了,Class类为我们提供了很多方法,比如反射技术常用到的ClassforName("包类");这样可以获取一个类的Class对象。\x0d\例如:Test类在orgabc这个包里,那么可以用ClassforName("orgabcTest");这样就返回一个Test类的class对象,拿到这个对象接下来可以做很多事,调用这个类的方法,属性,构造方法等,具体你去研究下反射技术。如果有不懂在问我。\x0d\针对一种数据类型的Class转换,比如Stringclass,intclass,类class等\x0d\你提出的问题Class参数,就是让你传一种Class对象进去。比如Stringclass,intclass,类class等\x0d\Testclass==t1getClass();返回true,怕你有误解,说明一下类和对象都可以获取class对象的。并且这个对象是一个对象,因为一个类对应自己的class对象。

可以通过getElementsByClassName方法来返回一个元素数组,你可以引用下标来返回具体的元素对象,比如:

var elements=documentgetElementsByClassName(“classname”);

elements[0];

var obj = documentgetElementsByTagName("span");//先得到所有的SPAN标记

for(var i=0;i<objlength;i++)

{

if(obj[i]className == 'a')//找出span标记中class=a的那个标记

{

var getObj = obj[i];

value = getObjinnerHTML;//获得他的innerHTML

}

}//有效且管用,但是很笨的方法,目前我没发现还有其他方法。

以上就是关于Java面试题:获得一个类的类对象有哪些方式全部的内容,包括:Java面试题:获得一个类的类对象有哪些方式、Java中类名.class和对象.getclass有什么区别、在java中,使用泛型,比如说T,但是T.class就要报错。我想获取T的class对象怎样获取啊。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9789068.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存