`

java instanceof

 
阅读更多

今天写程序,突然发现自己以前写的方法很多都是重复代码,譬如说根据不同子类作不同处理的方法,完全可以用instanceof来干么,于是用了一下这个,但为了保险起见,还是查了一下,找了一篇文章,贴上来,做个备份。

PS: 使用instanceof降低效率么???

     instanceofJava的一个二元操作符,和==, >, <是同一类东东。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。举个例子:

String s = "I AM an Object! ";
boolean isObject = s instanceof Object;

我们声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为True。
instanceof有一些用处。比如我们写了一个处理账单的系统,其中有这样三个类:

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) {
//计算燃气账单
}
...
}
这样就可以用一个方法处理两种子类。

然而,这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了:

public double calculate(PhoneBill bill) {
//计算电话账单
}

public double calculate(GasBill bill) {
//计算燃气账单
}

另外,你在jdk文档中是找不到instanceof的说明的,就像你找不到>,<,=符号的说明一样,这是sun的不足之处吧。

二:

    Example:     Class Teacher and Student are subclass of class Person.

     Person p;

     Teacher t;

     Student s;

     p, t and s are all non-null.

     if(t instanceof Person) {   s = (Student)t; }

What is the result of this sentence?

A. It will construct a Student object.

B. The expression is legal.

C. It is illegal at compilation.

D. It is legal at compilation but possible illegal at runtime.

(c)

instanceof操作符的作用是判断一个变量是否是右操作数指出的类的一个对象,由于java语言的多态性使得可以用一个子类的实例赋值给一个父类的变量,而在一些情况下需要判断变量到底是一个什么类型的对象,这时就可以使用instanceof了。当左操作数是右操作数指出的类的实例或者是子类的实例时都返回真,如果是将一个子类的实例赋值给一个父类的变量,用instanceof判断该变量是否是子类的一个实例时也将返回真。此题中的if语句的判断没有问题,而且将返回真,但是后面的类型转换是非法的,因为t是一个Teacher对象,它不能被强制转换为一个Student对象,即使这两个类有共同的父类。如果是将t转换为一个Person对象则可以,而且不需要强制转换。这个错误在编译时就可以发现,因此编译不能通过。

分享到:
评论

相关推荐

    Java SE编程入门教程 java instanceof(共3页).pptx

    Java SE编程入门教程 java instanceof(共3页).pptx Java SE编程入门教程 java IO(共28页).pptx Java SE编程入门教程 java Math(共11页).pptx Java SE编程入门教程 java object(共9页).pptx Java SE编程入门...

    java instanceof运算符.txt

    java instanceof运算符

    hllvm.Java instanceof 关键字是如何实现的?1

    《深入理解Java `instanceof` 关键字的实现机制》 `instanceof` 是Java语言中一个非常重要的关键字,它用于判断对象是否属于某个类或其子类(或实现了某个接口)。在Java的世界里,`instanceof` 关键字扮演着类型...

    Java instanceof和getClass()区别实例解析

    Java instanceof 和 getClass() 区别实例解析 Java instanceof 和 getClass() 是 Java 语言中两个常用的操作符,用于判断对象的类型或类别。然而,很多开发者对这两个操作符的使用和区别不够了解。在本文中,我们将...

    java instanceof操作符使用及原理解析

    在Java编程语言中,`instanceof`操作符是一个至关重要的工具,它允许程序员在运行时检查对象的类型。`instanceof`主要用于确定一个对象是否属于某个特定类、接口或者其子类(或实现)。理解`instanceof`的使用和原理...

    Java instanceof 运算符的使用方法

    Java instanceof 运算符的使用方法 Java instanceof 运算符是 Java 语言中的一种二元运算符,它用于判断前面的对象是否是后面的类、接口、抽象类或其子类、实现类的实例。如果是,则返回 true,否则返回 false。 ...

    instanceof关键字---马克-to-win java视频

    instanceof 马克-to-win java视频的详细的描述介绍

    Java instanceof关键字的的进一步理解

    Java的`instanceof`关键字是Java语言中用于判断对象类型的工具,它可以帮助程序员确定一个对象是否属于特定的类或者其子类(或接口)的实例。`instanceof`操作符的语法是`object instanceof ClassName`,其中`object...

    java基础——方法的重写、多态+instanceof(csdn)————程序.pdf

    在Java编程语言中,方法的重写和多态是面向对象设计的重要概念,它们使得代码更加灵活和可扩展。下面将详细阐述这两个概念及其应用场景。 首先,方法的重写(Override)是指在一个子类中定义与父类相同名称和参数...

    Java instanceof用法详解及实例代码

    Java中的`instanceof`运算符是用来在程序运行时判断一个对象是否属于某个特定类或其子类(或者实现了某个接口)的关键字。它允许我们动态地检查对象的类型,这对于多态性和类型安全的编程非常有用。以下是`...

    Android中Java instanceof关键字全面解析

    在Android开发中,Java语言是主要的编程工具,而在Java中,`instanceof`关键字扮演着重要的角色。本文将深入探讨`instanceof`的关键字用法及其在Android开发中的应用场景。 `instanceof`是一个二元操作符,它用于...

    java中instanceof与Class的等价性代码示例

    Java 中 instanceof 与 Class 的等价性代码示例 Java 中的 `instanceof` 运算符是一个二元操作符,用于检查对象是否属于某个特定类或其子类。它返回一个布尔值,指示对象是否是该类或其子类的一个实例。在 Java 中...

    Java SE编程入门教程 java序列化(共14页).pptx

    Java SE编程入门教程 java instanceof(共3页).pptx Java SE编程入门教程 java IO(共28页).pptx Java SE编程入门教程 java Math(共11页).pptx Java SE编程入门教程 java object(共9页).pptx Java SE编程入门...

    java 中的instanceof用法详解及instanceof是什么意思(推荐)

    `instanceof`是Java语言中的一个关键字,用于检查对象的类型。它可以帮助程序员确定对象是否属于特定类或者其子类(或实现的接口)的实例。`instanceof`操作符的语法结构是: ```java object instanceof ClassName ...

    JAVA考试试题

    Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而备受开发者喜爱。在准备"JAVA考试试题"时,考生需要对Java语言的各个方面有深入的理解。以下是一些可能涵盖的重要知识点: 1. **基础...

    java中instanceof和getClass()的区别分析

    在Java编程语言中,`instanceof` 和 `getClass()` 是两个重要的操作符和方法,它们在类型检查和对象实例识别方面发挥着关键作用。本文将深入探讨这两个概念的区别及其应用场景。 `instanceof` 关键字主要用于判断一...

    Java SE编程入门教程 properties(共3页).pptx

    java instanceof(共3页) java IO(共28页) java Math(共11页) java object(共9页) java static final(共24页) java this和super(共10页) java 常用API(共22页) javaGUI编程快速入门(1)(共82页) java...

    用于存放java源码和Thinking of Java的资源.rar

    下面介绍 Java instanceof 关键字的几种用法。 1)声明一个 class 类的对象,判断 obj 是否为 class 类的实例对象(很普遍的一种用法),如以下代码: Integer integer = new Integer(1); System.out.println...

Global site tag (gtag.js) - Google Analytics