精华内容
下载资源
问答
  • JAVA强制类型转换

    2017-12-18 16:07:44
    JAVA强制类型转换强制类型转换

    JAVA强制类型转换

    强制类型转换

    展开全文
  • java 强制类型转换

    千次阅读 2017-04-20 23:57:24
    最近在做网络请求的数据解析时,在考虑是用范型还是强制类型转换,范型是从java1.5出来的,好处是安全简单,可以将运行时错误提前到编译时错误,但是如果用范型的话,我需要每一个网络请求,都写一个类,感觉好麻烦...

    学以致用~
    最近在做网络请求的数据解析时,在考虑是用范型还是强制类型转换,范型是从java1.5出来的,好处是安全简单,可以将运行时错误提前到编译时错误,但是如果用范型的话,我需要每一个网络请求,都写一个类,感觉好麻烦,所以就用的强制类型转换。但又老觉得强制类型转换不太安全,网上都说容易报ClassCastException,所以多了解了下关于强制转换类型的知识。

    在java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换。

    在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。因为子类拥有比父类更多的属性、更强的功能,所以父类转换为子类需要强制。那么,是不是只要是父类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的。

    当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了。在Java中我们可以通过继承、向上转型的关系使用父类类型来引用它,这个时候我们是使用功能较弱的类型引用功能较强的对象,这是可行的。但是将功能较弱的类型强制转功能较强的对象时,就不一定可以行了。

    举个例子来说明。比如系统中存在Father、Son两个对象。首先我们先构造一个Son对象,然后用一个Father类型变量引用它:

     Father father = new Son();

    在这里Son 对象实例被向上转型为father了,但是请注意这个Son对象实例在内存中的本质还是Son类型的,只不过它的能力临时被消弱了而已,如果我们想变强怎么办?将其对象类型还原!

    Son son = (Son)father;

    这条语句是可行的,其实father引用仍然是Father类型的,只不过是将它的能力加强了,将其加强后转交给son引用了,Son对象实例在son的变量的引用下,恢复真身,可以使用全部功能了。

    前面提到父类强制转换成子类并不是总是成功,那么在什么情况下它会失效呢?

    当引用类型的真实身份是父类本身的类型时,强制类型转换就会产生错误。例如:

     Father father = new  Father();
     Son son = (Son) father;

    这个系统会抛出ClassCastException异常信息。

    所以编译器在编译时只会检查类型之间是否存在继承关系,有则通过;而在运行时就会检查它的真实类型,是则通过,否则抛出ClassCastException异常。

    所以在继承中,子类可以自动转型为父类,但是父类强制转换为子类时只有当引用类型真正的身份为子类时才会强制转换成功,否则失败。

    当我从服务器中取出数据,如何将它放到模型里去呢?如下:

    Gson gson = new Gson();
    Model model = gson.fromJson(data, SonModel.class);

    其中SonModel是Model的子类。刚开始,这个代码我是无意中写出来的,一直也不太理解是什么意思,现在理解了。
    其实

    Model model = gson.fromJson(data, SonModel.class);

    这个语句,SonModel实例被向上转型了,虽然获取的是model实例,但是gson.fromJson(data, SonModel.class)在内存中的本质还是SonModel对象,所以后面再强制转换也是没问题的~

    SonModel sonModel = (SonModel)model;
    展开全文
  • java强制类型转换

    千次阅读 2018-10-28 11:54:48
    Java强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换。 在 Java 中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要...

    在 Java 中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换。

    在 Java 中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换。因为子类拥有比父类更多的属性、更强的功能,所以父类转换为子类需要强制。那么,是不是只要是父类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的。

    当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了。在 Java 中我们可以通过继承、向上转型的关系使用父类类型来引用它,这个时候我们是使用功能较弱的类型引用功能较强的对象,这是可行的。但是将功能较弱的类型强制转功能较强的对象时,就不一定可以行了。

    举个例子来说明。比如系统中存在 Father、Son 两个对象。首先我们先构造一个 Son 对象,然后用一个Father类型变量引用它:

    Father father = new Son();

    在这里 Son 对象实例被向上转型为 father 了,但是请注意这个 Son 对象实例在内存中的本质还是 Son 类型的,只不过它的能力临时被消弱了而已,如果我们想变强怎么办?将其对象类型还原!

    Son son = (Son)father;

    这条语句是可行的,其实 father 引用仍然是 Father 类型的,只不过是将它的能力加强了,将其加强后转交给 son 引用了,Son 对象实例在 son 的变量的引用下,恢复真身,可以使用全部功能了。

    前面提到父类强制转换成子类并不是总是成功,那么在什么情况下它会失效呢?

    当引用类型的真实身份是父类本身的类型时,强制类型转换就会产生错误。例如:

    Father father = new Father();

    Son son = (Son) father;

    这个系统会抛出ClassCastException 异常信息。

    所以编译器在编译时只会检查类型之间是否存在继承关系,有则通过;而在运行时就会检查它的真实类型,是则通过,否则抛出 ClassCastException异常。

    所以在继承中,子类可以自动转型为父类,但是父类强制转换为子类时只有当引用类型真正的身份为子类时才会强制转换成功,否则失败。

    转自:

    http://wiki.jikexueyuan.com/project/java-enhancement/java-eleven.html

    展开全文
  • Java 强制类型转换

    千次阅读 2019-01-09 10:25:20
    强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟带转换的变量名。例如: double x = 9.997; int nx = (int)x; 这样,变量nx的值为9。强制类型转换通过截断小数部分将浮点值转换为整型。 ...

    强制类型转换的语法格式是在圆括号中给出想要转换的目标类型,后面紧跟带转换的变量名。例如:

    double x = 9.997;
    int nx = (int)x;

    这样,变量nx的值为9。强制类型转换通过截断小数部分将浮点值转换为整型。

    如果想对浮点数进行舍入运算,以便得到最接近的整数(在很多情况下,这种操作更有用),那就需要使用Math.round方法:

    double x = 9.997;
    int nx = (int)Math.round(x);

    现在,变量nx的值为10.当调用round的时候,任然需要使用强制类型转换(int)。其原因是round方法返回的结果为long类型,由于存在信息丢失的可能性,所以只有使用显示的强制类型转换才能够将long类型转换为int类型。

    警告:如果试图将一个数值从一种类型强制转换为另一种类型,而又超出了目标类型的表示范围,结果就会截断成一个完全不同的值。例如,(byte)300 的实际值为 44。

    展开全文
  • java强制类型转换

    2009-05-07 13:14:00
    强制类型转换可以发生在:1)基本类型的强制转换2)引用类型的强制转换,强制类型转换是发生在引用上,不是发生在实体上。从子类引用转换到父类引用,是不需要类型转换的;强制转换发生在父类引用到子类引用的情况下...
  • JAVA强制类型转换常见错误

    千次阅读 2016-11-18 10:02:14
    这篇文章主要讲解:JAVA强制类型转换经常遇到的问题,主要分为2种情况。 1、当两个类没有继承关系时: package Test; public class Test { public static void main(String []args) { C c = new C(); B b = (B...
  • Java强制类型转换
  • Java中的强制类型转换和C语言中还是有一些区别的; 进行类型转换的唯一原因是: 在暂时忽视对象的实际类型之后, 使用对象的全部功能。 比如,我们可以定义一个父类的对象,然后引用某一个子类的对象,但是此时这个对象...
  • JAVA强制类型转换的那些坑!!!

    千次阅读 2018-12-11 20:11:16
    JAVA强制类型转换的时候,在编译期间,只会校验是否有继承的关系而已!!!不会去校验继承关系的顺序,也不会去校验实现关系!!! 也就是说,父类强转成子类,以及某个类强转成任何接口,都不会在编译时报错。只会...
  • a="12345"; inti; 第一种方法:i=Integer.parseInt(a); 第二种方法:i=Integer.valueOf(a).intValue();
  • ClassCastException,从字面上看,是类型转换错误,通常是进行强制类型转换时候出的错误。下面对产生ClassCastException异常的原因进行分析,然后给出这种异常的解决方法。 这种异常是如何产生的呢?举一个比较形象...
  • 对类进行强制类型转换时,“谎报有关对象包含内容”是什么意思?求解答
  • 什么是强制转换也就是,你用一种类型接受了另一种类型,发生了类型转化,但是类型转换一般 都是向上转型的。如 int 转 double,还有 int 转 String。这些都是自动转换不要强制转换, 一般基本类型都提供包装类。如 ...
  • JAVA强制类型转换总结

    千次阅读 2016-08-29 02:15:41
    object对象转换为String的一些总结 ---------------------...在Java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能。本文将对常用的转换方法进行一个总结。常用的方法有Object.toString(),(Stri
  • java强制类型转换后调用方法加括号

    千次阅读 2017-08-14 12:02:31
    第一次: (MyService.DownloadBinder)service.startDownload(); 显示错误第二次: ((MyService.DownloadBinder)service).startDownload(); 通过问:java强制类型转换优先级是否是最低的?
  • Java常考面试题4--Java强制类型转换

    千次阅读 2017-02-08 16:54:04
    强制转换
  • java语言中对强制类型转换要求被转换的对象所属类型和即转新类型间存在直接或间接继承关系,或者说在同一科继承树上,不满足继承关系的类型间无法强转 参考强制类型转换的要求 所以SUN公司提供了instanceof关键字来...
  • Java强制类型转换原理分析

    千次阅读 2017-06-09 11:19:57
    请看下图(此处以Int型强转byte型为例): 那么,10000000怎么就变成-128了呢? 请看下图,了解负数在计算机中的存储:

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 198,133
精华内容 79,253
关键字:

java强制类型转换

java 订阅