一篇文章搞定Java.lang.Class.IsInstance和Instanceof的区别无能为力。话不多说,直接上代码!publicclassCar{}publicclassTrain{}publicclassBenzextendsCar{publicvoidprintBenz(){System.out.println("printBenz");}}Carc1=newCar();Benzb1=newBenz();System.out。println(b1instanceofBenz);System.out.println(b1instanceofCar);System.out.println(b1instanceofTrain);//b1与Train无关,直接编译提示错误:IncompatibleconditionaloperandtypesBenzandTrain运行代码,输出:truetrueAinstanceofBis用于判断实例A是不是类B的实例。由于b1是Benz的实例,所以第一个输出为真。而Benz是Car的子类,所以第二个输出也是成立的。接下来看一个动态判断对象类型的例子:出去。println(checkType(newBenz(),"com.my.demo.Benz"));}publicstaticbooleancheckType(Objectobj,StringclassName)throwsClassNotFoundException{returnClass.forName(className).isInstance(obj);}运行代码,输出:truetrue上面代码中,isInstance()是Class类的一个方法publicbooleanisInstance(Objectobj)。该方法的作用是在运行时判断指定的obj对象是否为当前Class实例所代表的类的实例。这里我想提一下类Class。在Java中,每个类都有一个对应的Class类对象。也就是说:当一个Java程序启动运行时,会编译一个XXX.java类,生成一个XXX.class文件,在JVM虚拟机中会生成一个XXX.class文件对应的Class类的对象XXX类用于表示XXX类的类型信息。它的核心功能可以概括为以下四点:1.java.lang.Class类是Java中的反射中心,在运行时提供或获取对象的类型信息。2、Java是区分大小写的,所以Class和关键字class不冲突。3、当我们创建一个类Car时,Java会自动生成一个Car的Class类的对象,Car.class。4.Class类的对象只能由JVM创建,不能new创建。
