- 浏览: 89154 次
- 性别:
- 来自: 广州
最新评论
关于类型,我们说了不少,现在大家能够理解的是,类型是变量指针所指的特定地址段可存储的数据类型描述。理论上,该段地址只可以接收相同类型的数据。实际上,只要符合今天介绍的几个规则,不同类型之间也可以实现强转。
首先看看以下例子:
上面的代码是合法的,也就是说,我们把Integer对象实例强行存放到Object类型指针obj中。并且,从控制台显示的结果来看,这个实例仍然是Integer类型,只是由于obj指针对外宣称是Object类型,因此我们无法访问子类Integer的其它方法。
因此我们可以知道,父类指针可以接收子类对象的类型强转。此时父类的指针就是子类实例的一个映射,它只开放父类的方法及属性,而隐含了子类的其它方法及属性。
所以我们也需要更正一下我们对于指针的理解。并不是指针限制了存储数据的大小和类型,而是指针限制了对外访问特定地址段数据的方法。也就是说,指针只是告诉我们某某地址段中我们可以访问什么,如果地址段存储的类和指针类型完全没有交集,即使有关系也无法直接通过类型强转访问。不过后期的代理倒可以做到,不过这个已经是说类映射这种高级行为时介绍的东西了。
除了父类和子类可以强转之外,还有以下类之间可以强转:
实现类 --> 强转为 --> 抽象类
实现类 --> 强转为 --> 接口类
容量小的简单类型 --> 强转 --> 容量大的简单类型
* 容量大的简单类型 --> 强转 --> 容量小的简单类型
$ 父类 --> 强转为 --> 子类
注意*号的转换,虽然时支持的,但是如果待转换的数据大小超出转换后的大小的话,强转之后的结果会和原来的不一样,看看下面的例子:
执行结果:
所以最后一种我们不建议使用。
当然,像$所指的情况,不会引起编译错误,但是实际上运行的时候会出问题:
虽然代码可以编译通过,但是运行结果如下:
综合来说,逆转换都是危险的。大家要去避免。
今天涉及到接口、抽象类这两个概念,将于明天给大家介绍。
首先看看以下例子:
package typeconvert; public class TypeConvertionDemo1 { public static void main(String[] args) { Object obj = (Object)new Integer(1); System.out.println(obj.getClass()); } }
上面的代码是合法的,也就是说,我们把Integer对象实例强行存放到Object类型指针obj中。并且,从控制台显示的结果来看,这个实例仍然是Integer类型,只是由于obj指针对外宣称是Object类型,因此我们无法访问子类Integer的其它方法。
因此我们可以知道,父类指针可以接收子类对象的类型强转。此时父类的指针就是子类实例的一个映射,它只开放父类的方法及属性,而隐含了子类的其它方法及属性。
所以我们也需要更正一下我们对于指针的理解。并不是指针限制了存储数据的大小和类型,而是指针限制了对外访问特定地址段数据的方法。也就是说,指针只是告诉我们某某地址段中我们可以访问什么,如果地址段存储的类和指针类型完全没有交集,即使有关系也无法直接通过类型强转访问。不过后期的代理倒可以做到,不过这个已经是说类映射这种高级行为时介绍的东西了。
除了父类和子类可以强转之外,还有以下类之间可以强转:
实现类 --> 强转为 --> 抽象类
实现类 --> 强转为 --> 接口类
容量小的简单类型 --> 强转 --> 容量大的简单类型
* 容量大的简单类型 --> 强转 --> 容量小的简单类型
$ 父类 --> 强转为 --> 子类
注意*号的转换,虽然时支持的,但是如果待转换的数据大小超出转换后的大小的话,强转之后的结果会和原来的不一样,看看下面的例子:
package typeconvert; public class PrimitiveConvertionDemo { public static void main(String[] args) { System.out.println((int)123456789012345678L); } }
执行结果:
所以最后一种我们不建议使用。
当然,像$所指的情况,不会引起编译错误,但是实际上运行的时候会出问题:
package typeconvert; public class TypeConvertionDemo2 { public static void main(String[] args) { Integer obj = (Integer)new Object(); System.out.println(obj.getClass()); } }
虽然代码可以编译通过,但是运行结果如下:
综合来说,逆转换都是危险的。大家要去避免。
今天涉及到接口、抽象类这两个概念,将于明天给大家介绍。
发表评论
-
JAVA简单教程:数据库操作(三)——PreparedStatement和动态SQL
2010-03-12 12:30 8708如果我们的SQL语句是固 ... -
JAVA简单教程:数据库操作(二)
2010-03-10 11:09 2178今天来分析一下上次的 ... -
JAVA简单教程:数据库操作(一)
2010-03-05 16:40 1914最近依然是事情太多,一直无法坚持每天写份blog,对不起大家。 ... -
每天JAVA简单教学:枚举类
2010-02-02 14:41 1557今天给大家介绍一个JDK1.5的新特性:枚举类 先来看看以下 ... -
每天JAVA简单教学:类定义,成员类,抽象类及接口类
2010-01-27 11:58 1610最近忙得快疯掉了,而且着凉了病得好辛苦。。。不过今天还是能抓紧 ... -
每天JAVA简单教学:简单数据类型、地址比较和值比较
2010-01-18 11:48 2311昨天说了布朗运算,今天详细解释一下其中的==运算符和Objec ... -
每天JAVA简单教学:布朗运算
2010-01-15 14:46 2295布朗值,就是true和false,对于产生这两个值的运算,就是 ... -
每天JAVA简单教学:基本运算符
2010-01-13 18:09 1096今天来介绍一些基础运算符,先用int整数类型做介绍,最后用St ... -
每天简单JAVA教学:循环语法(二)
2010-01-07 10:07 1542自从JRE升级到1.5以后,java的for循环就更加方便了。 ... -
每天简单JAVA教学:循环语法(一)
2010-01-06 13:32 2096现在开始介绍跟变成有密切关系的Java语法,首先来介绍循环的写 ... -
每天简单JAVA教学:super和this
2010-01-05 11:49 1589因为实在太忙这么多天来都没时间上来写东西,感觉非常对不起大家。 ... -
每天简单JAVA教学:变量
2009-12-28 16:02 1277很抱歉,最近事忙,所以很少有时间上来写东西,希望大家见谅。 ... -
每天简单JAVA教学:类继承,重写、重构及重载,final的用法
2009-12-23 12:25 4041昨天事忙,所以没时间给大家写blog,抱歉一下。 今天说的内 ... -
每天简单JAVA教学:JVM的内存管理,static的用法
2009-12-21 14:41 2618今天的主题是介绍static和final这两个指示器的用法。但 ... -
每天简单JAVA教学:Modifier
2009-12-18 10:31 9578昨天给大家介绍了怎么进行同一个类里面的方法调用,今天将会给大家 ... -
每天简单JAVA教学:方法的调用
2009-12-17 14:59 1293继续我们的简单教学。 ... -
每天简单JAVA教学:第一个main程序分析
2009-12-16 23:12 1592上次我们轻松地完成了H ... -
每天简单JAVA教学:Hello World!
2009-12-16 00:39 1563以下文章只适合新手,新是很新很新的新。。。。自认对编程和JAV ...
相关推荐
java教学课件:10Java--RMI.ppt
java教学课件:第一章 Java的类.ppt
Java并发编程:设计原则与模式(第二版).pdf
java教学课件:第7章 多线程.ppt
java教学课件:第6章 数据流的运用.ppt
个人java学习项目一:简易拼图游戏.zip个人java学习项目一:简易拼图游戏.zip 个人java学习项目一:简易拼图游戏.zip个人java学习项目一:简易拼图游戏.zip 个人java学习项目一:简易拼图游戏.zip个人java学习项目一...
编程选择题40道:Java语言基础:数据类型与变量.Tex.docx
### MySQL与Java数据类型对应详解 #### 概述 在进行数据库操作时,尤其是在使用Java进行MySQL数据库开发的过程中,正确地映射数据类型是至关重要的一步。本文将详细介绍MySQL中的各种数据类型及其在Java中的对应...
在Java编程中,类型转换是常见的操作,尤其是在处理对象与基本数据类型,或者不同集合类之间的转换时。本文将深入探讨Java中的一些关键转换技术,包括基本数据类型的转换、JSONObject到Map的转换以及JSONArray到List...
3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...
在Java中,Jython是一个非常有用的工具,它允许我们在Java应用程序中嵌入Python代码,并能够无缝地在Python数据类型和Java数据类型之间进行转换。这极大地扩展了Java的生态系统,让我们能够利用Python丰富的库和简洁...
* 显式转换:类型强转,把一个大类型的数据强制赋值给小类型的数据 * 隐式转换:大范围的变量能够接受小范围的数据 拆装箱 * 拆箱:把包装类型转成基本数据类型 * 装箱:把基本数据类型转成包装类型 Java中的包装...
根据提供的信息,我们可以总结出以下关于“Java视频教学”的相关知识点: ### Java视频教程概览 #### 标题解析: - **标题:“java 视频教学 下载地址”**:这个标题表明这是一个提供Java视频教学资源下载的地方。...
资源名称:Java范例开发大全教学视频及源码(22集)资源目录:【】Java范例开发大全教学视频及源码01【】Java范例开发大全教学视频及源码02【】Java范例开发大全教学视频及源码03【】Java范例开发大全教学视频及源码...
### Java基础教学大纲知识点解析 #### 一、教学目标要求 - **理解Java语言的优点**: - 面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态等特性。 - 平台独立性:Java程序可以在任何安装了Java...
【标题】: "使用Java开发的实验教学资源管理系统" 是一个专为教育环境设计的软件应用,它利用Java编程语言的强大功能,为教师、学生和管理员提供了一个集中的平台,用于管理和分享实验教学资源。 【描述】: 这个...
本教学设计主要关注Java的基本语法,包括代码的基本格式、注释、标识符、关键字以及常量的使用。以下是这些关键概念的详细解释: 1. **Java代码的基本格式**: - Java代码由结构定义语句(如类或方法声明)和功能...
一些常用的java工具类:Date和String类型互转,获取想要格式的String类型的日期时间、java导出数据到Excel、http文件下载、HMAC-MD5加密、3DES加密、MD5加密、读写txt文件、zip解压缩文件、文件夹等
"基于项目驱动的Java实践教学" 基于项目驱动的Java实践教学是指在Java教学中,采用项目驱动的方法来培养学生的兴趣和能力。这种方法可以提高学生的学习积极性和创造性,并且可以更好地适应社会的需求。 Java教学中...
* Java Swing 库:服务器端代码使用 Java Swing 库来创建简单的界面。 * Java 集合框架:服务器端代码使用 Java 集合框架来存储用户信息。 * Java IO 编程:服务器端代码使用 Java IO 编程来读取和写入文件。 结论 ...