instanceof 是 Java 语言中的一个二元操作符,和 = =、>、< 等是同一类元素。由于 instanceof 是由字母组成的,所以它也是Java的保留关键字。Java中 instance of 运算符用法是学习instance of 运算符的关键所在。
1.instanceof 的作用是测试它左边的对象是否是它右边类的实例,然后返回一个 boolean 类型的 instanceof。请看下面的代码。
String s = "I AM an Object!";
boolean isObject = s instanceof Object;
上述代码声明了一个 String 型对象引用,指向一个 String 型对象,然后用 instanceof 来测试它所指向的对象是否是 Object 类的一个实例。因为这是真的,所以返回结果 true,也就是 isObject 的值为 true。
比如我们在编写一个处理账单系统时,其中有如下 3 个类。
public class Bill {//省略细节}
public class PhoneBill extends Bill {//省略细节}
public class GasBill extends Bill {//省略细节}
在具体处理程序中有一个专门的方法来接受一个 Bill 类型的对象,这样可以计算金额。假设两种账单的计算方法不同,而传入的 Bill 对象可能是两种中的任何一种,因此需要使用 instanceof 来判断。
public double calculate(Bill bill) {
if (bill instanceof PhoneBill) {
//计算电话账单
}
if (bill instanceof GasBill) {
//计算燃气账单
}
...
}
这样就可以用一个方法处理两种子类。
2.然而,这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了:
public double calculate(PhoneBill bill) {
//计算电话账单
}
public double calculate(GasBill bill) {
//计算燃气账单
}
所以,使用instanceof在绝大多数情况下并不是推荐的做法,应当好好利用多态。
3.同时也可以用instance of 来判断某个对象是否是某个Class类的实例。
用法:
boolean result = object instanceof class
参数:
result :boolean类型。
object :必选项。任意对象表达式。
class:必选项。任意已定义的对象类。
说明:
如果该object 是该class的一个实例,那么返回true。如果该object 不是该class的一个实例,或者object是null,则返回false。
例子:
package com.instanceoftest;
interface A { }
class B implements A { } //B是A的实现
class C extends B { } //C继承B
class D { }
class instanceoftest {
public static void main(String[] args) {
A a = null;
B b = null;
boolean res;
System.out.println("instanceoftest test case 1: ------------------");
res = a instanceof A;
System.out.println("a instanceof A: " + res); // a instanceof A:false
res = b instanceof B;
System.out.println("b instanceof B: " + res); // b instanceof B: false
System.out.println("\ninstanceoftest test case 2: ------------------");
a = new B();
b = new B();
res = a instanceof A;
System.out.println("a instanceof A: " + res); // a instanceof A:true
res = a instanceof B;
System.out.println("a instanceof B: " + res); // a instanceof B:true
res = b instanceof A;
System.out.println("b instanceof A: " + res); // b instanceof A:true
res = b instanceof B;
System.out.println("b instanceof B: " + res); // b instanceof B:true
System.out.println("\ninstanceoftest test case 3: ------------------");
B b2 = new C();
res = b2 instanceof A;
System.out.println("b2 instanceof A: " + res); // b2 instanceof A:true
res = b2 instanceof B;
System.out.println("b2 instanceof B: " + res); // b2 instanceof A:true
res = b2 instanceof C;
System.out.println("b2 instanceof C: " + res); // b2 instanceof A:true
System.out.println("\ninstanceoftest test case 4: ------------------");
D d = new D();
res = d instanceof A;
System.out.println("d instanceof A: " + res); // d instanceof A:false
res = d instanceof B;
System.out.println("d instanceof B: " + res); // d instanceof B:false
res = d instanceof C;
System.out.println("d instanceof C: " + res); // d instanceof C:false
res = d instanceof D;
System.out.println("d instanceof D: " + res); // d instanceof D:true
}
}
以上就是在Java语言中,instead of运算符的用法实例,我们可以仔细剖析,认真求证,学习其中的精髓。然后,结合本站的关系运算符教程里对instead of运算符的详细讲解,一定能够完全掌握instead of 运算符的相关知识!
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习