版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第 1 章 Java导论 第1页,共105页。2022/8/4Java面向对象程序设计教程2主要内容1.1 Java语言的特点1.1.1 简单的面向对象程序设计语言1.1.2 健壮安全的分布式语言1.1.3 结构中立、可移植性强的解释型语言1.1.4 高效能1.1.5 支持多线程的动态语言1.1.6 Java与几种常用语言的比较1.2 Java执行环境1.2.1 JVM机制Java平台的基础1.2.2 自动垃圾收集1.2.3 保护域机制与沙箱模型1.2.4 类加载器启动引擎的点火器1.3 JDK的组成与安装设置1.3.1 Java平台的组成结构1.3.2 SET PATH和SET CLASSP
2、ATH的作用1.3.3 Java开发平台简介1.4 典型例子及常见问题1.4.1 编译器、解释器、小程序观察器和反编译器1.4.2 简单的“Hello World!”例子1.4.3 应用程序的主方法1.4.4 小程序的运行第2页,共105页。1.1 Java语言的特点第3页,共105页。2022/8/4Java面向对象程序设计教程4Java的由来1991年初,Sun Microsystems公司设立一项较大规模“消费者电子产品先进软件发展项目”,该项目是为了发展小型、可靠、可移植、分布式、实时的嵌入式系统。 项目小组开发了一种与平台无关的新语言,命名为“Oak”。其灵感来源于项目主持人Jame
3、s Gosling办公室外的一棵橡树(Oak),它就是Java语言的前身。 但因Oak名称与其它产品雷同,最后将开发的新语言取名为“Java”。据说是项目小组成员经常在公司附近一家咖啡厅喝咖啡,因此把咖啡原产地Java作为新语言的名称。1995年,Sun Microsystems公司正式发布Java产品。 第4页,共105页。2022/8/4Java面向对象程序设计教程5与Java有关的一些图片Java的标识Java的吉祥物DukeJava之父James Gosling第5页,共105页。2022/8/4Java面向对象程序设计教程6Java语言的特点 在Java语言白皮书中,Java被描述为
4、“是一种简单、面向对象、分布式、解释、健壮、安全、结构中立、可移植、高效能、多线程、动态的语言。A simple, object-oriented, network-savvy, interpreted, robust, secure, architecture neutral, portable, high-performance, multithreaded, dynamic language。 James Gosling, Henry McGilton. The Java Language Environment,A White Paper. 第6页,共105页。2022/8/4Java
5、面向对象程序设计教程7简单的面向对象程序设计语言 “爪哇”Java总给人以小巧玲珑 和C+很相近,但删除许多极少被使用、不容易理解和令人混淆的C+功能,主要包括运算符重载、多重继承以及广泛的自动强迫同型。 自动垃圾收集(Automatic garbage collection)功能,这不仅简化了Java程序的内存分配与释放工作,而且能大幅度减少程序中的漏洞。 Java程序非常小,对于在嵌入式的系统中使用是很重要的,同时也可以通过网络轻易下载。 第7页,共105页。2022/8/4Java面向对象程序设计教程8健壮安全的分布式语言 Java拥有广泛的能轻易处理TCP/IP协议(如HTTP与FTP
6、等)的类库,更容易创建网络连接。 除了运行时异常检查外,Java提供了广泛的编译时异常检查,以便尽早的发现可能存在的错误。同时,在Java中对象的创建机制(只能用new操作符)和自动垃圾收集机制大大减少了因内存管理不当引发的错误。 Java的验证技术是以公钥加密算法为基础。 第8页,共105页。2022/8/4Java面向对象程序设计教程9结构中立、可移植性强的解释型语言 为了让Java应用程序能够在网络上任何地方执行,其编译器会产出一种结构中立的字节代码(Bytecode)。字节代码可以在提供Java运行时系统的多种不同处理器上面执行。 Java严格定义了基本数据类型的大小和算术运算符的行为
7、,因此不存在软硬件平台不兼容的情况。 Java系统本身具备相当好的移植性。它的编译器用Java写成,而Java运行时程序则是参照POSIX(一个可移植接口工业标准)规格使用ANSI C写成的。 第9页,共105页。2022/8/4Java面向对象程序设计教程10高效能 字节代码可以动态地为执行应用程序的特定CPU解释成机器码。字节代码格式在设计上即顾及机器码的产生,因此实际的机器码产生程序相当简单。 解释器运行时不需检查运行环境,自动垃圾收集器设为优先级最低后台线程,以保证内存得到更有效的应用。 对于运算量很大的程序可以采用原生代码编写,再经由Java平台转换。Just-In-Time (JI
8、T)编译技术更是让字节代码的执行速度大幅度提升。 第10页,共105页。2022/8/4Java面向对象程序设计教程11支持多线程的动态语言 在Java核心类库中包含Thread类,同时Java运行时系统提供了线程监视器和同步锁定机制。多线程的其它优点包括更好的交互式回应能力与实时执行行为。 Java是一种比C或C+更具动态特性的语言。它在设计上强调为进化中的运算环境提供支援。甚至可以在不中断网络服务的情况下替换相关的组件。 第11页,共105页。2022/8/4Java面向对象程序设计教程12Java与几种常用语言的比较 第12页,共105页。1.2 Java执行环境第13页,共105页。2
9、022/8/4Java面向对象程序设计教程14Java执行环境 Java源程序(*.java)首先被编译成字节代码(*.class);这些字节代码就是Java虚拟机可以解释的指令集。经过安全验证后字节代码进入虚拟机,要么经由解释器解释执行,要么由JIT编译器(也称为即时代码生成器)转成机器代码执行,程序中使用到的类则根据需要动态加载到内存中。Java执行环境由编译时(Compile-time)和运行时(Runtime)环境两部分组成。第14页,共105页。2022/8/4Java面向对象程序设计教程15JREJVM协同类加载器、字节代码校验器和Java类库一起,组成了整个Java运行环境JRE
10、。 一次编写随处运行(Write Once Run Anywhere, WORA)第15页,共105页。Java虚拟机机制Java虚拟机(Java Virtual Machine, JVM)是一个类似于真实计算机系统的抽象机(Abstract Computing Machine),它拥有一组指令集,用来解释“.class”字节代码;也就是说,JVM并不认识所谓的Java语言,而仅仅能够读懂class文件中有限的指令、符号及其他一些辅助信息。它除了负责执行指令外,还要管理数据、内存和寄存器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的
11、代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。2022/8/4Java面向对象程序设计教程16第16页,共105页。2022/8/4Java面向对象程序设计教程17JVM的组成执行引擎 负责把字节代码导入虚拟机;内存管理 负责分配内存给对象和数组,并进行垃圾收集;错误和异常管理 负责异常的捕获或抛出;线程接口 负责对线程的支持;对原生方法(Native Method)的支持 支持调用C/C+等语言编写的方法。 第17页,共105页。2022/8/4Java面向对象程序设计教程18JVM的理解:机床数控机床虚拟机床数控机床数控机床抽象数控机床可以加工各种形状的物体原因在于它拥有一个
12、可以能读懂指令的核心系统MachineVirtual Machine第18页,共105页。2022/8/4Java面向对象程序设计教程19解释产品(问题域)编程人员是熟悉的!但数控系统(JVM)是不认识的!编程人员根据自己的想法,在相应的平台上编写出符合产品形状要求的程序(.java)第19页,共105页。2022/8/4Java面向对象程序设计教程20解释这是程序员可以理解的程序(.java),因其是接近自然语言的。但对数控系统(JVM)来说太复杂,它是读不懂的!第20页,共105页。2022/8/4Java面向对象程序设计教程21解释于是程序员利用相应的平台把它编译成数控系统(JVM)可以
13、理解的程序(.class)于是数控机床(JVM)动起来啦!产品也做出来啦!可是最终数控机床(JVM)也没有明白它做出的产品是什么,只知道走了许许多多的直线或圆弧(JVM指令集)!第21页,共105页。2022/8/4Java面向对象程序设计教程22示例虚拟的真实的第22页,共105页。实现代码移植的一种技术策略(为什么要使用Java虚拟机? )2022/8/4Java面向对象程序设计教程23使用Java虚拟机,其技术路线的本质就是改变了编译型语言环境把易变的应用和相对稳定的系统平台之间直接绑定的做法,通过增加语言环境的中介接口,实现了易变的应用和相对稳定的系统平台之间的松耦合。第23页,共10
14、5页。2022/8/4Java面向对象程序设计教程24保护域机制与沙箱模型 保护域(Protection domain)是有关系统安全的基本概念和重要模块。域界定了作为主体的系统实体对各种对象集直接访问的被许可程度。保护域概念提供一种在受保护单元中分组和隔离不安全因素的便利机制。 第24页,共105页。2022/8/4Java面向对象程序设计教程25类加载器启动引擎的点火器 加载 当JVM加载类时,它寻找类或接口的二进制表示,并从这个二进制表示(通常是Java编译器生成的类文件)生成Class对象。Class对象封装类或接口的运行时状态。链接 链接是取得加载的类或接口,并将其与JVM运行时环境
15、结合起来,以准备执行的过程。初始化 初始化在JVM调用类或接口初始化方法时发生。第25页,共105页。2022/8/4Java面向对象程序设计教程26类加载器启动引擎的点火器JVM在启动独立Java应用程序时的第一步是生成初始Class对象,表示包含public static void main(String args)方法的Java的类。JVM链接与初始化这个类并调用main()方法。这个方法推动所需要的其他类和接口的加载、链接与初始化。 第26页,共105页。1.3 JDK的组成与安装设置第27页,共105页。2022/8/4Java面向对象程序设计教程28Java平台的组成结构 第28页
16、,共105页。2022/8/4Java面向对象程序设计教程29Java标准版 第29页,共105页。2022/8/4Java面向对象程序设计教程30Java版本的平台信息 这些软件可以从Sun公司的网站/上免费下载获得。值得说明的是,这两个版本的开发工具包的缩写从“J2SDK(或Java 2 SDK)”改回到“JDK”,运行环境的缩写从“J2RE”改回到“JRE”,下载时需要注意。 第30页,共105页。Java版本的服务期限2022/8/4Java面向对象程序设计教程31GA date : Release families general availability date EOL: Jav
17、a technology end of life参考网址:/products/archive/eol.policy.html第31页,共105页。2022/8/4Java面向对象程序设计教程32SET PATH的作用SET PATH = c:jdk1.5.0bin 含义是告诉操作系统到哪里可以找到Java的编译器等可执行文件的位置。第32页,共105页。2022/8/4Java面向对象程序设计教程33SET CLASSPATH的作用SET CLASSPATH = .;c:jdk1.5.0libtools.jar 含义是告诉操作系统到哪里可以找到编译或解释运行时所需字节代码的位置。第33页,共1
18、05页。2022/8/4Java面向对象程序设计教程34在运行环境中的设置方法如果系统平台为Windows 9X,则把以上的设置内容加入系统根目录下的autoexec.bat文件中;如果系统平台为Windows XP、Windows 2000及以后版本,则把以上的设置内容加入【控制面板】|【系统】|【高级】|【环境变量】中。 第34页,共105页。Java开发平台简介集成开发环境: Integrated Development Environment, IDEJCreatorEclipseNetBeans2022/8/4Java面向对象程序设计教程35第35页,共105页。1.4 典型例子及常
19、见问题第36页,共105页。2022/8/4Java面向对象程序设计教程37常用指令简介编译器 javac的使用 解释器java的使用 小程序观察器appletviewer的使用 反编译器javap的使用第37页,共105页。2022/8/4Java面向对象程序设计教程38应用程序编程举例 /: ApplicationStyle.java/package g3ds.joop.ch1;public class ApplicationStyle /an application public static void main (String args) System.out.println(Hell
20、o World!); 程序保存为ApplicationStyle.java 编译时执行javac ApplicationStyle.java得到字节代码ApplicationStyle.class。运行时执行java ApplicationStyle 第38页,共105页。2022/8/4Java面向对象程序设计教程39小程序编程举例 /: AppletStyle.java/package g3ds.joop.ch1;import java.awt.Graphics;import javax.swing.JApplet;public class AppletStyle extends JApp
21、let /an appletpublic void paint(Graphics g) g.drawString(Hello World!,150,50); 保存为HelloWorldShow.html或HelloWorldShow.htm appletviewer HelloWorldShow.html 第39页,共105页。“Hello World!”的演绎2022/8/4Java面向对象程序设计教程40第40页,共105页。进一步讨论第41页,共105页。2022/8/4Java面向对象程序设计教程42反编译程序样式javap c ApplicationStyle 则可以获得字节码的助记
22、符版本:Compiled from ApplicationStyle.javapublic class HelloWorld extends java.lang.Object public HelloWorld(); public static void main(java.lang.String);Method HelloWorld() 0 aload_0 1 invokespecial #1 4 returnMethod void main(java.lang.String) 0 getstatic #2 3 ldc #3 5 invokevirtual #4 8 return第42页,共
23、105页。2022/8/4Java面向对象程序设计教程43哪些类被加载了第43页,共105页。2022/8/4Java面向对象程序设计教程44使用Java的一些注意事项Java中规定,在一个 . java的源文件中最多只能有一个(另一个意思是可以没有)public class。当这个public class存在时,要求该类名必须与. Java源文件的名字一致。如果你想编写一个应用程序(通常被声明为public class),在这一个类中必须定义一个public static void main(String agrs)方法,在这个方法中,除了变量名agrs可以改变,其它内容均不可改变,甚至排放
24、的顺序都是几乎不可改变的。第44页,共105页。2022/8/4Java面向对象程序设计教程45应用程序的主方法JVM解释应用程序需要一个程序执行入口,也就是程序中逻辑运行的启动模块,或者称为应用程序的驱动器,这就是对应类中的main方法,它的声明public static void main(String agrs)也叫main方法的标志性签名。JVM解释某个应用程序时,就会首先查找对应类的这个main方法,当无法匹配时就引发如上述的异常报告:Exception in thread main java.lang.NoSuchMethodError: main 第45页,共105页。2022/
25、8/4Java面向对象程序设计教程46小程序的生命周期 第46页,共105页。2022/8/4Java面向对象程序设计教程47小程序的HTML标记和属性 第47页,共105页。第 2 章 Java的基本语法第48页,共105页。2022/8/4Java面向对象程序设计教程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
26、.6 赋值运算符与表达式2.2.7 instanceof运算符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 注释语第49页,共105页。2.1 类型、值与基本变量第50页,共105页。2022/8/4Java面向对象程序设计教程51基本概念:字符集 ASCII(American Standard Code for Information Interchange)字符集:使用7位代码表示大小写字母、数字09以及若干控
27、制字符,如NUL和EOT。 ISO8859-1 Latin-1字符集:在西欧,用户希望字符集能够表示他们本国字符集的所有字符,ASCII字符集因而被扩展到8位,即增加了128个字符,用于表示英文中不存在的各种西欧语言的字符。Unicode字符集:是ISO标准16位字符集,支持65536个不同的字符。其中大约有21000个字符专门用于中文、日文和韩文的表意文字。 ASCII、ISO Latin-1都是Unicode的子集。Java内部使用2个字节表示每个字符,采用Unicode编码。 第51页,共105页。2022/8/4Java面向对象程序设计教程52基本概念:关键字、值、标识符关键字(Key
28、word) :也称保留字(Reserved word),全部由小写的英文字母所组成。关键字总共有50多个,其中一些留作将来供语言设计者扩充语言功能时使用。 值 (Literal):是指不能由程序员规定的代表某一特定常量或数字的可知的或未知的字母或符号,一般译作“直接量”或“字面值”,实际上泛指赋给各种不同类型(常指基本类型、字符串类型、空类型等)的有效值。本书将它简称为“值”,而另一个单词“Value”则称为“数值”。 标识符(Identifier):是程序员提供的名字,在Java中,标识符的长度不受限制,但必须以字母、下划线或$符号开始,随后位置也可以包含数字。Java标识符支持几万个Uni
29、code字母中所包含的世界上任何重要语言中的任何字母。 举例: IdentifierTest.java 第52页,共105页。2022/8/4Java面向对象程序设计教程53Java关键字 const和goto是保留字 true, false和null为相应类型的值,不属于关键字主要用途关 键 字用于内置类型booleanbytechardoublefloatintlongshortstrictfpvoid用于对象newsuperthis用于选择语句casedefaultelseifswitch用于循环语句doforwhile用于控制转移breakcontinuereturn用于异常处理cat
30、chfinallythrowthrowstryassert用于线程synchronized用于修饰说明abstractfinalprivateprotectedpublicstatic用于其他方法或相关类classinstanceofnativetransientvolatile用于类的扩展和接口的继承extendsimplementsimportinterfaceenum package留作将来使用constgoto第53页,共105页。2022/8/4Java面向对象程序设计教程54强类型语言(Strongly typed language)Java属于强类型的程序设计语言。所有变量和表达
31、式在编译时都有明确的类型,它有助于编译时的错误检测:类型限制了一个变量能够拥有的或者一个表达式能够生成的值;类型还限制了各种操作对这些值的支持程度以及决定操作的含义。第54页,共105页。2022/8/4Java面向对象程序设计教程55Java语言的类型结构 第55页,共105页。2022/8/4Java面向对象程序设计教程56基本类型(Primitive Type)boolean 用于逻辑运算。int、long、byte和short 用于整数算术运算。char 主要用于输入输出。double和float 用于实数(即浮点数)的算术运算。整型数值缺省为int型,long型在数值之后加l或L浮点
32、型数值缺省为double型,float型在数值之后加f或F第56页,共105页。2022/8/4Java面向对象程序设计教程57基本类型的特点基本类型在所有的平台和实现中的定义相同,类型名称属于Java保留的关键字。基本类型的值不允许共享,任何一个基本类型的变量都会独自拥有一份相同类型的值。基本类型的变量的值只能通过赋值操作才能被改变。第57页,共105页。2022/8/4Java面向对象程序设计教程58基本类型的值(1)类 型位 数取值范围有符号类型byte8 bits128 127(-27 27-1)short16 bits32 768 32 767(-215 215-1)int32 bi
33、ts2 147 483 648 2 147 483 647(-231 231-1)long64 bits9 223 372 036 854 775 808 9 223 372 036 854 775 807(-263 263-1)无符号类型char16 bitsu0000 uffff(0 65 535,即0 216-1)第58页,共105页。2022/8/4Java面向对象程序设计教程59基本类型的值(2)类 型位 数取值范围float32 bits3.40282347e+38f 1.40239846e-45f0.0f1.40239846e-45f 3.40282347e+38fdouble6
34、4 bits1.79769313486231570e+308 4.94065645841246544e-3240.04.94065645841246544e-324 1.79769313486231570e+308第59页,共105页。2022/8/4Java面向对象程序设计教程60基本类型的值(3)类 型位 数取值范围boolean1 bittrue / false转义字符Unicode字符含 义 bu0008backspace BS(退格) tu0009horizontal tab HT(Tab键) nu000alinefeed LF(换行) fu000cform feed FF(换页)
35、ru000dcarriage return CR(回车) u0022(double quote,双引号) u0027(single quote,单引号) u005c(backslash,反斜杠)第60页,共105页。2022/8/4Java面向对象程序设计教程61举 例整数值的不同进制表示:NumeralExpression.java 字符的表达方式:CharacterExpression.java 浮点数NaN结果及浮点计算的非精确性演示:FloatingTest.java 数值类型的取值范围:ValueScope.java 第61页,共105页。2022/8/4Java面向对象程序设计教程
36、62引用类型类类型(Class type)接口类型(Interface type)数组类型(Array type)枚举类型(Enumerate type) 第62页,共105页。2022/8/4Java面向对象程序设计教程63类类型 使用关键字“class”,它定义了一个新的引用类型,并描述这一类型的具体实现。 Java语言定义的根类(Root class)是Object类,也就是说除了Object类以外,其它类都是Object类的直接或间接子类(Subclass),这些类只能扩展(使用关键字“extends” )自唯一一个业已存在的类。Object类是缺省的继承父类,如果有一个类直接继承自O
37、bject类,“extends Object”可以省略不写。 第63页,共105页。2022/8/4Java面向对象程序设计教程64类体的结构组成类的成员类型:类成员(使用关键字static)和实例成员(无关键字static)形式:域(Field;也习惯地叫属性,Attribute)、方法(Method)、内嵌类(Nested class)和内嵌接口(Nested interface) 实例初始化或者类初始化的语句块(Block)实例对象构造器(Constructor,也称构造方法)举例:ClassExample.java 第64页,共105页。2022/8/4Java面向对象程序设计教程65
38、接口类型 使用关键字“interface”,定义一套必须由类或组件实现的操作特征标记。一般有一个或多个操作特征标记以及零个或多个属性集合的定义。 标识接口(Tag interface):不包含任何成员的接口类型,如java.io.Serializable、java.lang.Cloneable通过类来实现,使用关键字“implements”,多个接口类型之间用“,”隔开 。类必须包括接口中定义的方法 。接口可以进行多继承,也使用关键字“extends” 。接口类型中不存在被其它所有接口类型继承的根接口类型。 第65页,共105页。2022/8/4Java面向对象程序设计教程66接口体的结构与特
39、点包含与该接口有关的成员,这些成员可以是内嵌类、内嵌接口、常量或抽象方法。所有接口的成员都被隐式声明为“public”;所有的内嵌类或接口都被隐式声明为“static”;所有的成员属性都被隐式声明为“static”和“final”,亦即所有的成员属性都是常量;所有的成员方法都被隐式声明为“abstract”,亦即所有的成员方法都不包含任何具体的实现,但成员方法不能被声明为“static”,因为静态方法不能是抽象的。举例:InterfaceExample.java 第66页,共105页。2022/8/4Java面向对象程序设计教程67数组类型 一个数组对象包含一定数量的数组变量,称为数组的组件或
40、元素。数组元素通过一个非负的整型索引数值被引用。如果数组中包含有n个元素,则数组元素的索引值分别为0(n-1)。数组元素的个数可以为零,这时该数组被称为empty(空)数组。数组元素的类型可以是基本类型,也可以是其它的引用类型,一个数组中的所有元素的类型都是一样的。 第67页,共105页。2022/8/4Java面向对象程序设计教程68数组表示法Java语言中正式使用的表示法是,假如数组元素的类型表示为Type,则数组表示为Type x。如int x,读作int数组x。另一种表示法是提供给那些有C/C+编程经验的人们使用的,将方括号移到变量名称的后面,即Type x,如int x。 第68页,
41、共105页。2022/8/4Java面向对象程序设计教程69数组的一些特点Java语言中没有直接的多维数组定义,而是把多维数组的实现理解为数组的数组。 Java语言中,多维数组中每维数组的长度可以不同,数组空间也不一定是连续分配的。 数组的直接超类是Object类,因此可以调用Object类中的所有方法。 每个数组类型都已经实现了java.io.Serializable和java.lang.Cloneable接口,也就是可以对数组对象直接进行串行化处理和对象复制,但对于多维数组也是只能实现单层复制。数组中元素的个数可通过数组属性length进行访问。 举例:ArrayExample.java
42、第69页,共105页。枚举类型枚举类型使用关键字“enum”,它允许用常量来表示特定的数据片断,这些数据片断只接受预先定义的值集合。2022/8/4Java面向对象程序设计教程70第70页,共105页。“enum”和采用“class”或“interface” 的“final”型属性表达的区别枚举类型看起来更加简洁最关键的是枚举表示的这组常量值是类型安全的,如果调用这个枚举类型的值超出集合的范围,将引发编译错误用类或接口中的常量表示,通常会借助基本类型的值来描述常量,这个数值的取值范围是我们主观赋予的,如果在调用过程中赋值超出此范围,从语法上看并没有问题,编译时就无法检查出来。例如:enum S
43、eason SPRING, SUMMER, AUTUMN, WINTER class Seasonfinal int SPRING = 1;final int SUMMER = 2;final int AUTUMN = 3;final int WINTER = 4;2022/8/4Java面向对象程序设计教程71第71页,共105页。枚举类型本质也是类类型使用enum关键字创建一个新的枚举类型时,实际上是在扩展java.lang.Enum类。Java语言中定义了“abstract class EnumE extends Enum”作为所有枚举类型的通用基类,其中 E 表示枚举类型的名称。枚举类
44、型中的每一个枚举值就是通过构造方法“protected Enum(String name, int ordinal) ”创建出来的一个实例,其中字符串 name 记录每个枚举值的名称,ordinal 设置了该枚举值在值集合中所在位置的序数。这些枚举值成为该枚举类型的“public static final”成员。举例:EnumSample.java2022/8/4Java面向对象程序设计教程72第72页,共105页。2022/8/4Java面向对象程序设计教程73类型转换 类型转换方式分为窄化(Narrowing)和拓宽(Widening)转换。编译时可以自动执行拓宽转换(称为Promotio
45、n,提升)。而窄化转换则总是要求显式执行强制转换(称为Cast,转型)。 第73页,共105页。2022/8/4Java面向对象程序设计教程74基本类型的拓宽转换原则 如果存在一个double型,则按double型执行运算。否则,如果存在一个float型,则按float型执行运算。否则,如果存在一个long型,则按long型执行运算。否则,按照32位的int型计算精度执行运算。 当在整型与浮点型之间进行转换时,计算精度不仅仅是数据类型的取值范围问题,它还包括浮点能够存储的十进制数的位数。 举例:PrimitiveWidening.java 第74页,共105页。2022/8/4Java面向对象
46、程序设计教程75基本类型的窄化转换 窄化转换意味着余数转换,这种从一个大容量的数据类型到另一个小容量的数据类型的赋值只会取其较小的数值范围,这可能造成数量级的损失。 如果需要把一个范围较大的整型数值赋给一个范围较小的数据类型的变量,原则上都需要对数值执行强制转换。对于byte、short、char类型的变量,在相应类型的取值范围内时,允许不需要显式强制类型转换而直接赋给int型数值,因为这样做并不会引起数据丢失;当所赋数值不在其取值范围内时,则必须显式进行类型强制转换,否则将出现错误而不是警告。如果把浮点型数值转换成整型数值,小数点后面的数值将被圆整去掉。 举例:PrimitiveNarrow
47、ing.java 第75页,共105页。2022/8/4Java面向对象程序设计教程76引用类型的转换 从子类型转换为父类型即属于引用类型的拓宽转换,特别是从任何引用类型(包括类、接口、数组)转换成Java的根类Object都属于此种转换形式。引用类型的拓宽转换可以自动进行,不会引发任何异常。引用类型的窄化转换指的是从父类型转换为子类型,特别是从Object类转换成其它任何引用类型都属于这种转换形式。引用类型的窄化转换同样需要强制进行,即所谓的转型,这种转换的使用十分广泛,它体现了面向对象的多态性。转型将在运行时进行类型匹配检查,如果类型不匹配将引发异常ClassCastException。
48、举例:ReferenceConversion.java第76页,共105页。2022/8/4Java面向对象程序设计教程77类型转换讨论自动转换不要以为扩大取值范围就万无一失浮点型的有效位问题引用型的属性问题强制转换第77页,共105页。2022/8/4Java面向对象程序设计教程78基本类型的包装类 包装类对应的基本类型字符串转换成数值数值转换成字符串包装类中定义的常量Bytebyteb=Byte.parseByte(s)b=new Byte(s).byteValue()s=String.valueOf(b)TYPE,MAX_VALUE,MIN_VALUEShortshortsh=Short
49、.parseShort(s)sh=new Short(s).shortValue()s=String.valueOf(sh)TYPE,MAX_VALUE,MIN_VALUECharacterchars=String.valueOf(c)TYPE, MAX_VALUE,MIN_VALUEIntegerintn=Interger.parseInt(s)n=new Integer(s).intValue()s=String.valueOf(n)TYPE,MAX_VALUE,MIN_VALUELonglongg=Long.parseLong(s)g=new Long(s).longValue()s=S
50、tring.valueOf(g)TYPE,MAX_VALUE,MIN_VALUEFloatfloatf=Float.parseFloat(s)f=new Float(s).floatValue()s=String.valueOf(f)TYPE,MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITYDoubledoubled=Double.parseDouble(s)d=new Double(s).doubleValue()s=String.valueOf(d)TYPE,MAX_VALUE,MIN_VALUE,NaN,NEGATIV
51、E_INFINITY,POSITIVE_INFINITYBooleanbooleanb=new Boolean(s).booleanValue()s=String.valueOf(b)TYPE,FALSE,TRUE第78页,共105页。自动装箱与自动拆箱自动装箱和自动拆箱(Auto Boxing / Unboxing) ,是指当我们想创建一个包装类对象时,可以直接赋予一个对应基本类型数值,或者当我们想为基本类型变量赋值时,可以直接赋予一个对应包装类对象,而编译器在编译时会自动帮我们做相应的转换工作。自动装箱时对于值从-128到127之间的值,它们被装箱为Integer对象后,该对象就保存在内存
52、中被重用。自动装箱时只允许采用相同类型的数值,如果类型不匹配则会引发编译错误,如“Long obj = 127;”或“Float obj = 127.0;”都是错的,需写成“Long obj = 127L;”或“Float obj = 127.0f;”。举例: AutoBoxing.java2022/8/4Java面向对象程序设计教程79第79页,共105页。2022/8/4Java面向对象程序设计教程80与字符串相关的封装类 字符串在Java语言中并不定义为基本类型,而是一个类类型。Java中封装了3个与字符串相关的最终类,即String、StringBuffer和StringBuilder
53、类,并提供了一系列的方法对整个字符串进行操作,使得字符串的处理更加容易,也符合面向对象编程规范。String用于处理不变字符串(常量),StringBuffer和StringBuilder用于处理可变字符串。StringBuffer是线程安全的,而StringBuilder不是线程安全的,但它的执行速度比较快。第80页,共105页。字符串常量的类型StringJava语言中还提供了一种快速创建String对象的方式,非常像基本类型的赋值方式:String str=”I am a string constant.” String被设计为存储字符串常量的类,这种实例化形式在大多数情况下是更好的St
54、ring构造技术,这与所创建的字符串存储在字符串常量池使其可被共享有关。 字符串常量池的工作机制是,当需要某一个字符串时,先到池里查找,如果已经存在,则直接引用;如果还没有就在池中创建一个新的字符串对象。也可以说,字符串常量池中内容相同的String对象只有一个,该对象直到JVM退出时才被清除。举例:StringExample.java 2022/8/4Java面向对象程序设计教程81第81页,共105页。泛型泛型通常也称为参数类型(Parameterized Type),它增加了集合框架(Collections Framework)编译时类型安全,并减少原先读取集合中元素时必须进行的转型操作
55、。泛型带来的好处至少有:保留类型动态绑定的同时,增加静态类型检查,使得编译时能发现更多的错误。减少容器之间的类型模糊性,使代码更容易阅读。减少使用转型,使代码看起来更加简洁。举例:GenericsSample.java2022/8/4Java面向对象程序设计教程82第82页,共105页。2.2 运算符和表达式第83页,共105页。2022/8/4Java面向对象程序设计教程84Java语言中的算术运算符与表达式操作数数目运算符表达式描 述一元+op正值-op负值+op, op+自增1-op, op-自减1二元+op1+op2加-op1-op2减*op1*op2乘/op1/op2除%op1%op
56、2取模(求余)第84页,共105页。2022/8/4Java面向对象程序设计教程85Java语言中的关系运算符与表达式 运算符表达式返回true的情况op1op2op1大于op2=op1=op2op1大于或等于op2op1op2op1小于op2=op1=op2op1小于或等于op2=op1=op2op1与op2相等!=op1!=op2op1与op2不等第85页,共105页。2022/8/4Java面向对象程序设计教程86Java语言中的逻辑运算符与表达式 操作数取值表达式运算结果op1op2op1&op2op1|op2!op1falsefalsefalsefalsetruefalsetruef
57、alsetruetruetruefalsefalsetruefalsetruetruetruetruefalse第86页,共105页。2022/8/4Java面向对象程序设计教程87Java语言中的位运算符与表达式 运算符表达式描 述&op1 & op2二元运算,逻辑与,参与运算的两个操作数,如果两个相应位都为1(或true),则该位的结果为1(或true),否则为0(false)。|op1 | op2二元运算,逻辑或,参与运算的两个操作数,如果两个相应位有一个为1(或true),则该位的结果为1(或true),否则为0(false)。op1 op2二元运算,逻辑异或,参与运算的两个操作数,如
58、果两个相应位值相反,则该位的结果为1(或true),否则为0(false)。 op1一元运算,对数据的每个二进制位按位取反。op1 op1 op2二元运算,操作数op1按位右移op2位,左边补齐的数值和最高位相同(正数补0,负数补1),即每右移一位,其数值减半。op1 op2二元运算,操作数op1按位右移op2位,左边补齐的数值总是为0,即正整数运算与同,负整数则求该数的反码,但符号位不变。第87页,共105页。关于运算op1 op2二元运算,操作数op1按位右移op2位,左边补齐的数值总是为0,即正整数运算与同,负整数则求该数的反码,但符号位不变。对于短整数和字节来讲,因为在运算之前,首先需
59、要把它们提升到整数,当操作数为负数时,第7或1531位将会变为1。执行运算后,第31位将会变为0,最终会把负数变为正数。例如,int数值“-22 3”:“-22”的原码:1000 0000 0000 0000 0000 0000 0001 0110符号位不变的反码: 1111 1111 1111 1111 1111 1111 1110 1001右移3位:000 1111 1111 1111 1111 1111 1111 1110 1其结果为:536870909建议:不要以数学意义上的数值来分析移位举例:BitOperand.java 2022/8/4Java面向对象程序设计教程88第88页,共
60、105页。2022/8/4Java面向对象程序设计教程89其它运算符条件运算符:三元运算符,其表达式为someCondition?tureExpression: falseExpression赋值运算符与表达式 := 、+=、- =、*=、/=、%= 、=、=、&=、 |=、 = instanceof运算符 第89页,共105页。2022/8/4Java面向对象程序设计教程90Java语言运算符优先级以及同等优先级运算符的组合顺序运算符描 述优先级(数越大优先级越高)同等优先级结合顺序( )圆括号15左右new创建类实例15左右 数组下标运算符15左右.成员(属性、方法)选择15左右+、-后缀
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 七年级上册《金色花》课件
- 两条直线的位置关系对称问题课件
- 《服饰知识常识》课件
- 单位管理制度集合大全人员管理十篇
- 单位管理制度集粹选集人事管理十篇
- 《石膏的护理》课件
- 单位管理制度分享大合集员工管理篇
- 单位管理制度范文大合集职工管理篇十篇
- 单位管理制度范例汇编人员管理篇十篇
- 单位管理制度呈现汇编职员管理篇十篇
- 一年级下学期道德与法治教学工作总结
- 财税公司合同范本
- DB34T4829-2024公路工程泡沫轻质土设计与施工技术规程
- 抗肿瘤药物临床管理办法培训
- 福建省福州市2023-2024学年高一上学期1月期末地理试题(解析版)
- 预防性侵害安全教育
- 科大讯飞招聘在线测评题
- 科学备考讲解模板
- 译林小学二年级上册英语知识综合训练50题含答案
- 2024年1月浙江省普通高校招生选考科目考试思想政治试题(含答案)
- 中国大数据产业发展指数报告(2024版)
评论
0/150
提交评论