- 浏览: 178222 次
- 性别:
- 来自: 杭州
-
文章分类
- 全部博客 (159)
- java常用 (28)
- Spring Security (0)
- tomcat (2)
- orcale (4)
- rmi (6)
- jvm (5)
- html (0)
- hibernate (0)
- javascript (5)
- log4j (5)
- struts (5)
- jdbc (0)
- jquery (0)
- json (0)
- jstl (0)
- jboss (0)
- JCaptcha (0)
- jpa (0)
- oscache (0)
- 项目管理 (8)
- ExtJs (10)
- 设计模式 (3)
- jsp (3)
- 错误归档 (1)
- maven (5)
- java多线程 (10)
- quartz (4)
- spring (9)
- memcache (3)
- java笔试面试 (3)
- xml (3)
- hadoop (5)
- velocity (2)
- jetty (3)
- http (1)
- linux (2)
- hbase (2)
- mysql (12)
- mybatis (8)
- web安全 (1)
- hive (2)
- 其他 (1)
最新评论
今天写程序,突然发现自己以前写的方法很多都是重复代码,譬如说根据不同子类作不同处理的方法,完全可以用instanceof来干么,于是用了一下这个,但为了保险起见,还是查了一下,找了一篇文章,贴上来,做个备份。
PS: 使用instanceof降低效率么???
instanceof是Java的一个二元操作符,和==, >, <是同一类东东。由于它是由字母组成的,所以也是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性能优化技巧
2013-03-30 11:19 750Java性能优化技巧 在JAVA程序中,性能问题的大部分原 ... -
java内部类的作用
2013-03-30 11:06 777java内部类的作用一、 ... -
StringTokenizer 用法
2013-03-25 09:29 1294StringTokenizer是一个用来分隔String的应 ... -
Java日志框架
2013-03-17 17:17 940Java日志框架 Log4j Ap ... -
java nio Buffer 中 compact的作用
2013-03-12 17:29 1754java nio Buffer 中 compact的作用 ... -
java annotation 入门
2013-03-11 11:23 777一. 最常见的annotation@Override:用在方法 ... -
Java中assert关键字的实现
2013-03-08 17:12 1091Java中assert关键字的实现 J2SE 1.4 ... -
java正则表达式
2013-03-07 08:42 701众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判 ... -
java对cookie的操作
2013-03-10 10:31 889java对cookie的操作 java对cookie的操 ... -
eclipse中的.project 和 .classpath文件的具体作用
2013-02-27 16:38 706eclipse中的.project 和 .cla ... -
Java中Split函数的用法技巧
2013-02-25 13:48 1606Java中Split函数的用法 ... -
如何把安全证书导入到java中的cacerts证书库
2013-02-21 11:21 2022如何把安全证书导入到java中的cacerts证书库 在项 ... -
java Comparable Comparator 接口
2013-02-19 15:58 7981.什么是Comparable接口 此接口强行对实现它的每 ... -
java环境变量配置
2012-08-28 21:51 733java环境变量配置 windows xp下配置JDK环 ... -
Java应用程序添加退出事件响应
2012-08-22 20:37 1199一个完整的Java应用程序,通常至少要有一个应用程序的结束点。 ... -
java 读取 doc poi读取word中的表.txt
2012-08-22 20:34 1759import java.io.File; import j ... -
java压缩和解压缩例子
2012-08-21 21:26 1094java压缩和解压缩例子 压缩时,在压缩文件夹中新建目录,en ... -
Java反射,根据类名创建带参数的实例
2012-08-21 21:26 2227public Object dynCreateClassIns ... -
java异常时如何执行
2012-08-21 21:26 692代码如下: public class Test{ publi ... -
java 读写txt文件
2012-08-21 21:27 909java 读写txt文件 读取 ...
相关推荐
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运算符
《深入理解Java `instanceof` 关键字的实现机制》 `instanceof` 是Java语言中一个非常重要的关键字,它用于判断对象是否属于某个类或其子类(或实现了某个接口)。在Java的世界里,`instanceof` 关键字扮演着类型...
Java instanceof 和 getClass() 区别实例解析 Java instanceof 和 getClass() 是 Java 语言中两个常用的操作符,用于判断对象的类型或类别。然而,很多开发者对这两个操作符的使用和区别不够了解。在本文中,我们将...
在Java编程语言中,`instanceof`操作符是一个至关重要的工具,它允许程序员在运行时检查对象的类型。`instanceof`主要用于确定一个对象是否属于某个特定类、接口或者其子类(或实现)。理解`instanceof`的使用和原理...
Java instanceof 运算符的使用方法 Java instanceof 运算符是 Java 语言中的一种二元运算符,它用于判断前面的对象是否是后面的类、接口、抽象类或其子类、实现类的实例。如果是,则返回 true,否则返回 false。 ...
instanceof 马克-to-win java视频的详细的描述介绍
Java的`instanceof`关键字是Java语言中用于判断对象类型的工具,它可以帮助程序员确定一个对象是否属于特定的类或者其子类(或接口)的实例。`instanceof`操作符的语法是`object instanceof ClassName`,其中`object...
在Java编程语言中,方法的重写和多态是面向对象设计的重要概念,它们使得代码更加灵活和可扩展。下面将详细阐述这两个概念及其应用场景。 首先,方法的重写(Override)是指在一个子类中定义与父类相同名称和参数...
Java中的`instanceof`运算符是用来在程序运行时判断一个对象是否属于某个特定类或其子类(或者实现了某个接口)的关键字。它允许我们动态地检查对象的类型,这对于多态性和类型安全的编程非常有用。以下是`...
在Android开发中,Java语言是主要的编程工具,而在Java中,`instanceof`关键字扮演着重要的角色。本文将深入探讨`instanceof`的关键字用法及其在Android开发中的应用场景。 `instanceof`是一个二元操作符,它用于...
Java 中 instanceof 与 Class 的等价性代码示例 Java 中的 `instanceof` 运算符是一个二元操作符,用于检查对象是否属于某个特定类或其子类。它返回一个布尔值,指示对象是否是该类或其子类的一个实例。在 Java 中...
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编程入门...
`instanceof`是Java语言中的一个关键字,用于检查对象的类型。它可以帮助程序员确定对象是否属于特定类或者其子类(或实现的接口)的实例。`instanceof`操作符的语法结构是: ```java object instanceof ClassName ...
Java是一种广泛使用的面向对象的编程语言,以其跨平台、高性能和丰富的类库而备受开发者喜爱。在准备"JAVA考试试题"时,考生需要对Java语言的各个方面有深入的理解。以下是一些可能涵盖的重要知识点: 1. **基础...
在Java编程语言中,`instanceof` 和 `getClass()` 是两个重要的操作符和方法,它们在类型检查和对象实例识别方面发挥着关键作用。本文将深入探讨这两个概念的区别及其应用场景。 `instanceof` 关键字主要用于判断一...
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 instanceof 关键字的几种用法。 1)声明一个 class 类的对象,判断 obj 是否为 class 类的实例对象(很普遍的一种用法),如以下代码: Integer integer = new Integer(1); System.out.println...