- 浏览: 89403 次
- 性别:
- 来自: 广州
-
最新评论
关于类型,我们说了不少,现在大家能够理解的是,类型是变量指针所指的特定地址段可存储的数据类型描述。理论上,该段地址只可以接收相同类型的数据。实际上,只要符合今天介绍的几个规则,不同类型之间也可以实现强转。
首先看看以下例子:
上面的代码是合法的,也就是说,我们把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 8715如果我们的SQL语句是固 ... -
JAVA简单教程:数据库操作(二)
2010-03-10 11:09 2184今天来分析一下上次的 ... -
JAVA简单教程:数据库操作(一)
2010-03-05 16:40 1922最近依然是事情太多,一直无法坚持每天写份blog,对不起大家。 ... -
每天JAVA简单教学:枚举类
2010-02-02 14:41 1567今天给大家介绍一个JDK1.5的新特性:枚举类 先来看看以下 ... -
每天JAVA简单教学:类定义,成员类,抽象类及接口类
2010-01-27 11:58 1615最近忙得快疯掉了,而且着凉了病得好辛苦。。。不过今天还是能抓紧 ... -
每天JAVA简单教学:简单数据类型、地址比较和值比较
2010-01-18 11:48 2315昨天说了布朗运算,今天详细解释一下其中的==运算符和Objec ... -
每天JAVA简单教学:布朗运算
2010-01-15 14:46 2302布朗值,就是true和false,对于产生这两个值的运算,就是 ... -
每天JAVA简单教学:基本运算符
2010-01-13 18:09 1098今天来介绍一些基础运算符,先用int整数类型做介绍,最后用St ... -
每天简单JAVA教学:循环语法(二)
2010-01-07 10:07 1556自从JRE升级到1.5以后,java的for循环就更加方便了。 ... -
每天简单JAVA教学:循环语法(一)
2010-01-06 13:32 2099现在开始介绍跟变成有密切关系的Java语法,首先来介绍循环的写 ... -
每天简单JAVA教学:super和this
2010-01-05 11:49 1598因为实在太忙这么多天来都没时间上来写东西,感觉非常对不起大家。 ... -
每天简单JAVA教学:变量
2009-12-28 16:02 1283很抱歉,最近事忙,所以很少有时间上来写东西,希望大家见谅。 ... -
每天简单JAVA教学:类继承,重写、重构及重载,final的用法
2009-12-23 12:25 4050昨天事忙,所以没时间给大家写blog,抱歉一下。 今天说的内 ... -
每天简单JAVA教学:JVM的内存管理,static的用法
2009-12-21 14:41 2622今天的主题是介绍static和final这两个指示器的用法。但 ... -
每天简单JAVA教学:Modifier
2009-12-18 10:31 9588昨天给大家介绍了怎么进行同一个类里面的方法调用,今天将会给大家 ... -
每天简单JAVA教学:方法的调用
2009-12-17 14:59 1305继续我们的简单教学。 ... -
每天简单JAVA教学:第一个main程序分析
2009-12-16 23:12 1599上次我们轻松地完成了H ... -
每天简单JAVA教学:Hello World!
2009-12-16 00:39 1570以下文章只适合新手,新是很新很新的新。。。。自认对编程和JAV ...
相关推荐
java教学课件:10Java--RMI.ppt
### 深入分析Java中的类型转换 #### 类型转换概述 类型转换是Java编程语言中的一个重要特性,它使得程序可以在不同类型的数据之间进行转换。在Java中,类型转换主要分为两大类:**隐式自动类型转换**和**强制手动...
java教学课件:第一章 Java的类.ppt
java教学课件:第7章 多线程.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...
根据提供的信息,我们可以总结出以下关于“Java视频教学”的相关知识点: ### Java视频教程概览 #### 标题解析: - **标题:“java 视频教学 下载地址”**:这个标题表明这是一个提供Java视频教学资源下载的地方。...
资源名称:Java范例开发大全教学视频及源码(22集)资源目录:【】Java范例开发大全教学视频及源码01【】Java范例开发大全教学视频及源码02【】Java范例开发大全教学视频及源码03【】Java范例开发大全教学视频及源码...
Oracle9i 数据类型、Java 数据类型以及 Schema 类型之间的对比主要关注它们在存储和处理数据时的差异。这些数据类型是编程和数据库管理中的基础,理解它们的关系对于开发与数据库交互的应用程序至关重要。 1. ...
### 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 Swing 库:服务器端代码使用 Java Swing 库来创建简单的界面。 * Java 集合框架:服务器端代码使用 Java 集合框架来存储用户信息。 * Java IO 编程:服务器端代码使用 Java IO 编程来读取和写入文件。 结论 ...
这份"java教学讲义"旨在为初学者提供一个全面且易懂的学习路径,帮助他们顺利入门Java世界。 讲义内容可能涵盖以下几个关键知识点: 1. **Java简介**:介绍Java的历史、特点和应用领域,解释为什么Java被广泛使用...
在教学过程中,教师可以采取一些方法来克服学生的畏难情绪,例如,强调JAVA编程的简单性,使用简单易懂的代码和流程控制,避免涉及数据结构的内容,采用循序渐进的教学方法等。 以下是JAVA课程教学心得的知识点: ...
在本项目中,"java实现的教学管理系统"是一个适合Java初学者深入学习的实践案例。它涵盖了面向对象编程、数据管理以及简单的用户交互等基础概念,是理解Java编程语言特性和应用的良好起点。以下是对这个系统及其相关...
Java基础教学.ppt Java 是一种广泛使用的高级编程语言,它具有平台独立性、面向对象、简单易用等特点。下面是 Java 基础教学的知识点概要: Java 简介 Java 是由 Sun Microsystems 公司(现在是 Oracle 公司)...