Java面向对象程序设计教程(第二版)Java导论与基本语法ppt.ppt_第1页
Java面向对象程序设计教程(第二版)Java导论与基本语法ppt.ppt_第2页
Java面向对象程序设计教程(第二版)Java导论与基本语法ppt.ppt_第3页
Java面向对象程序设计教程(第二版)Java导论与基本语法ppt.ppt_第4页
Java面向对象程序设计教程(第二版)Java导论与基本语法ppt.ppt_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章Java导论 2020年2月15日1时6分 Java面向对象程序设计教程 2 主要内容 1 1Java语言的特点1 1 1简单的面向对象程序设计语言1 1 2健壮安全的分布式语言1 1 3结构中立 可移植性强的解释型语言1 1 4高效能1 1 5支持多线程的动态语言1 1 6Java与几种常用语言的比较1 2Java执行环境1 2 1JVM机制 Java平台的基础1 2 2自动垃圾收集1 2 3保护域机制与沙箱模型1 2 4类加载器 启动引擎的点火器1 3JDK的组成与安装设置1 3 1Java平台的组成结构1 3 2SETPATH和SETCLASSPATH的作用1 3 3Java开发平台简介1 4典型例子及常见问题1 4 1编译器 解释器 小程序观察器和反编译器1 4 2简单的 HelloWorld 例子1 4 3应用程序的主方法1 4 4小程序的运行 1 1Java语言的特点 2020年2月15日1时6分 Java面向对象程序设计教程 4 Java的由来 1991年初 SunMicrosystems公司设立一项较大规模 消费者电子产品先进软件发展项目 该项目是为了发展小型 可靠 可移植 分布式 实时的嵌入式系统 项目小组开发了一种与平台无关的新语言 命名为 Oak 其灵感来源于项目主持人JamesGosling办公室外的一棵橡树 Oak 它就是Java语言的前身 但因Oak名称与其它产品雷同 最后将开发的新语言取名为 Java 据说是项目小组成员经常在公司附近一家咖啡厅喝咖啡 因此把咖啡原产地Java作为新语言的名称 1995年 SunMicrosystems公司正式发布Java产品 2020年2月15日1时6分 Java面向对象程序设计教程 5 与Java有关的一些图片 Java的标识 Java的吉祥物Duke Java之父JamesGosling 2020年2月15日1时6分 Java面向对象程序设计教程 6 Java语言的特点 在Java语言白皮书中 Java被描述为 是一种简单 面向对象 分布式 解释 健壮 安全 结构中立 可移植 高效能 多线程 动态的语言 Asimple object oriented network savvy interpreted robust secure architectureneutral portable high performance multithreaded dynamiclanguage JamesGosling HenryMcGilton TheJava LanguageEnvironment AWhitePaper 2020年2月15日1时6分 Java面向对象程序设计教程 7 简单的面向对象程序设计语言 爪哇 Java总给人以小巧玲珑和C 很相近 但删除许多极少被使用 不容易理解和令人混淆的C 功能 主要包括运算符重载 多重继承以及广泛的自动强迫同型 自动垃圾收集 Automaticgarbagecollection 功能 这不仅简化了Java程序的内存分配与释放工作 而且能大幅度减少程序中的漏洞 Java程序非常小 对于在嵌入式的系统中使用是很重要的 同时也可以通过网络轻易下载 2020年2月15日1时6分 Java面向对象程序设计教程 8 健壮安全的分布式语言 Java拥有广泛的能轻易处理TCP IP协议 如HTTP与FTP等 的类库 更容易创建网络连接 除了运行时异常检查外 Java提供了广泛的编译时异常检查 以便尽早的发现可能存在的错误 同时 在Java中对象的创建机制 只能用new操作符 和自动垃圾收集机制大大减少了因内存管理不当引发的错误 Java的验证技术是以公钥加密算法为基础 2020年2月15日1时6分 Java面向对象程序设计教程 9 结构中立 可移植性强的解释型语言 为了让Java应用程序能够在网络上任何地方执行 其编译器会产出一种结构中立的字节代码 Bytecode 字节代码可以在提供Java运行时系统的多种不同处理器上面执行 Java严格定义了基本数据类型的大小和算术运算符的行为 因此不存在软硬件平台不兼容的情况 Java系统本身具备相当好的移植性 它的编译器用Java写成 而Java运行时程序则是参照POSIX 一个可移植接口工业标准 规格使用ANSIC写成的 2020年2月15日1时6分 Java面向对象程序设计教程 10 高效能 字节代码可以动态地为执行应用程序的特定CPU解释成机器码 字节代码格式在设计上即顾及机器码的产生 因此实际的机器码产生程序相当简单 解释器运行时不需检查运行环境 自动垃圾收集器设为优先级最低后台线程 以保证内存得到更有效的应用 对于运算量很大的程序可以采用原生代码编写 再经由Java平台转换 Just In Time JIT 编译技术更是让字节代码的执行速度大幅度提升 2020年2月15日1时6分 Java面向对象程序设计教程 11 支持多线程的动态语言 在Java核心类库中包含Thread类 同时Java运行时系统提供了线程监视器和同步锁定机制 多线程的其它优点包括更好的交互式回应能力与实时执行行为 Java是一种比C或C 更具动态特性的语言 它在设计上强调为进化中的运算环境提供支援 甚至可以在不中断网络服务的情况下替换相关的组件 2020年2月15日1时6分 Java面向对象程序设计教程 12 Java与几种常用语言的比较 1 2Java执行环境 2020年2月15日1时6分 Java面向对象程序设计教程 14 Java执行环境 Java源程序 java 首先被编译成字节代码 class 这些字节代码就是Java虚拟机可以解释的指令集 经过安全验证后字节代码进入虚拟机 要么经由解释器解释执行 要么由JIT编译器 也称为即时代码生成器 转成机器代码执行 程序中使用到的类则根据需要动态加载到内存中 Java执行环境由编译时 Compile time 和运行时 Runtime 环境两部分组成 2020年2月15日1时6分 Java面向对象程序设计教程 15 JRE JVM协同类加载器 字节代码校验器和Java类库一起 组成了整个Java运行环境JRE 一次编写随处运行 WriteOnceRunAnywhere WORA Java虚拟机机制 Java虚拟机 JavaVirtualMachine JVM 是一个类似于真实计算机系统的抽象机 AbstractComputingMachine 它拥有一组指令集 用来解释 class 字节代码 也就是说 JVM并不认识所谓的Java语言 而仅仅能够读懂class文件中有限的指令 符号及其他一些辅助信息 它除了负责执行指令外 还要管理数据 内存和寄存器 这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口 编译程序只需要面向虚拟机 生成虚拟机能够理解的代码 然后由解释器来将虚拟机代码转换为特定系统的机器码执行 2020年2月15日1时6分 Java面向对象程序设计教程 16 2020年2月15日1时6分 Java面向对象程序设计教程 17 JVM的组成 执行引擎负责把字节代码导入虚拟机 内存管理负责分配内存给对象和数组 并进行垃圾收集 错误和异常管理负责异常的捕获或抛出 线程接口负责对线程的支持 对原生方法 NativeMethod 的支持支持调用C C 等语言编写的方法 2020年2月15日1时6分 Java面向对象程序设计教程 18 JVM的理解 机床 数控机床 虚拟机床 数控机床 数控机床抽象 数控机床可以加工各种形状的物体 原因在于它拥有一个可以能读懂指令的核心系统 Machine VirtualMachine 2020年2月15日1时6分 Java面向对象程序设计教程 19 解释 产品 问题域 编程人员是熟悉的 但数控系统 JVM 是不认识的 编程人员根据自己的想法 在相应的平台上编写出符合产品形状要求的程序 java 2020年2月15日1时6分 Java面向对象程序设计教程 20 解释 这是程序员可以理解的程序 java 因其是接近自然语言的 但对数控系统 JVM 来说太复杂 它是读不懂的 2020年2月15日1时6分 Java面向对象程序设计教程 21 解释 于是程序员利用相应的平台把它编译成数控系统 JVM 可以理解的程序 class 于是数控机床 JVM 动起来啦 产品也做出来啦 可是最终数控机床 JVM 也没有明白它做出的产品是什么 只知道走了许许多多的直线或圆弧 JVM指令集 2020年2月15日1时6分 Java面向对象程序设计教程 22 示例 虚拟的 真实的 实现代码移植的一种技术策略 为什么要使用Java虚拟机 2020年2月15日1时6分 Java面向对象程序设计教程 23 使用Java虚拟机 其技术路线的本质就是改变了编译型语言环境把易变的应用和相对稳定的系统平台之间直接绑定的做法 通过增加语言环境的中介接口 实现了易变的应用和相对稳定的系统平台之间的松耦合 2020年2月15日1时6分 Java面向对象程序设计教程 24 保护域机制与沙箱模型 保护域 Protectiondomain 是有关系统安全的基本概念和重要模块 域界定了作为主体的系统实体对各种对象集直接访问的被许可程度 保护域概念提供一种在受保护单元中分组和隔离不安全因素的便利机制 2020年2月15日1时6分 Java面向对象程序设计教程 25 类加载器 启动引擎的点火器 加载当JVM加载类时 它寻找类或接口的二进制表示 并从这个二进制表示 通常是Java编译器生成的类文件 生成Class对象 Class对象封装类或接口的运行时状态 链接链接是取得加载的类或接口 并将其与JVM运行时环境结合起来 以准备执行的过程 初始化初始化在JVM调用类或接口初始化方法时发生 2020年2月15日1时6分 Java面向对象程序设计教程 26 类加载器 启动引擎的点火器 JVM在启动独立Java应用程序时的第一步是生成初始Class对象 表示包含publicstaticvoidmain String args 方法的Java的类 JVM链接与初始化这个类并调用main 方法 这个方法推动所需要的其他类和接口的加载 链接与初始化 1 3JDK的组成与安装设置 2020年2月15日1时6分 Java面向对象程序设计教程 28 Java平台的组成结构 2020年2月15日1时6分 Java面向对象程序设计教程 29 Java标准版 2020年2月15日1时6分 Java面向对象程序设计教程 30 Java版本的平台信息 这些软件可以从Sun公司的网站 Java版本的服务期限 2020年2月15日1时6分 Java面向对象程序设计教程 31 GAdate ReleasefamiliesgeneralavailabilitydateEOL Javatechnologyendoflife参考网址 2020年2月15日1时6分 Java面向对象程序设计教程 32 SETPATH的作用 SETPATH c jdk1 5 0 bin含义是告诉操作系统到哪里可以找到Java的编译器等可执行文件的位置 2020年2月15日1时6分 Java面向对象程序设计教程 33 SETCLASSPATH的作用 SETCLASSPATH c jdk1 5 0 lib tools jar含义是告诉操作系统到哪里可以找到编译或解释运行时所需字节代码的位置 2020年2月15日1时6分 Java面向对象程序设计教程 34 在运行环境中的设置方法 如果系统平台为Windows9X 则把以上的设置内容加入系统根目录下的autoexec bat文件中 如果系统平台为WindowsXP Windows2000及以后版本 则把以上的设置内容加入 控制面板 系统 高级 环境变量 中 Java开发平台简介 集成开发环境 IntegratedDevelopmentEnvironment IDEJCreatorEclipseNetBeans 2020年2月15日1时6分 Java面向对象程序设计教程 35 1 4典型例子及常见问题 2020年2月15日1时6分 Java面向对象程序设计教程 37 常用指令简介 编译器javac的使用解释器java的使用小程序观察器appletviewer的使用反编译器javap的使用 2020年2月15日1时6分 Java面向对象程序设计教程 38 应用程序编程举例 ApplicationStyle java packageg3ds joop ch1 publicclassApplicationStyle anapplicationpublicstaticvoidmain String args System out println HelloWorld 程序保存为ApplicationStyle java编译时执行javacApplicationStyle java 得到字节代码ApplicationStyle class 运行时执行javaApplicationStyle 2020年2月15日1时6分 Java面向对象程序设计教程 39 小程序编程举例 AppletStyle java packageg3ds joop ch1 importjava awt Graphics importjavax swing JApplet publicclassAppletStyleextendsJApplet anappletpublicvoidpaint Graphicsg g drawString HelloWorld 150 50 保存为HelloWorldShow html或HelloWorldShow htmappletviewerHelloWorldShow html HelloWorld 的演绎 2020年2月15日1时6分 Java面向对象程序设计教程 40 进一步讨论 2020年2月15日1时6分 Java面向对象程序设计教程 42 反编译程序样式 javap cApplicationStyle 则可以获得字节码的助记符版本 CompiledfromApplicationStyle javapublicclassHelloWorldextendsjava lang Object publicHelloWorld publicstaticvoidmain java lang String MethodHelloWorld 0aload 01invokespecial 14returnMethodvoidmain java lang String 0getstatic 23ldc 35invokevirtual 48return 2020年2月15日1时6分 Java面向对象程序设计教程 43 哪些类被加载了 2020年2月15日1时6分 Java面向对象程序设计教程 44 使用Java的一些注意事项 Java中规定 在一个 java的源文件中最多只能有一个 另一个意思是可以没有 publicclass 当这个publicclass存在时 要求该类名必须与 Java源文件的名字一致 如果你想编写一个应用程序 通常被声明为publicclass 在这一个类中必须定义一个publicstaticvoidmain String agrs 方法 在这个方法中 除了变量名agrs可以改变 其它内容均不可改变 甚至排放的顺序都是几乎不可改变的 2020年2月15日1时6分 Java面向对象程序设计教程 45 应用程序的主方法 JVM解释应用程序需要一个程序执行入口 也就是程序中逻辑运行的启动模块 或者称为应用程序的驱动器 这就是对应类中的main方法 它的声明publicstaticvoidmain String agrs 也叫main方法的标志性签名 JVM解释某个应用程序时 就会首先查找对应类的这个main方法 当无法匹配时就引发如上述的异常报告 Exceptioninthread main java lang NoSuchMethodError main 2020年2月15日1时6分 Java面向对象程序设计教程 46 小程序的生命周期 2020年2月15日1时6分 Java面向对象程序设计教程 47 小程序的HTML标记和属性 第2章Java的基本语法 2020 2 15 Java面向对象程序设计教程 49 主要内容 2 1类型 值与基本变量2 1 1基本概念2 1 2基本类型2 1 3引用类型2 1 4类型转换2 1 5简化操作的一些辅助手段2 2运算符与表达式2 2 1算术运算符与表达式2 2 2关系运算符与表达式2 2 3逻辑运算符与表达式2 2 4位运算符与表达式2 2 5条件运算符与表达式2 2 6赋值运算符与表达式2 2 7instanceof运算符2 2 8运算符优先级与赋值顺序的理解2 2 9基本类型所支持的操作运算2 3语句2 3 1编组语句2 3 2表达式语句2 3 3选择语句2 3 4循环语句2 3 5迭代与递归2 3 6控制转移语句2 3 7注释语 2 1类型 值与基本变量 2020 2 15 Java面向对象程序设计教程 51 基本概念 字符集 ASCII AmericanStandardCodeforInformationInterchange 字符集 使用7位代码表示大小写字母 数字0 9以及若干控制字符 如NUL和EOT ISO8859 1Latin 1字符集 在西欧 用户希望字符集能够表示他们本国字符集的所有字符 ASCII字符集因而被扩展到8位 即增加了128个字符 用于表示英文中不存在的各种西欧语言的字符 Unicode字符集 是ISO标准16位字符集 支持65536个不同的字符 其中大约有21000个字符专门用于中文 日文和韩文的表意文字 ASCII ISOLatin 1都是Unicode的子集 Java内部使用2个字节表示每个字符 采用Unicode编码 2020 2 15 Java面向对象程序设计教程 52 基本概念 关键字 值 标识符 关键字 Keyword 也称保留字 Reservedword 全部由小写的英文字母所组成 关键字总共有50多个 其中一些留作将来供语言设计者扩充语言功能时使用 值 Literal 是指不能由程序员规定的代表某一特定常量或数字的可知的或未知的字母或符号 一般译作 直接量 或 字面值 实际上泛指赋给各种不同类型 常指基本类型 字符串类型 空类型等 的有效值 本书将它简称为 值 而另一个单词 Value 则称为 数值 标识符 Identifier 是程序员提供的名字 在Java中 标识符的长度不受限制 但必须以字母 下划线或 符号开始 随后位置也可以包含数字 Java标识符支持几万个Unicode字母中所包含的世界上任何重要语言中的任何字母 举例 IdentifierTest java 2020 2 15 Java面向对象程序设计教程 53 Java关键字 const和goto是保留字true false和null为相应类型的值 不属于关键字 2020 2 15 Java面向对象程序设计教程 54 强类型语言 Stronglytypedlanguage Java属于强类型的程序设计语言 所有变量和表达式在编译时都有明确的类型 它有助于编译时的错误检测 类型限制了一个变量能够拥有的或者一个表达式能够生成的值 类型还限制了各种操作对这些值的支持程度以及决定操作的含义 2020 2 15 Java面向对象程序设计教程 55 Java语言的类型结构 2020 2 15 Java面向对象程序设计教程 56 基本类型 PrimitiveType boolean用于逻辑运算 int long byte和short用于整数算术运算 char主要用于输入输出 double和float用于实数 即浮点数 的算术运算 整型数值缺省为int型 long型在数值之后加l或L浮点型数值缺省为double型 float型在数值之后加f或F 2020 2 15 Java面向对象程序设计教程 57 基本类型的特点 基本类型在所有的平台和实现中的定义相同 类型名称属于Java保留的关键字 基本类型的值不允许共享 任何一个基本类型的变量都会独自拥有一份相同类型的值 基本类型的变量的值只能通过赋值操作才能被改变 2020 2 15 Java面向对象程序设计教程 58 基本类型的值 1 2020 2 15 Java面向对象程序设计教程 59 基本类型的值 2 2020 2 15 Java面向对象程序设计教程 60 基本类型的值 3 2020 2 15 Java面向对象程序设计教程 61 举例 整数值的不同进制表示 NumeralExpression java字符的表达方式 CharacterExpression java浮点数NaN结果及浮点计算的非精确性演示 FloatingTest java数值类型的取值范围 ValueScope java 2020 2 15 Java面向对象程序设计教程 62 引用类型 类类型 Classtype 接口类型 Interfacetype 数组类型 Arraytype 枚举类型 Enumeratetype 2020 2 15 Java面向对象程序设计教程 63 类类型 使用关键字 class 它定义了一个新的引用类型 并描述这一类型的具体实现 Java语言定义的根类 Rootclass 是Object类 也就是说除了Object类以外 其它类都是Object类的直接或间接子类 Subclass 这些类只能扩展 使用关键字 extends 自唯一一个业已存在的类 Object类是缺省的继承父类 如果有一个类直接继承自Object类 extendsObject 可以省略不写 2020 2 15 Java面向对象程序设计教程 64 类体的结构组成 类的成员类型 类成员 使用关键字static 和实例成员 无关键字static 形式 域 Field 也习惯地叫属性 Attribute 方法 Method 内嵌类 Nestedclass 和内嵌接口 Nestedinterface 实例初始化或者类初始化的语句块 Block 实例对象构造器 Constructor 也称构造方法 举例 ClassExample java 2020 2 15 Java面向对象程序设计教程 65 接口类型 使用关键字 interface 定义一套必须由类或组件实现的操作特征标记 一般有一个或多个操作特征标记以及零个或多个属性集合的定义 标识接口 Taginterface 不包含任何成员的接口类型 如java io Serializable java lang Cloneable通过类来实现 使用关键字 implements 多个接口类型之间用 隔开 类必须包括接口中定义的方法 接口可以进行多继承 也使用关键字 extends 接口类型中不存在被其它所有接口类型继承的根接口类型 2020 2 15 Java面向对象程序设计教程 66 接口体的结构与特点 包含与该接口有关的成员 这些成员可以是内嵌类 内嵌接口 常量或抽象方法 所有接口的成员都被隐式声明为 public 所有的内嵌类或接口都被隐式声明为 static 所有的成员属性都被隐式声明为 static 和 final 亦即所有的成员属性都是常量 所有的成员方法都被隐式声明为 abstract 亦即所有的成员方法都不包含任何具体的实现 但成员方法不能被声明为 static 因为静态方法不能是抽象的 举例 InterfaceExample java 2020 2 15 Java面向对象程序设计教程 67 数组类型 一个数组对象包含一定数量的数组变量 称为数组的组件或元素 数组元素通过一个非负的整型索引数值被引用 如果数组中包含有n个元素 则数组元素的索引值分别为0 n 1 数组元素的个数可以为零 这时该数组被称为empty 空 数组 数组元素的类型可以是基本类型 也可以是其它的引用类型 一个数组中的所有元素的类型都是一样的 2020 2 15 Java面向对象程序设计教程 68 数组表示法 Java语言中正式使用的表示法是 假如数组元素的类型表示为Type 则数组表示为Type x 如int x 读作int数组x 另一种表示法是提供给那些有C C 编程经验的人们使用的 将方括号移到变量名称的后面 即Typex 如intx 2020 2 15 Java面向对象程序设计教程 69 数组的一些特点 Java语言中没有直接的多维数组定义 而是把多维数组的实现理解为数组的数组 Java语言中 多维数组中每维数组的长度可以不同 数组空间也不一定是连续分配的 数组的直接超类是Object类 因此可以调用Object类中的所有方法 每个数组类型都已经实现了java io Serializable和java lang Cloneable接口 也就是可以对数组对象直接进行串行化处理和对象复制 但对于多维数组也是只能实现单层复制 数组中元素的个数可通过数组属性length进行访问 举例 ArrayExample java 枚举类型 枚举类型使用关键字 enum 它允许用常量来表示特定的数据片断 这些数据片断只接受预先定义的值集合 2020 2 15 Java面向对象程序设计教程 70 enum 和采用 class 或 interface 的 final 型属性表达的区别 枚举类型看起来更加简洁最关键的是枚举表示的这组常量值是类型安全的 如果调用这个枚举类型的值超出集合的范围 将引发编译错误用类或接口中的常量表示 通常会借助基本类型的值来描述常量 这个数值的取值范围是我们主观赋予的 如果在调用过程中赋值超出此范围 从语法上看并没有问题 编译时就无法检查出来 例如 enumSeason SPRING SUMMER AUTUMN WINTER classSeason finalintSPRING 1 finalintSUMMER 2 finalintAUTUMN 3 finalintWINTER 4 2020 2 15 Java面向对象程序设计教程 71 枚举类型本质也是类类型 使用enum关键字创建一个新的枚举类型时 实际上是在扩展java lang Enum类 Java语言中定义了 abstractclassEnum 作为所有枚举类型的通用基类 其中E表示枚举类型的名称 枚举类型中的每一个枚举值就是通过构造方法 protectedEnum Stringname intordinal 创建出来的一个实例 其中字符串name记录每个枚举值的名称 ordinal设置了该枚举值在值集合中所在位置的序数 这些枚举值成为该枚举类型的 publicstaticfinal 成员 举例 EnumSample java 2020 2 15 Java面向对象程序设计教程 72 2020 2 15 Java面向对象程序设计教程 73 类型转换 类型转换方式分为窄化 Narrowing 和拓宽 Widening 转换 编译时可以自动执行拓宽转换 称为Promotion 提升 而窄化转换则总是要求显式执行强制转换 称为Cast 转型 2020 2 15 Java面向对象程序设计教程 74 基本类型的拓宽转换原则 如果存在一个double型 则按double型执行运算 否则 如果存在一个float型 则按float型执行运算 否则 如果存在一个long型 则按long型执行运算 否则 按照32位的int型计算精度执行运算 当在整型与浮点型之间进行转换时 计算精度不仅仅是数据类型的取值范围问题 它还包括浮点能够存储的十进制数的位数 举例 PrimitiveWidening java 2020 2 15 Java面向对象程序设计教程 75 基本类型的窄化转换 窄化转换意味着余数转换 这种从一个大容量的数据类型到另一个小容量的数据类型的赋值只会取其较小的数值范围 这可能造成数量级的损失 如果需要把一个范围较大的整型数值赋给一个范围较小的数据类型的变量 原则上都需要对数值执行强制转换 对于byte short char类型的变量 在相应类型的取值范围内时 允许不需要显式强制类型转换而直接赋给int型数值 因为这样做并不会引起数据丢失 当所赋数值不在其取值范围内时 则必须显式进行类型强制转换 否则将出现错误而不是警告 如果把浮点型数值转换成整型数值 小数点后面的数值将被圆整去掉 举例 PrimitiveNarrowing java 2020 2 15 Java面向对象程序设计教程 76 引用类型的转换 从子类型转换为父类型即属于引用类型的拓宽转换 特别是从任何引用类型 包括类 接口 数组 转换成Java的根类Object都属于此种转换形式 引用类型的拓宽转换可以自动进行 不会引发任何异常 引用类型的窄化转换指的是从父类型转换为子类型 特别是从Object类转换成其它任何引用类型都属于这种转换形式 引用类型的窄化转换同样需要强制进行 即所谓的转型 这种转换的使用十分广泛 它体现了面向对象的多态性 转型将在运行时进行类型匹配检查 如果类型不匹配将引发异常ClassCastException 举例 ReferenceConversion java 2020 2 15 Java面向对象程序设计教程 77 类型转换讨论 自动转换 不要以为扩大取值范围就万无一失浮点型的有效位问题引用型的属性问题强制转换 2020 2 15 Java面向对象程序设计教程 78 基本类型的包装类 自动装箱与自动拆箱 自动装箱和自动拆箱 AutoBoxing Unboxing 是指当我们想创建一个包装类对象时 可以直接赋予一个对应基本类型数值 或者当我们想为基本类型变量赋值时 可以直接赋予一个对应包装类对象 而编译器在编译时会自动帮我们做相应的转换工作 自动装箱时对于值从 128到127之间的值 它们被装箱为Integer对象后 该对象就保存在内存中被重用 自动装箱时只允许采用相同类型的数值 如果类型不匹配则会引发编译错误 如 Longobj 127 或 Floatobj 127 0 都是错的 需写成 Longobj 127L 或 Floatobj 127 0f 举例 AutoBoxing java 2020 2 15 Java面向对象程序设计教程 79 2020 2 15 Java面向对象程序设计教程 80 与字符串相关的封装类 字符串在Java语言中并不定义为基本类型 而是一个类类型 Java中封装了3个与字符串相关的最终类 即String StringBuffer和StringBuilder类 并提供了一系列的方法对整个字符串进行操作 使得字符串的处理更加容易 也符合面向对象编程规范 String用于处理不变字符串 常量 StringBuffer和StringBuilder用于处理可变字符串 StringBuffer是线程安全的 而StringBuilder不是线程安全的 但它的执行速度比较快 字符串常量的类型String Java语言中还提供了一种快速创建String对象的方式 非常像基本类型的赋值方式 Stringstr Iamastringconstant String被设计为存储字符串常量的类 这种实例化形式在大多数情况下是更好的String构造技术 这与所创建的字符串存储在字符串常量池使其可被共享有关 字符串常量池的工作机制是 当需要某一个字符串时 先到池里查找 如果已经存在 则直接引用 如果还没有就在池中创建一个新的字符串对象 也可以说 字符串常量池中内容相同的String对象只有一个 该对象直到JVM退出时才被清除 举例 StringExample java 2020 2 15 Java面向对象程序设计教程 81 泛型 泛型通常也称为参数类型 ParameterizedType 它增加了集合框架 CollectionsFramework 编译时类型安全 并减少原先读取集合中元素时必须进行的转型操作 泛型带来的好处至少有 保留类型动态绑定的同时 增加静态类型检查 使得编译时能发现更多的错误 减少容器之间的类型模糊性 使代码更容易阅读 减少使用转型 使代码看起来更加简洁 举例 GenericsSample java 2020 2 15 Java面向对象程序设计教程 82 2 2运算符和表达式 2020 2 15 Java面向对象程序设计教程 84 Java语言中的算术运算符与表达式 2020 2 15 Java面向对象程序设计教程 85 Java语言中的关系运算符与表达式 2020 2 15 Java面向对象程序设计教程 86 Java语言中的逻辑运算符与表达式 2020 2 15 Java面向对象程序设计教程 87 Java语言中的位运算符与表达式 关于 运算 op1 op2二元运算 操作数op1按位右移op2位 左边补齐的数值总是为0 即正整数运算与 同 负整数则求该数的反码 但符号位不变 对于短整数和字节来讲 因为在 运算之前 首先需要把它们提升到整数 当操作数为负数时 第7或15 31位将会变为1 执行 运算后 第31位将会变为0 最终会把负数变为正数 例如 int数值 22 3 22 的原码 10000000000000000000000000010110符号位不变的反码 11111111111111111111111111101001右移3位 00011111111111111111111111111101其结果为 536870909建议 不要以数学意义上的数值来分析移位举例 BitOperand java 2020 2 15 Java面向对象程序设计教程 88 2020 2 15 Java面向对象程序设计教程 89 其它运算符 条件运算符 三元运算符 其表达式为someCondition tureExpression falseExpression赋值运算符与表达式 instanceof运算符 2020 2 15 Java面向对象程序设计教程 90 Java语言运算符优先级以及同等优先级运算符的组合顺序 2020 2 15 Java面向对象程序设计教程 91 Java语言运算符优先级以及同等优先级运算符的组合顺序 续 理解Java语言中的表达式 从左到右顺序解析运算符和操作数根据运算符的优先级高低确定运算顺序按运算符的结合顺序对操作数进行类型判断并赋值举例 PlusOperator javaEvaluationOrder java 2020 2 15 Java面向对象程序设计教程 92 2020 2 15 Java面向对象程序设计教程 93 关于断句 无鸡鸭亦可无鱼肉亦可青菜一小碟足矣 建议 在编程时还应该十分注意程序的可读性 避免理解歧义 2020 2 15 Java面向对象程序设计教程 94 整型支持的操作运算 比较运算 其结果为boolean型 大小比较 相等比较 数值运算 其结果为int或long型 加减运算 乘除运算 符号运算 前 后 缀自增运算 前 后 缀自减运算 位运算 按位取反运算 按位逻辑运算 条件运算 类型转换运算 Type 字符串连接运算 Byte Short Integer Long Character等包装类中的方法Java中存在一个称为的java math BigInteger类 支持无限制的整数运算 2020 2 15 Java面向对象程序设计教程 95 浮点型支持的操作运算 比较运算 其结果为boolean型 大小比较 相等比较 数值运算 其结果为float或double型 加减运算 乘除运算 符号运算 前 后 缀自增运算 前 后 缀自减运算 条件运算 类型转换运算 Type 字符串连接运算 Float Double等包装类中的方法以及java lang Math类 Math类中包含许多与数学运算有关的方法 如幂运算方法exp doublea 随机数生成方法random 正弦函数计算方法sin doublea 等等 Java语言存在一个称为java math Bi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论