- 浏览: 171616 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (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 718Java性能优化技巧 在JAVA程序中,性能问题的大部分原 ... -
java内部类的作用
2013-03-30 11:06 730java内部类的作用一、 ... -
StringTokenizer 用法
2013-03-25 09:29 1260StringTokenizer是一个用来分隔String的应 ... -
Java日志框架
2013-03-17 17:17 892Java日志框架 Log4j Ap ... -
java nio Buffer 中 compact的作用
2013-03-12 17:29 1680java nio Buffer 中 compact的作用 ... -
java annotation 入门
2013-03-11 11:23 738一. 最常见的annotation@Override:用在方法 ... -
Java中assert关键字的实现
2013-03-08 17:12 1045Java中assert关键字的实现 J2SE 1.4 ... -
java正则表达式
2013-03-07 08:42 661众所周知,在程序开发中,难免会遇到需要匹配、查找、替换、判 ... -
java对cookie的操作
2013-03-10 10:31 799java对cookie的操作 java对cookie的操 ... -
eclipse中的.project 和 .classpath文件的具体作用
2013-02-27 16:38 676eclipse中的.project 和 .cla ... -
Java中Split函数的用法技巧
2013-02-25 13:48 1567Java中Split函数的用法 ... -
如何把安全证书导入到java中的cacerts证书库
2013-02-21 11:21 1931如何把安全证书导入到java中的cacerts证书库 在项 ... -
java Comparable Comparator 接口
2013-02-19 15:58 7581.什么是Comparable接口 此接口强行对实现它的每 ... -
java环境变量配置
2012-08-28 21:51 694java环境变量配置 windows xp下配置JDK环 ... -
Java应用程序添加退出事件响应
2012-08-22 20:37 1158一个完整的Java应用程序,通常至少要有一个应用程序的结束点。 ... -
java 读取 doc poi读取word中的表.txt
2012-08-22 20:34 1711import java.io.File; import j ... -
java压缩和解压缩例子
2012-08-21 21:26 1053java压缩和解压缩例子 压缩时,在压缩文件夹中新建目录,en ... -
Java反射,根据类名创建带参数的实例
2012-08-21 21:26 2191public Object dynCreateClassIns ... -
java异常时如何执行
2012-08-21 21:26 652代码如下: public class Test{ publi ... -
java 读写txt文件
2012-08-21 21:27 868java 读写txt文件 读取 ...
相关推荐
主要介绍了java instanceof操作符使用及原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Java instanceof关键字的的进一步理解,本文用一些实例讲解了instanceof操作符的一些知识,需要的朋友可以参考下
java instanceof运算符
Java instanceof 运算符的使用方法
instanceof关键字用于判断一个引用类型变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例.这篇文章主要介绍了Android中Java instanceof关键字全面解析的相关资料,需要的朋友可以参考下
主要介绍了Java instanceof和getClass()区别实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
RednaxelaFX,从事JVM研发戴翔、咚咔、evenX86 等人赞同在进入正题前先得提一句:既然楼主提问的背景是“被面试问到”,那很重要的一点
主要介绍了Java instanceof用法详解及实例代码的相关资料,需要的朋友可以参考下
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编程入门...