1、从零开始学JAVA程序设计实践经典教程2Java发展历史什么是面向对象分析与设计(OOAD)基本的Java应用程序入门高级面向对象概念创造、分享,坚持梦想创造分享,坚持梦想3帮助没有任何基础的初学者,入门JAVA;熟练使用Java语言开发简单的应用程序;了解面向对象的思想方法及其特征;培养大家对Java语言和技术的兴趣,为今后的软件开发打好基础;创造分享,坚持梦想4第一部分 Java编程语言概述第二部分 面向对象的分析与设计第三部分 Java技术编程入门-对象与编程结构-运算符、类型转换以及条件判断结构-循环结构-使用方法-面向对象的Java程序-数组-继承创造分享,坚持梦想5【学习目标】【学
2、习目标】了解了解JavaJava的历史和发展的历史和发展了解了解JavaJava的工作方式的工作方式初步接触两种初步接触两种JavaJava程序:程序:Java ApplicationJava ApplicationJava AppletJava Applet学习阅读学习阅读JavaJava帮助文档,并安装帮助文档,并安装JavaJava开发环境和帮助文档开发环境和帮助文档创造分享,坚持梦想6创造分享,坚持梦想71996年5月,第一界JavaOne大会在旧金山召开。创造分享,坚持梦想8创造分享,坚持梦想9认证:SCJP JAVA平台的程序员认证SCJD JAVA平台的开发者认证SCEA J2E
3、E技术的企业架构师认证创造分享,坚持梦想10JavaJava现在常用来现在常用来:1)1)开发大规模的商业运用软件开发大规模的商业运用软件2)2)增强网络服务的功能增强网络服务的功能3)3)开发智能消费型电子产品的应用软件开发智能消费型电子产品的应用软件(例如手机例如手机)创造分享,坚持梦想11The Java Virtual Machine(JVM)The Java 应用编程接口(Java API):Java应用编程接口是已编译的可在我们的程序中使用的代码库(基础类库)。它们使我们能够添加现成的可定制的功能,以节约编程时间。创造分享,坚持梦想12J2SE:Standard Edition标准
4、版(主要有标准版(主要有Java Applet和和Java Application应用程序应用程序J2EE:Enterprise Edition企业版(主要是服务器端程序)企业版(主要是服务器端程序)J2ME:Mirco Edition微型版(针对嵌入式平台)微型版(针对嵌入式平台)创造分享,坚持梦想13计算机的高级编程语言类型:-编译型-解释型创造分享,坚持梦想14编译型:跨平台性差创造分享,坚持梦想15解释型:跨平台,速度慢创造分享,坚持梦想16创造分享,坚持梦想17Java文件类型.java Java源文件.class 二进制字节码文件Java编译器Import java.io.*;cl
5、ass test.test.javaDF BA 09 88.test.class编译过程创造分享,坚持梦想18Java虚拟机虚拟机Java虚拟机的建立需要针对不同的软硬件平台做专门的实现,既要考虑处理器的型号,也要考虑操作系统的种类。如下图所示,目前在SPARC、X86、MIPS和PPC等嵌入式处理芯片上、在UNIX、Linux、windows和部分实时操作系统上都有java虚拟机的实现。创造分享,坚持梦想19创造分享,坚持梦想20A simple,object-oriented,distributed,interpreted,robust,secure,architecture-A simp
6、le,object-oriented,distributed,interpreted,robust,secure,architecture-neutral,portable,high-performance,multi-threaded,dynamic languageneutral,portable,high-performance,multi-threaded,dynamic language 1 1 简单、面向对象和分布式简单、面向对象和分布式 2 2 解释执行、鲁棒并且安全解释执行、鲁棒并且安全 3 3 结构中立并且可以移植结构中立并且可以移植 4 4 高性能高性能 5 5 多线程并且
7、是动态的多线程并且是动态的创造分享,坚持梦想21简单:KISS风格类似于C+,对C+程序员而言非常容易掌握 Java摒弃了C+中容易引发程序错误的地方,如指针操作和多重继承提供丰富的类库面向对象完全基于类、对象封装、继承、多态取消多继承、模版、运算符重载分布式-支持TCP/IP协议。Java应用程序可通过一个特定的URL来打开并访问对象,就像访问本地文件系统那样简单。创造分享,坚持梦想22可移植(编译一次,到处运行)JVM统一的数据类型int-32bitchar-16 bit unicode 高效JIT(Just-In-Time)及时编译器的代码生成技术可按需编译字节代码为机器代码,提高运行速
8、度。多线程支持多任务,在一个程序里可同时执行多个小任务。动态允许程序动态地装入运行过程中所需要的类,程序可以根据需要把代码实时的从服务器下载过来执行 创造分享,坚持梦想23解释执行稳定性检查数据类型的匹配,数组下标越界检查 无指针自动内存管理,保护内存数据异常处理机制,正确处理运行时错误 安全性 代码检测字节码校验器(确保java程序的编译正确,遵循JVM访问限制)类装载器(将网络上下载的类相互分开,并与本地类区别开来)安全管理器(确定JVM在什么条件下可以进行什么活动)数组下标越界检查自动垃圾回收机制无指针创造分享,坚持梦想24JDK系列(Sun)命令行Java WorkShop(Sun)S
9、ymantec CAFJBuilder(Borland)Visual J+(MicroSoft)netBeans(Sun)Eclipse(IBM)可选可选创造分享,坚持梦想251 下载地址:创造分享,坚持梦想262 安装JDK并设置环境-选择安装路径:例如,1.6.0版本的缺省路径为c:program filesjavajdk1.6.0_05-设置环境变量:“我的电脑”“属性”“高级”“环境变量”“系统变量”Path=c:program filesjavajdk1.6.0_05binClassPath=.;c:program filesjavajdk1.6.0_05lib path=javac
10、和java命令所在的目录。classpath=存放字节码文件的目录。不要遗漏当前不要遗漏当前目录目录 创造分享,坚持梦想27在将JDK安装完成后,请进到DOS环境下,输入java version会看到下面的画面,若是如此就表示安装完成。创造分享,坚持梦想28Java ApplicationJava Application以以mainmain()方法作为程序的入口,由()方法作为程序的入口,由JavaJava解释器加载执行。解释器加载执行。Java AppletJava Applet没有没有main()main()方法作为程序入口,通过浏览器中的方法作为程序入口,通过浏览器中的 Java Jav
11、a 虚拟机(虚拟机(JVMJVM)或者)或者AppletviewerAppletviewer命令加载执行。命令加载执行。创造分享,坚持梦想29Application(应用程序)是在命令行环境运行的程序。程序中由main()方法作为程序起点。通常Application较不需要GUI。创造分享,坚持梦想30源文件:HelloWorld.java public class HelloWorld public static void main(String args)System.out.println(Hello World!);程序代码编辑注意事项 1.不要漏掉任何一个该有分号(;)的地方。2.大
12、括号一定要左右成对,否则编译会错。每一对大括号间程序代码称为区块(block)。程序区块 3.左括号的位置可在行尾(如上列程序)或换行的前头(如下),视各人习惯而定。4.输入完毕后请存成HelloWorld.java文件。定义类的关键定义类的关键字字 类名类名 必须这么写必须这么写 创造分享,坚持梦想31类定义类定义JavaJava程序的基本组成部分是类程序的基本组成部分是类(class)(class),如本例中的,如本例中的HelloWorldHelloWorld类。类。main()main()方法方法Java ApplicationJava Application程序的入口是程序的入口是m
13、ain()main()方法。它有固定的书写格式:方法。它有固定的书写格式:public static void main(String args)public static void main(String args)创造分享,坚持梦想32程序区块程序区块实现程序要完成的功能,由语句组成。实现程序要完成的功能,由语句组成。本例中只有一条语句:本例中只有一条语句:System.out.println(Hello World!);System.out.println(Hello World!);创造分享,坚持梦想33javac HelloWorld.javajavac 是JDK工具包中的java编
14、译器。源文件HelloWorld.java 由javac编译器编译后,生成字节码文件(HelloWorld.class)。java HelloWorld此命令将启动JDK工具包中的java解释器来解释执行HelloWorld.class 注意:在这个命令行中,文件名称不能附加扩展名.class。因为解释器本身会自行加入。执行结果就是在屏幕上打印出Hello World!创造分享,坚持梦想34当Java在1996年首度被放在互联网上时,最吸引人的就是它的Applet所展现出的卓越丰姿。Java在网页上所能呈现的又是多彩多姿的另一番风貌。像水中倒影,燃烧特效等都是会令人眼睛一亮的功能。创造分享,坚
15、持梦想35Applet就是使用Java语言编写的一段代码,它可以在浏览器环境中运行。它与Application的区别主要在于其执行方式的不同。Application是从其中的main()方法开始运行的Applet是在一般浏览器中运行的,必须创建一个HTML文件,通过编写HTML语言代码告诉浏览器载入何种Applet以及如何运行。创造分享,坚持梦想36创造分享,坚持梦想37Applet的运行与浏览器有绝对密切的关系。因为Applet 就是以浏览器为展示舞台。浏览器要能展现Java,就需要有内建的JVM或是调用Java Plug-in。在浏览器“工具Internet选项”“高级”标签页,勾选:启用
16、Java JIT编译器及启用Java控制台。然后重启计算机。创造分享,坚持梦想38但是浏览器内建的VM,常会跟不上Java的发展。所以Sun公司又自行开发一种可在运行阶段嵌入浏览器的Java Plug-in。在装完了JDK、JRE后,会发现在控制台中有Java Plug-in图样。(可能会出现多个Java Plug-in,因为版本不同)。创造分享,坚持梦想39编辑Java源文件,例:HelloApplet.javaimport java.awt.*;import java.applet.*;public class HelloApplet extends Appletpublic void p
17、aint(Graphics g)g.drawString(Hello,Java World!,10,20);使用javacjavac HelloApplet.java创造分享,坚持梦想40Applet是在浏览器中运行的,必须创建一个HTML文件,通过编写HTML代码告诉浏览器载入何种Applet以及如何运行。将Applet嵌入HTMLRun Applet将文件保存为.html文件(如:My.html)创造分享,坚持梦想41浏览html文件 方法1:使用浏览器IE直接浏览 方法2:使用appletviewerappletviewer index.html创造分享,坚持梦想42Applicatio
18、n及Applet程序撰写比较表 ApplicationApplet1.程序格式特征 有main()无main()2.存储文件格式.java文件.java文件3.编译(compile)程序代码 使用JSDK 使用javac.exe 使用javac.exe 4.产生文件格式.class文件.class文件5.运行程序 使用java命令即可直接运行 1.先制作一个嵌入此.class的 html文件,方法如下:2.再使用 appletveiwer或浏览器运行此.html文件 请注意:Application 与Applet 写法最大的不同在于程序的格式,与运行程序的方式。创造分享,坚持梦想43 java
19、c HelloApplication.java D:Lesson1 java HelloApplicationD:Lesson1 Hello,Java World!javac HelloApplet.java D:Lesson1 appletviewer index.htmlD:Lesson1 Application:Applet:创造分享,坚持梦想441)1)下载下载J2SEJ2SE安装程序安装程序2)2)运行运行J2SEJ2SE安装程序,安装安装程序,安装J2SEJ2SE3)3)设置环境变量:设置环境变量:运行路径运行路径(path)(path)类路径类路径(classpath)(clas
20、spath)4)4)下载下载J2SEJ2SE的在线帮助文档的在线帮助文档创造分享,坚持梦想45创造分享,坚持梦想46包包文件文件类类/接口接口方法方法变量变量常量常量创造分享,坚持梦想47尽量使用简单的、常用的单词尽量使用简单的、常用的单词创造分享,坚持梦想48包的名称一般全部采用小写包的名称一般全部采用小写包名的前缀一般是域名单词序列的逆序包名的前缀一般是域名单词序列的逆序示例示例com.sun.engcom.sun.engcom.apple.quicktimecom.apple.quicktimeedu.cmu.cs.bovik.cheeseedu.cmu.cs.bovik.cheese创
21、造分享,坚持梦想49JavaJava源程序文件的命名规范源程序文件的命名规范必须与该文件中必须与该文件中publicpublic类的类名同名类的类名同名后缀必须是后缀必须是.java.java创造分享,坚持梦想50类名一般是名词类名一般是名词/名词词组名词词组:每个单词的首字母大写,其它字母小写每个单词的首字母大写,其它字母小写类名应当尽量简单,而且其含义能够尽量准确地刻画该类的含义类名应当尽量简单,而且其含义能够尽量准确地刻画该类的含义一般采用全称一般采用全称尽量少用缩写词尽量少用缩写词 示例示例J_ClockJ_ClockJ_CircleJ_CircleTimeTime创造分享,坚持梦想5
22、1方法名一般是方法名一般是动词动词/动词性词组动词性词组,首字母小写首字母小写中间单词的首字母大写,其它字母小写中间单词的首字母大写,其它字母小写示例示例:run();run();getBackground();getBackground();getTime();getTime();创造分享,坚持梦想52变量名的首字母小写变量名的首字母小写中间单词的首字母大写,其它字母小写中间单词的首字母大写,其它字母小写变量名的首字母尽量不要用字符变量名的首字母尽量不要用字符:_:_ 或或$变量名应当简短、有含义、且便于记忆变量名应当简短、有含义、且便于记忆示例示例:int i;int i;char c;c
23、har c;double widthBox;double widthBox;int length;int length;创造分享,坚持梦想53变量名常常由表示其所扮演的角色与数据类型组成变量名常常由表示其所扮演的角色与数据类型组成示例示例:Point startingPoint,centerPoint;Point startingPoint,centerPoint;Name loginName;Name loginName;创造分享,坚持梦想54常量名一般全大写,单词之间用下划线分隔常量名一般全大写,单词之间用下划线分隔(“_ _”)示例示例:static final int MIN_WIDT
24、H=4;static final int MIN_WIDTH=4;static final int MAX_WIDTH=999;static final int MAX_WIDTH=999;创造分享,坚持梦想55保证代码的简单性保证代码的简单性创造分享,坚持梦想56三种允许的Java技术程序注释风格/comment on one line 用于单行注释。注释从/开始,终止于行尾。/*comment on one or more line*/用于多行注释。注释从/*开始,到*/结束,且这种注释不能互相嵌套。/*documenting comment*/1、是Java所特有的doc注释。它以/*开
25、始,到*/结束。2、这种注释主要是为支持JDK工具javadoc而采用的。创造分享,坚持梦想57下面这段程序,有哪些行是不符合java编程规范的?1/*2*Sample application using the simple text editor component that 3*supports only one font.4*author Timothy Prinzing 5*version 1.16 09/06/2004 6*/7 8 package MyProject.theFirstApp;9 class notepad extends JPanel 10 final int M
26、AX_NUM=1000;11 final long rate=999;12 String STR;13 char theFirstcharacter;14 15 public static void main(String args)16 try 17 String vers=System.getProperty(java.version);18 if(pareTo(1.1.2)java HelloD:Lesson3 Hello,Java World!编译、运行应用程序Application:70检查错误消息中指出的行检查分号检查大括号数是否为偶数71基本类型包括:整型 byte,short,
27、int和long浮点型 float和double字符型 char逻辑型boolean72数据类型名数据类型名占用内存空间占用内存空间数值范围数值范围缺省值缺省值说明说明byte1字节(-128)1270整型short2字节(-32768)327670int4字节字节(-2147483648)21474836470long8字节(-9223372036854775808)92233720368547758070Lfloat4字节0.0F浮点型double8字节0.0Dchar2字节字节u0000字符型boolean1字节true或falsefalse布尔型73类型类型长度长度范围范围byte8b
28、it-2727-1(-128127)short16bit-215215-1(-3276832767)int32bit-231231-1(-2147483648 2147483647)long64bit-263263-1(-9 223 372 036 854 775 808 9 223 372 036 854 775 807)存储没有小数部分的数据类型Java各整数类型有固定的表示范围和字段长度,而不受具体操作系统的影响,以保证Java程序的可移植性 7400010100 byte(1字节)00000000 00010100 short(2字节)高位置000000000 00000000 000
29、00000 00010100 int(4字节)00000000 00000000 00000000 00000000 00000000 00000000 00000000 00010100 Long(8字节)7576777879b(b(退格退格)f(f(换页换页)n(n(换行换行)r(r(回车回车)t(t(水平制表符水平制表符(到下一个到下一个tabtab位置位置)(单引号单引号)(双引号双引号)(反斜杠反斜杠)80练习:基本数据类型的使用(练习:基本数据类型的使用(1 1)81练习:基本数据类型的使用(练习:基本数据类型的使用(2 2)82练习:基本数据类型的使用(练习:基本数据类型的使用(
30、3 3)83练习:基本数据类型的使用(练习:基本数据类型的使用(4 4)84标识符可以用来标识变量名、类名、类中的方法名等标识符可以用来标识变量名、类名、类中的方法名等.标识符组成标识符组成:(1):(1)字母字母,(2),(2)数字数字,(3),(3)下划线下划线“_ _”和和(4)(4)美元符号美元符号“$”;首字符必须是首字符必须是(1)(1)字母字母,(2),(2)下划线下划线“_ _”和和(3)(3)美元符号美元符号“$”;所有标识符是区分大小写的所有标识符是区分大小写的;除去关键字、除去关键字、falsefalse、truetrue和和null;null;8586合法的标识符ide
31、ntifier userName User_Name_sysval$change A98_23 _abc非法的标识符2mailroom#class A-43_1the87myVariable myVariable 9pins9pinsMYVARIABLE MYVARIABLE i i a+ca+ctesting1-2-3testing1-2-3_myvariablejava¨My Variable$myvariable _9pins Its8889 写类声明来表示基于OOD的对象。类声明中包含类名称、成员变量、成员方法。声明类声明类9091类体由两部分构成:类体由两部分构成:float
32、area;float area;int color;int color;float x,y;float x,y;public void draw()public void draw()public void erase()public void erase()public void move()public void move()public int getColor()public int getColor()class Shapeclass Shapen一为成员变量定义一为成员变量定义(域域)二为成员方法定义二为成员方法定义类名类名成员变量成员变量(域域)成员方法成员方法92在一个方法或者
33、方法里面的代码块中定义的变量称为局部变量局部变量在方法或代码块被执行时创建,在方法或代码块结束时被销毁。局部变量必须先赋值再使用,否则会出现编译错误。局部变量的初始化局部变量的初始化查看结果:TestVar.java93查看结果:Person.java94方法体内的变量叫局部变量方法体内的变量叫局部变量9596变量值也必须与变量类型相匹配变量值也必须与变量类型相匹配例如例如:int studentNumber;int studentNumber;/声明单个变量声明单个变量double velocity,distance;double velocity,distance;/声明多个变量声明多个变
34、量studentNumber=30;studentNumber=30;/给变量赋以整数给变量赋以整数3030int studentNumber=30;/int studentNumber=30;/声明变量,并赋初值声明变量,并赋初值9798成员变量在整个类内都有效;成员变量在整个类内都有效;局部变量只在定义它的方法内有局部变量只在定义它的方法内有效。效。99在类中声明的类成员变量,可在该类的各个成员方法中使用;在某个方法体中或参数表中声明的变量,只能在该方法体中使用;在某个语句块中声明的变量,只能在该语句块中使用。100成员变量的隐藏性成员变量的隐藏性 局部变量与成员变量名字相同时,则成员变量
35、将被隐藏,即在这个方法内暂时失效,只有局局部变量与成员变量名字相同时,则成员变量将被隐藏,即在这个方法内暂时失效,只有局部变量起作用部变量起作用例:例:class tomclass tom int x=98,y;int x=98,y;void f()void f()int x=3;int x=3;y=x;y=x;/y=/y=?3101查看结果:Person1.java102public class VariableLifeTimepublic static void main(String args)int sum=0;int A=10;for(int x=1;x=5;x+)int y=0;y
36、=y+A;sum=sum+y;System.out.print(x=+x);System.out.print(y=+y);System.out.println(sum=+sum);System.out.println(sum=+sum);查看结果:VariableLifeTime.java103public class ScopeErrorpublic static void main(String args)int E=999;int E=999;/错误的定义,Java中不允许有这种嵌套定义System.out.println(“E=+E);104105106示例:示例:public cla
37、ss Assign public class Assign public static void main(String args)public static void main(String args)int x;int x;int y;/int y;/定义定义x,yx,y两个整型变量两个整型变量 float z=1.234f;/float z=1.234f;/指定变量指定变量z z为为floatfloat型,且赋初值为型,且赋初值为1.2341.234double w=1.234;/double w=1.234;/指定变量指定变量w w为为doubledouble型,且赋初值为型,且赋初值
38、为1.2341.234boolean flag=true;/boolean flag=true;/指定变量指定变量flagflag为为booleanboolean型,且赋初值为型,且赋初值为truetruechar c;/char c;/定义字符型变量定义字符型变量c cString str;/String str;/定义字符串变量定义字符串变量strstrString str1=Hi ;/String str1=Hi ;/指定变量指定变量str1str1为为StringString型,且赋初值为型,且赋初值为HiHic=A ;/c=A ;/给字符型变量给字符型变量c c赋值赋值AAstr=b
39、ye ;/str=bye ;/给字符串变量给字符串变量strstr赋值赋值byebyex=12;/x=12;/给整型变量给整型变量x x赋值为赋值为1212y=x;/y=x;/给整型变量给整型变量y y赋值为赋值为1212 107Java区分大小写一个程序中可以有一个或多个类,但其中只能有一个public类源程序编写完毕,应该以主类名作为文件名,再加后缀.java存储编写编写Java程序需要注意的几点程序需要注意的几点108弱类型 强类型:隐式类型转换强类型 弱类型:强制类型转换各个基本数据类型间的强弱关系:byteshort int long float 右边的数据类型:byte num1=
40、53;byte num2=47;long num3;num3=num1*num2;左边的数据类型右边的数据类型:int num1=53;int num2=47;byte num3;num3=num1+num2;左边的数据类型右边的数据类型:int num1=53;int num2=47;byte num3;num3=num1*num2;198注意:注意:JavaJava是强类型语言,因此,在进行赋值操作时要对类型进行检查;是强类型语言,因此,在进行赋值操作时要对类型进行检查;199200查看结果:Promotion.java201 public class Agepublic static v
41、oid main(String args)int ageYears;int ageDays;long ageSeconds;ageYears=Integer.parseInt(args0);ageDays=ageYears*365;ageSeconds=(ageYears*365*24L*60*60);System.out.print(“You are”+ageDays+”days old.”);System.out.print(“You are”+ageSeconds+”seconds old.”);查看结果:Age.java202六个关系运算符六个关系运算符:、=、=和和!=!=用于比较数
42、值类型数据的大小,结果是布尔值用于比较数值类型数据的大小,结果是布尔值例如例如:1 2;/false1 2;/false3.5!=1;/true 3.5!=1;/true 51.5=23.0;51.5=23.0;/true/true540=654;540=654;/true/true24=324=3*8;/true8;/trueboolean test1=(10 10);/test1=false;boolean test1=(10 10);/test1=false;203 、=只能用来比较两个数值类型数据只能用来比较两个数值类型数据(含字符类型含字符类型)的大小的大小不能用于不能用于Strin
43、gsStrings、booleansbooleans、arraysarrays或其他类型或其他类型204操作数要求是布尔类型数据,结果为布尔值操作数要求是布尔类型数据,结果为布尔值六个布尔逻辑运算符六个布尔逻辑运算符:&(逻辑与逻辑与AND)AND)|(逻辑或逻辑或OR)OR)(逻辑异或逻辑异或XOR)XOR)!(逻辑非逻辑非NOT)NOT)单目运算符单目运算符,即只有一个操作数即只有一个操作数&(条件与条件与AND)AND)|(条件或条件或OR)OR)205如果从第一个操作数可以推断出表达式结果,就不再计算第二个操作数如果从第一个操作数可以推断出表达式结果,就不再计算第二个操作数例如例如:i
44、f(x=2)&(y!=2)if(x=2)&(y!=2)System.out.println(System.out.println(两个条件都为两个条件都为 true.);true.);206两个操作数均会被运算两个操作数均会被运算(即不采用短路规则即不采用短路规则)例如例如,(birthday=true)|(+age=65)(birthday=true)|(+age=65)查看结果:J_Boolean.java207位运算符包括:位运算符包括:&、|、和和 带符号右移带符号右移 不带符号右移不带符号右移越晦涩难懂的,越会被越晦涩难懂的,越会被SCJPSCJP考到考到(?)(?)移位操作是:先将
45、整数写成二进制形式,然后按位操作,最后产生一个新的数移位操作是:先将整数写成二进制形式,然后按位操作,最后产生一个新的数注意注意:只用于整数只用于整数208赋值类运算符包括:赋值类运算符包括:=、+=+=、-=-=、*=、/=/=、&=&=、|=|=、%=%=op1=op1 op1=op1 二元运算符二元运算符 op2;op2;等价于等价于 op1 op1二元运算符二元运算符=op2;=op2;例如:例如:a+=b;a+=b;等价于等价于a=a+b;a=a+b;i i*=2+3=2+3等价于等价于?209条件运算符条件运算符“?:?:”的表达式形式为的表达式形式为(op1?op2:op3op1
46、?op2:op3)其中要求其中要求op1op1为布尔表达式为布尔表达式Op1的值为true,结果为表达式op2的值;否则,结果为表达式op3的值op2和op3需要返回相同的数据类型,不能为void210例如例如:int i=5;int i=5;int k=(i=0)?1:-1);int k=(i=0)?1:-1);211int x=5,y=8,z=2int k=x0?x:-x;请问y=?y=|x|212其他运算符包括:其他运算符包括:(类型类型)、.、()()、instanceofinstanceof和和newnew例如:例如:int a=51;int a=51;char c=(char)a;
47、char c=(char)a;213优先级规则:()乘除(从左到右)加减(从左到右)复杂的表达式:C=25-5*4/2-10+4;从左到右的规则求值,结果是:34按照优先级规则求值,结果是:9可以用()来改变优先顺序或使表达式更容易理解例如:a+b+c/3(a+b+c)/3214结构化程序设计的三种基本控制语句顺序结构选择结构 三种类型:if、if/else和switch 循环结构 三种类型:for、while和do/while按语句书写的先后顺序执行在若干路径中有条件地择一执行当某条件成立时,反复执行一段代码215ifif语句的格式是语句的格式是:if(if(布尔表达式布尔表达式)语句语句或
48、或if(if(布尔表达式布尔表达式)一条或多条语句一条或多条语句 例如例如if(grade=60)if(grade=60)System.out.println(Passed);System.out.println(Passed);216if-elseif-else语句的格式是语句的格式是:if(if(布尔表达式布尔表达式)语句语句1 1或语句块或语句块1 1elseelse 语句语句2 2或语句块或语句块2 2例如:例如:if(grade=60)if(grade=60)System.out.println(Passed!);System.out.println(Passed!);elseels
49、e System.out.println(Failed!);System.out.println(Failed!);217例例 1 1System.out.println(studentGrade=60?PassedSystem.out.println(studentGrade=60?Passed“:Failed);:Failed);例例2 2 max=(a b?a:b);max=(a b?a:b);可以写成:可以写成:if(a b)if(a b)max=a;max=a;elseelse max=b;max=b;218例:比较两个数的大小,并按照从大到小的顺序输出到屏幕上。public cla
50、ss CompareTwo public static void main(String args)double d1=23.4;double d2=56.9;if(d1=d2)System.out.println(d1+”=“+d2);else System.out.println(d2+”=“+d1);219多重If 结构220查看结果:Coffee.java221222If 条件A If 条件B 语句块1else 语句块2注意:else总是与最近的if匹配If 条件A If 条件B 语句块1 else 语句块2223使用=比较String在内存中的引用是否相等要测试两个字符串之间是否具有