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--避免引用类型强制转化出错的更多相关文章

  1. java上转型和下转型(对象的多态性)

    /*上转型和下转型(对象的多态性) *上转型:是子类对象由父类引用,格式:parent p=new son *也就是说,想要上转型的前提必须是有继承关系的两个类. *在调用方法的时候,上转型对象只能调 ...

  2. Java上转型和下转型

    Java 转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象. 什么叫父类引用指向子类对象,且听我慢慢道来. 从2个名词开始说起:向上转型(upcasting) .向下转型(downcasti ...

  3. java中的上转型解释(多态的另一种)

    我们先来看个例子: public class Polymorphism extends BaseClass{ public String book="轻量级j2ee教程"; pub ...

  4. JAVA之旅(八)——多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例

    JAVA之旅(八)--多态的体现,前提,好处,应用,转型,instanceof,多态中成员变量的特点,多态的案例 学习是不能停止的 一.多态 我们今天又要学习一个新的概念了,就是多态,它是面向对象的第 ...

  5. Java中对象的上转型对象

    1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 则称A类 ...

  6. java 对象的上转型对象(父类)

    Example5_10.java class 类人猿 { void crySpeak(String s) { System.out.println(s); } } class People exten ...

  7. java中的上转型对象

    1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 通俗的说 ...

  8. 关于java的上转型对象

    1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 则称A类 ...

  9. Java学习——上转型与下转型对象

    上转型:重写父类方法才调用子类方法,其他仍用父类的,包括被子类隐藏的父类成员变量,而且不能调用子类新增的成员变量和成员方法. 下转型:只能是转上去的才能转下去.下转型类似于该子类直接继承父类. pac ...

随机推荐

  1. STS - 配置Tomcat 运行路径

    背景 今天在一台新机器上面安装开发环境,下载完code以后在STS上配置Tomcat,发现启动以后无法读取到配置文件...启动失败! 七月 , :: 上午 org.apache.catalina.co ...

  2. 学生党如何拿到阿里技术offer:《阿里面试经历-2014.4.18研发实习生面试经历(失败)》

    我们分享的上一篇文章是一位学长在大三的时候面试阿里实习生成功的经历的分享,其实就像学长在上一篇文章最后说的那样“面试并没有想的那么难,运气也会占一部分.”,其实我个人觉得,对于我们而言,自己越努力就会 ...

  3. 函数和object

    普通函数 在javascript中,函数是一等公民,函数在javascript是一个数据类型,而非像C#或其他描述性语言那样仅仅作为一个模块来使用. 一.函数调用形式 函数调用形式是最常见的形式,也是 ...

  4. cocostudio使用plist创建序列帧动画图片名称序列错乱的问题

    cocostudio 版本v2.2.9 用texturePacker将动画帧打包成一个plist和一张png,将plist拖入cocostudio中的资源栏中. 如图所示,plist里面的图片顺序是乱 ...

  5. MySQL多实例介绍

    我们前面已经做了MySQL数据库的介绍以及为什么选择MySQL数据库,最后介绍了MySQL数据库在Linux系统下的多种安装方式,以及讲解了MySQL的二进制方式单实例安装.基础优化等,下面给大家讲解 ...

  6. 怎么分辨linux系统是虚拟机还是物理机

    用lspci -b|grep "VMware"抓取系列信息,即表明此系统的宿主机是基于VMware虚拟出来的,别的可以照葫芦画瓢来!

  7. 第八篇 实例化Flask的参数 及 对app的配置

    Flask 是一个非常灵活且短小精干的web框架 , 那么灵活性从什么地方体现呢? 有一个神奇的东西叫 Flask配置 , 这个东西怎么用呢? 它能给我们带来怎么样的方便呢? 首先展示一下: from ...

  8. C# 6 与 .NET Core 1.0 高级编程 - C# 6 的新功能

    个人原创译文,转载请注明出处.有不对的地方欢迎指出与交流. 英文原文:Professional C# 6 and .NET Core 1.0 - What’s New in C# 6 C# 6 的新功 ...

  9. postgresql 相关

    http://www.yiibai.com/html/postgresql/2013/080998.html 1.安装PG的client以及函数库: yum install postgresql    ...

  10. 易捷框架之EChart 的使用

    需要用到百度的报表控件 ,总结如下: 1,先引入开发包,以及主题包: <%@ include file="./common/echarts_header.jsp"%> ...