java上转型之instanceof--避免引用类型强制转化出错
Object obj="hello";
上面的obj是什么类型?
object?NO!String?NO?
答案:编译阶段是Object类型,而在运行阶段是String类型。实际上obj是String类型。只不过分为编译和运行两个部分!
那为什么会发生这种情况呢?
我们知道:对于Object obj而言,程序声明了一个Object类型的变量!
而“hello”是一个String类型的对象
将Object类型的变量只想String类型的对象,由上篇可以看出这是一个上转型类型!变量由String类型转到Object类型!
由上转型的知识我们知道,在运行期间,对象是直接调用子类String中的方法(但是变量仍然是调用父类中的变量)
我们必须清楚这种引用类型的强制类型转化是非常危险的
如: Object obj="hello"; Integer in=obj;
这也就引出了如何避免强制引用类型转化的问题:在java中我们用instanceof 来判断一个引用类型是否可以转化到其他类型
instanceof 用于判断某个对象是否是一个类或则子类,实现类,接口的实例,如果是 则返回true,如何不是则返回false
例子:
public static void main(String[] args) {
// TODO Auto-generated method stubs
Object hello="hello";
//hello运行时就是String类型:true
System.out.println((hello instanceof String));
//hello运行时String类型,而String类型是Object类型的子类,子类上转型:true
System.out.println((hello instanceof Object));
//String 类型和Math类型风马牛不相及:false
System.out.println((hello instanceof Math));
//String 类型也是Comparable类型的子类:true
System.out.println((hello instanceof Comparable)); //Integet是Object的子类
Integer inte=new Integer(7);
System.out.println(inte instanceof Object); //不能下转型:false
Object object=new Object();
System.out.println("object is Integer:"+(object instanceof Integer)); Integer k=10;
if((k instanceof Object))
{
object=k; //可以执行,因为k就是一个Integer类型,而Integer类型是Object类型的一个子类,符合上转型
}
//通Object o="sf";
Object o=7;
System.out.println(o instanceof Integer); }
java上转型之instanceof--避免引用类型强制转化出错的更多相关文章
- java上转型和下转型(对象的多态性)
/*上转型和下转型(对象的多态性) *上转型:是子类对象由父类引用,格式:parent p=new son *也就是说,想要上转型的前提必须是有继承关系的两个类. *在调用方法的时候,上转型对象只能调 ...
- Java上转型和下转型
Java 转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象. 什么叫父类引用指向子类对象,且听我慢慢道来. 从2个名词开始说起:向上转型(upcasting) .向下转型(downcasti ...
- java中的上转型解释(多态的另一种)
我们先来看个例子: public class Polymorphism extends BaseClass{ public String book="轻量级j2ee教程"; pub ...
- JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例
JAVA之旅(八)--多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例 学习是不能停止的 一.多态 我们今天又要学习一个新的概念了,就是多态,它是面向对象的第 ...
- Java中对象的上转型对象
1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 则称A类 ...
- java 对象的上转型对象(父类)
Example5_10.java class 类人猿 { void crySpeak(String s) { System.out.println(s); } } class People exten ...
- java中的上转型对象
1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 通俗的说 ...
- 关于java的上转型对象
1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 则称A类 ...
- Java学习——上转型与下转型对象
上转型:重写父类方法才调用子类方法,其他仍用父类的,包括被子类隐藏的父类成员变量,而且不能调用子类新增的成员变量和成员方法. 下转型:只能是转上去的才能转下去.下转型类似于该子类直接继承父类. pac ...
随机推荐
- Mac运维安装软件
Maccrt软件 sudo spctl --master-disable 打开软件,复制到app,按照sn.txt输入即可 sudo spctl --master-enable crt快捷键crtl ...
- oracle 存储过程 建表插值等
建表.插值的procedure create or replace procedure CREATE_EMP is v_createsql ); v_insertsql ); begin v_crea ...
- servlet对应.net中的http上下文
java中的servlet在.net中其实就是http上下文.
- MetaboAnalysis KEGG match methods
1.KEGG regexdb.idmap.find({"name":{"$regex":"Prolyl-hydroxyproline",&q ...
- [ Python ] Flask 基于 Web开发 大型程序的结构实例解析
作为一个编程入门新手,Flask是我接触到的第一个Web框架.想要深入学习,就从<FlaskWeb开发:基于Python的Web应用开发实战>这本书入手,本书由于是翻译过来的中文版,理解起 ...
- 5.docker学习之容器
容器创建 我们已经知道,镜像是只读的,而基于镜像创建出来的容器是可读写的,所以,一般我们实际中,会经常使用对应镜像创建容器并且使用这些容器.同样,如果我们想要使用容器,那么我们必须首先需要创建容器.而 ...
- php Reflection
<?php function title($title, $name) { return sprintf("%s. %s\r\n", $title, $name); } $f ...
- Flask之模板之宏、继承、包含
3.5 宏.继承.包含 类似于python中的函数,宏的作用就是在模板中重复利用代码,避免代码冗余. Jinja2支持宏,还可以导入宏,需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有 ...
- Service和Thread的关系
Service确实是运行在主线程里的,也就是说如果你在Service里编写了非常耗时的代码,程序必定有问题. Android的后台就是指,它的运行是完全不依赖UI的.即使Activity被销毁,或者程 ...
- ListBox和ComboBox绑定数据简单例子
1. 将集合数据绑定到ListBox和ComboBox控件,界面上显示某个属性的内容 //自定义了Person类(有Name,Age,Heigth等属性) List<Person> per ...