资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,程序设计,成绩考核,最终成绩,=30%,平时成绩,+70%,期末考试成绩,平时成绩,=,考勤成绩,+,平时作业成绩,期末考试:开卷笔试,Java,程序设计上机安排,第,10,周,周四,第,12,周,周一,第,13,周,周一,国外的外包公司使得基础的计算机编程技术越来越廉价,如今它甚至成为了世界贫困人口的致富驱动力,而不再代表着高端技术。,引自:,大数据时代,,维克托,迈尔,-,舍恩伯格,肯尼思,库克耶,在这,10,年的发展中,,Java,平台吸引了数百万的开发者,在网络计算遍及全球的今天,,Java,已广泛应用于移动电话、桌面计算机、蓝光光碟播放器、机顶盒甚至车载,更是有,30,多亿,台设备使用了,Java,技术。,第,1,章,Java,语言概述,本章的主要内容:,1.1 java,的特点及有关概念,1.2 Java,程序开发,1.3,综合应用,1.1 Java,语言的特点及相关概念,1.1.1 Java,语言的发展里程,1.1.2 Java,的特点,1.1.3 Java,虚拟机,1.1.1 Java,语言的发展里程,Java,语言前身是,Oak,语言,于,1991,年推出,但仅限于,Sun Microsystems,公司内部使用。,1995,年,Oak,语言改名为,“,Java,”,,并正式向公众推出,主要贡献者是,James Gosling,。,1.2,版本,的,Java,是,Java,语言发展过程中一个关键阶段,从此,,Sun,公司将,Java,更名为,Java2,。经过十年的发展,,Java,语言已经发展到,1.8,版本。,从,JDK 1.2,版本开始,,Sun,以平均两年一个版本的速度推出新的,JDK,。,2000,年,5,月,,Sun,公司发布了,JDK 1.3,版本;,2002,年,2,月,,Sun,公司发布了,JDK 1.4,版本;,2004,年,10,月,,Sun,公司发布了,JDK 1.5,版本,同时,,Sun,公司将,JDK 1.5,改名为,JDK 5.0,。,2006,年,4,月,发布了,JDK 6.0,测试版本,并于,2007,年初发布了,JKD 6.0,正式版本,,2011,年,7,月发布了,JDK 7.0,版本。,2014,年,3,月,18,日,,Oracle,公司发表,Java SE 1.8,。,版本号,名称,中文名,发布日期,JDK1.0,1996-1-23,JDK1.1.4,Sparkler,宝石,1997-09-12,JDK1.1.5,Pumpkin,南瓜,1997-12-13,JDK1.1.6,Abigail,阿比盖尔,-,女子名,1998-04-24,JDK1.1.7,Brutus,布鲁图,-,古罗马政治家和将军,1998-09-28,JDK1.1.8,Chelsea,切尔西,-,城市名,1999-04-08,J2SE1.2,Playground,运动场,1998-12-04,J2SE1.2.1,none,无,1999-03-30,J2SE1.2.2,Cricket,蟋蟀,1999-07-08,J2SE1.3,Kestrel,美洲红隼,2000-05-08,J2SE1.3.1,Ladybird,瓢虫,2001-05-17,J2SE1.4.0,Merlin,灰背隼,2002-02-13,J2SE1.4.1,grasshopper,蚱蜢,2002-09-16,J2SE1.4.2,Mantis,螳螂,2003-06-26,J2SE5.0,(1.5.0),Tiger,老虎,2004-9-30,J2SE6.0,(Beta),Mustang,野马,2006-4,1.1.2 Java,的特点,(1/4),1,语法简单,(,1,),Java,的风格类似于,C+,(,2,),Java,摒弃了,C+,中容易引发程序错误的地方,如指针和内存管理;,(,3,),Java,提供了丰富的类库。,2,面向对象,面向对象编程是一种先进的编程思想,更加容易解决复杂的问题。面向对象可以说是,Java,最重要的特性。,Java,语言的设计完全是面向对象的,,1.1.2 Java,的特点,(2/4),3分布式,JAVA从诞生就起就与网络联系在一起,它强调网络特性,内置TCP/IP,HTTP,FTP协议类库,便于开发网上应用系统。,4安全性,(,1,)在,Java语言里,象指针和释放内存等C+功能被删除,避免了非法内存操作。,(,2,)当,Java用来创建浏览器时,语言功能和一些浏览器本身提供的功能结合起来,使它更安全。Java语言在机器上执行前,要经过很多次的测试。其三级安全检验机制可以有效防止非法代码侵入,阻止对内存的越权访问。,1.1.2 Java,的特点,(3/4),5健壮性,Java致力于检查程序在编译和运行时的错误。异常检查,可尽早的发现可能存在的错误。类型检查帮助检查出许多开发早期出现的错误。,6,解释运行,高效率,Java,解释器(运行系统)能直接运行目标代码指令。,Java,程序经编译器编译,生成的字节码经过精心设计,并进行了优化,因此运行速度较快,客服了以往解释性语言运行效率低的缺点。,1.1.2 Java,的特点,(4/4),7,与平台无关,JAVA,编译器将,JAVA,程序编译成二进制代码,即字节码。字节码有统一的格式,不依赖于具体的硬件环境。,8,多线程,Java,提供的多线程功能使得在一个程序里可同时执行多个小任务。,9,动态性,Java,的动态特性是其面向对象设计方法的发展。它允许程序动态地装入运行过程中所需要的类。,平台无关性,(1/2),平台无关类型包括源代码级和目标代码级两种类型。,C和C+属于源代码级平台无关,意味着用其写的应用程序不用修改只需重新编译就可以在不同平台上运行。,Java属于目标代码级平台无关,主要靠Java虚拟机JVM来实现。,对高级语言的翻译方式有解释和编译两种,解释方式就是一边翻译一边运行,而编译方式则是一次性翻译好,生成目标程序。,平台无关性,(2/2),解决移植性的方法有以下两种方式:,方式1,:到一台机器上将源程序重新编译成适合该台机器的机器代码。,方式2,:将高级语言源程序编译成一种与机器无关的中间代码(如Java语言的字节码),该中间代码程序不能被操作系统直接执行,需要由解释其来解释和执行。,Java语言采用,方式2,,将由解释程序扩展了的指令系统的机器称为Java虚拟机,简称JVM。,1.1.3 Java,虚拟机,JVM,虚拟机,是一种对计算机物理硬件计算环境的软件实现。虚拟机是一种抽象机器,内部包含一个解释器(,Interpreter,),可以将其它高级语言编译为虚拟机的解释器可以执行的代码(称这种代码为中间语言,Intermediate Language,),实现高级语言程序的可移植性平台无关性(,System Independence,),无论是运行在嵌入式设备还是多个处理器的服务器上,虚拟机都执行相同的指令,所使用的支持库也具有标准的,API,和完全相同或相似的行为。,1.1.3 Java,虚拟机,JVM,Java虚拟机,(Java Virtual Machine,简称JVM)是一种抽象机器,它附着在具体操作系统上,本身具有一套虚拟机器指令,并有自己的栈,寄存器等,运行JAVA程序不可少的机制。编译后的JAVA程序指令并不直接在硬件系统CPU上执行,而是在JVM执行。在JVM上有一个Java解释器用来解释Java编译器编译后的程序。任何一台机器只要配备了解释器,就可以运行这个程序,而不管这种字节码是在何种平台上生成的。,图,1-1,计算机硬件、操作系统、,JVM,与各种可执行程序之间的关系,机器代码,硬件,操作系统,JVM,本地可执行文件,(,.exe,,,.com,文件),Java,字节码文件,(,.class,文件),Java,虚拟机,JVM,JVM,体系结构图,类装载器,字节码,解释器,安全管理器,垃圾收集器,线程管理,图形,Java,虚拟机,操作系统,字节码,*,.class,文件,图,1-2 Java,虚拟机体系结构示意图,Java,与,C/C+,之关系,相近之处,Java,中许多基本语句的语法和,C+,一样,像常用的循环语句、控制语句等和,C+,几乎一样,Java,和,C+,是两种完全不同的语言,不同之处(见下页),不同之处,Java,去掉了,C+,语言的许多功能,,Java,中没有,#include,和,#define,等预处理功能,用,import,语来句包含其它类和包;,Java,中没有,structure,,,union,及,typedef,;,Java,中没有不属于类成员的函数,没有指针和多重继承,,Java,只支持单重继承;,Java,中禁用,goto,,但,goto,还是保留的关键字;,Java,中没有操作符重载;,Java,中没有全局变量,可以在类中定义公用、静态的数据成员实现相同功能。,1.2 Java,运行平台,1.2.1 Java,运行平台,1.2.2 Java,开发过程,1.2.3 Java,开发工具箱,(JDK),简介,1.2.1 Java,运行平台,1,三种平台简介,J2SE,:,Java,标准版或,Java,标准平台。,J2SE,提供了标准的,SDK,开发平台(以前称做,JDK,开发平台)。,J2EE,:,Java,企业版或,Java,企业平台。,J2ME,:,Java,微型版或,Java,小型平台。,2环境变量,JAVA_HOME,为那些需要使用Java命令和JVM的程序提供了通用的路径信息,其值应设置为JDK的安装目录的路径,,JAVA_HOME=C:javajdk1.7,CLASSPATH,用于指明字节码文件的位置。,CLASSPATH=c:javajdk1.7jrelibrt.jar;.,PATH,是操作系统使用的变量,用于搜索在Shell中输入的希望执行的命令。,在,Windows 2000,和,Windows XP,中设置,JAVA_HOME,的步骤如下。,(1),鼠标右键单击“我的电脑”。,(2),选择“属性”菜单项。,(3),在出现的窗口中,选择“高级”选项。,(4),在出现的窗口中,选择“环境变量”选项。,在,Windows 7,中设置环境变量的步骤如下。,(1),鼠标右键单击“计算机”。,(2),选择“属性”菜单项。,(3),在出现的窗口中,单击“高级系统设置”。,(4),在出现的窗口中,单击“环境变量”选项。,(5),进行环境变量设置。,set PATH=%PATH%;c:javajdk1.7bin;,set JAVA_HOME=c:javajdk1.7,set CLASSPATH=c:javajdk1.7jrelibrt.jar;.;e:wulib;e:java;,3JDK1.7,版本安装,从,网站下载,然后安装该程序。,Java,编译器,源文件,编辑器,字节码文件,由,Web,浏览器执行,文件名,.java,产生,对于,Java,小应用程序,对于,Java,应用程序,由,Java,解释器执行,图,1-1 Java,程序开发过程示意图,1.2.2 Java,程序开发过程,1,Java,应用程序的开发,(,1,)编写源文件,Editplus,等文本编辑器生成,Hello.java,(,2,)编译源文件生成字节码,javac Hello.java,(,3,)加载运行字节码,java Hello,Application程序的命名,特点:,(,1,)区分大小写;,(,2,)如果程序中有,public,类,则程序名称必须和,public,类的名称一致;,(,3,)如果程序没有,public,类,则程序名称可以任取。但建议以包含,main(),方法的类的名称作为程序名称。因为,无论程序名称如何,使用,Java,命令运行时,其后的字节码文件一定是,main(),方法所在类对应的字节码文件。,通常将与源文件名相同的类定义为主类,换句话说Java程序文件名必须和主类的名称一致,且扩展名是java。主类按如下确定:,(1)若源文件中存在public类,则该类为主类;,(2)若源文件没有public类,则可定义任何类为主类。,对Application程序而言,,必须有一个类含有,public static void main(String args),方法,args是main方法的一个参数,是一个字符串类型的数组(注意String的第一个字母是大写的),通常以包含main方法的类作主类。,也可以将其他类定义为,public,类,并以此作为源程序名称,当在,java,命令后跟随的类参数名应该为包含,main,方法的类名,/Hello.java,public class Hello,public static void main,(,String args,),System.out.println,(,你好,很高兴学习,Java,),;,C:javac Hello.java,C:java Hello,2,Java Applet,程序的开发,(1),编写源文件,Editplus,等文本编辑器,Boy.java,(2),编译源文件生成字节码,javac Boy.java,(3),通过浏览器加载运行字节码,Html,文件,myBoy.html,或,appletviewer myboy.html,/Boy.java,import java.applet.*;,import java.awt.*;,public class Boy extends Applet,public void paint,(,Graphics g,),g.setColor(Color.blue);,g.drawString,(,Java,是一门很优秀的语言,,,12,,,30,),;,g.setColor,(,Color.red,),;,g.drawString,(,我一定认真学习,Java,,,22,,,56,),;,/myBoy.html,C:,javac Boy.java,C:,appletviewer myboy.html,Java,中,Applet,程序命名具有如下特点:,(,1,)区分大小写;,(,2,)以,Applet,为父类的子类应为,public,类,程序名称与该类的名称一致。,1.2.3 Java,开发工具箱,Java,开发工具箱,(JDK-Java Development Kit),是,Sun,公司为用户提供的集成和执行,applets,和应用程序的工具,javac,编译器:可以用任何文字编辑器创建,Java,程序,java,翻译器,;,用于执行编译过的,Java,应用程序。,appletviewer:,可运行,applets,而不必运行,Web,浏览器。,javap,反汇编程序,:,从字节码文件恢复,java,原代码。,javadoc,工具,:,可以为所编写的源文件生成,HTML,文档,1.3,综合应用,【,实例,1-3】,第,2,章,Java,语言基础,2.1 Java,程序概况,2.2,基本数据类型,2.3,运算符和表达式,2.4 Java,语句,2.1 Java,程序概况,2.1.1 Java,程序结构,2.1.2 Java,注释,2.1.3 Java,关键字,2.1.4 Java,标识符,2.1.5,变量与常量,2.1.1 Java,程序结构,Java源程序一般由一个或多个编译单元组成,每个编译单元只能包含以下内容(空格和注释除外):,package包语句,import导入语句,类的声明,接口声明,图,2-1 Java,程序中各元素及其关系,注释,0.n,package,0.1,import,0.n,成员变量,0.n,方法,0.n,局部变量,0.n,执行语句,0.n,类,1.n,Java,程序,/*,这是一个简单的,Java,程序示例程序*,/,package mypack;,import java.util.*;,public class Example,public static void main(String args),System.out.println(Java,欢迎您!,);,/*,这是一个简单的,Java,程序示例,*,/,package mypack;,import java.util.*;,public class Example,public static void main(String args),String s=Java,欢迎您!,;,System.out.println(s);,注释,package,语句,import,语句,类,方法,变量定义,语句,2.1.2 Java,注释,方式1:/注释一行,例如:num=2;/num是计算器,用于累计选课人数,方式2:/*一行或多行注释*/,例如:,/*,本方法用于计算阶乘,*/,方式3:/*文档注释*/,文档注释一般放在一个变量或函数定义说明之前,表示该段注释应包含在自动生成的任何文档中(即由javadoc生成的HTML文件)。这种注释都是声明条目的描述。,2.1.3 Java,关键字,abstract,const,finally,interface,return,throw,boolean,continue,float,long,safe,transient,break,default,for,native,short,true,by,do,goto,new,static,try,byte,double,if,null,super,value,case,else,implements,package,switch,void,catch,extends,import,private,synchronized,volatile,char,false,instanceof,protected,this,while,class,final,int,public,thread,2.1.4 Java,标识符,所谓,标识符,就是用来标识包名、类名、接口名、变量名、方法名、文件名等的有效字符序列。,由字母、下划线、美元符号和数字组成,并且第一个字符不能是数字。,标识符中的字母是区分大小写的例子:判断正误,(1)3max (2)class,(3)room#(4)userName,(5)user_Name (6)UserName,一般标识符按照以下规则命名:,(,1,)标识符尽量采用有意义的字符序列,便于从标识符识别出所代表的基本含义。,(,2,),包名,:包名是全小写的名词,中间可以由点分隔开,例如:,java.awt.event,。,(,3,),类名,:首字母大写,通常由多个单词合成一个类名,要求每个单词的首字母也要大写,例如,class HelloWorldApp,。,(,4,),接口名,:命名规则与类名相同,例如,interface Collection,。,(,5,),方法名,:往往由多个单词合成,第一个单词通常为动词,首字母小写,中间的每个单词的首字母都要大写,例如:,balanceAccount,,,isButtonPressed,。,(,6,),变量名,:全小写,一般为名词,例如使用,area,表示面积变量,,length,表示程度变量,等等。,(,7,),常量名,:基本数据类型的常量名为全大写,如果是由多个单词构成,可以用下划线隔开,例如:,int YEAR,int MAX_VALUE,;如果是,对象类型的常量,,则是大小写混合,由大写字母把单词隔开。,(,8,),对变量和方法,,其名称不宜以,_,和,$,为第一个字符,因为这两个字符对于内部有特殊含义。,2.1.5,变量与常量,Java,变量是一个由标识符命名的项。变量具有一定类型,例如,int,型或,class,型,也具有作用域,其值可被改变。,变量声明的语法形式如下:,varType varName=value,varName=value,;,double area,r;,在变量声明格式前加上,final,修饰符,就声明了一个常量。常量一旦被初始化以后就不可改变。,常量声明的语法形式如下:,final varType varName=value,varName=value,;,2.2,基本数据类型,2.2.1 基本数据类型概况,2.2.2 基本数据类型转换,2.2.1 基本数据类型概况,基本数据类型也称作简单数据类型,,Java,语言有,8,种简单数据类型,分别是:,boolean,、,byte,、,short,、,int,、,long,、,float,、,double,、,char,。,复合数据类型包括,数组、类和接口,等。,图,2-2 Java,语言数据类型,数值类型,整数类,int,byte,short,long,浮点类,double,float,逻辑类,boolean,字符类,char,数组,type,类,class,接口,interface,数据类型,基本数据类型,复合数据类型,2.2.1 基本数据类型概况,1,逻辑类型,常量:,true,,,false,。,变量的定义:使用关键字,boolean,来定义逻辑变量,定义时也可以赋给初值。,例如:,boolean x,;,/,定义逻辑型变量,x,boolean x=false;/,定义逻辑型变量,x,,并赋值为,false,2.2.1 基本数据类型概况,2整数类型,常量:123,6000(十进制),077(八进制),0 x3ABC(十六进制)。,整型变量的定义分为4种,类型,举例,字节长度,byte,byte x,y=1;,1,short,short x,y=2;,2,int,int x,y=3;,4,long,long x,y=4;,8,2.2.1 基本数据类型概况,3,字符类型,常量:,unicode,字符表中的字符就是一个字符常量,例如,A,,,?,,,9,,,好,,,,等。,Java,还使用转意字符常量,如:,n,为换行转意字符常量。,变量的定义:使用关键字char来定义字符变量,例如:char x=,A,,漂亮=,假,,jiafei;,特别提示:,一个unicode字符占2个字节,char型变量,内存分配给2个字节,占16位,最高位不是符号位,没有负数的char。char型变量的取值范围是0-65536。,运行结果为:,在,unicode,表中字符,中,对应的序号为,20013,在,unicode,表中字符,国,对应的序号为,22269,在,unicode,表中字符,梦,对应的序号为,26790,在,unicode,表中序号,22797,对应的字符为,复,在,unicode,表中序号,20852,对应的字符为,兴,在,unicode,表中序号,26790,对应的字符为,梦,说明:,将“,note1”,所在行的语句“,ch1=(char)n1;”,变为“,ch1=20064;”,可以得到同样的结果,可是将该语句变为“,ch1=n1;”,则会出错。详细原因请见随后的类型转换部分。,2.2.1 基本数据类型概况,4,浮点类型,浮点类型包括,float,型和,double,型。浮点型数值缺省为,double,型,,float,型在数值之后加,f,或,F,例如,,float,型常量:,453.5439f,,,21379.987F,,,2e40f,,,double,型常量:,21389.5439d,(,d,可以省略),,6e-140,。,float,型变量的定义:,float x,y=22.76f;,double,型变量的定义:,double x,y=12.76,2.2.2 基本数据类型转换,所谓类型转换就是将一种数据类型变量转变成另一种类型变量。,Java,语言是一种强类型语言,(,类似于,C+,,而不是,C,语言,),。当表达式中的数据类型不一致时,就需要进行数据类型转换。,Java,语言类型转换方式可分为,:,隐式类型转换,:,编译程序在编译时可以自动执行类型转换;,显式类型转换,:,则必须在程序中显式地执行强制转换,强制转换的格式为:,(,类型,),表达式,int n=65;,char ch;,ch=(char)n;,n,为,int,型,,ch,为,char,型,,(char)n,将,int,型强制转换为,char,型。此时,,ch,值为,A,,,65,正好是是字符,A,在,unicode,字符表中的位置。,Java,语言中基本数据类型之间转换,低精度值可以直接赋给高精度变量,进行隐式类型转换;,高精度值则需要使用强制类型转换后赋给低精度变量,此时可能会导致数据精度的损失,也有可能导致结果出现较大错误。,2.2.2 基本数据类型转换,数据精度从,“,低,”,到,“,高,”,排序:,byte,short,(,char,),int,long,float,double,规则,1,:,当把精度低的变量的值赋给精度高的变量时,系统自动完成数据类型的转换,如,int,型转换成,long,型,规则,2,:,当把精度高的变量的值赋给精度低的变量时,必须使用显示类型转换运算。,(类型名)要转换的值;,int x=(int)34.89;,规则,3,:,char,与,byte,或,short,之间的赋值必须实行强制转换。,2.2.2 基本数据类型转换,byte b1=18,b2;,short sint1,sint2;,char ch1,ch2=,A,;,ch1=(char)b1;,b2=(byte)ch2;,s int2=(short)ch2;,注意事项:强制转换运算可能导致精度的损失。当把一个整数赋值给一个,byte,、,short,、,int,或,long,型变量时,不可以超出这些变量的取值范围,否则必须进行类型转换运算。,public class,Exam020204,public static void main(String args),byte a=120;,short b=255;,int c=2200;,long d=8000;,float f;,double g=0.1234567812345678;,b=a;,c=(int)d;,f=(float)g;,System.out.println(a=+a);,System.out.println(b=+b);,System.out.println(c=+c);,System.out.println(d=+d);,System.out.println(e=+e);,System.out.println(f=+f);,System.out.println(g=+g);,【,实例,2-3】,运行结果为:,a=120,b=120,c=8000,d=8000,f=0.12345678,g=0.1234567812345678,2.3,运算符和表达式,2.3.1 算术运算符和算术表达式,2.3.2 关系运算符与关系表达式,2.3.3 逻辑运算符与逻辑表达式,2.3.4 赋值运算符与赋值表达式,2.3.5 位运算符,2.3.6 条件运算符,2.3.7 instanceof 运算符,2.3.8 一般表达式,2.3.1,算术运算符和算术表达式,Java,算术运算符主要包括一元运算符(如,+,,,-,,,+,,,-,)和二元运算符(如,,+,,,-,,*,,/,,,%,),与,C/C+,基本相同,算术表达式是用算术符号和操作元连接起来的符合,Java,语法规则的式子。,例如:,(f*b)+(i/c)-(d*s),2.3.1,算术运算符和算术表达式,java将按运算符两边操作元的最高精度保留结果。操作元的精度从低到高排列顺序是:,byteshortintlongfloatdouble,执行任何算术运算或按位运算,,“,比int小,”,的数据(char、byte、short)在正式执行运算之前,那些值会自动转换成int,整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级。,例如:若将一个float值与一个double值相乘,结果就是double;如将一个int值和一个long值相加,则结果为long。,操作数,1,操作数,2,结果类型,byte,short,char,int,int,byte,short,char,int,long,long,byte,short,char,int,long,float,float,byte,short,char,int,long,float,double,double,举例说明,5/2,的结果为,2,,因为运算符,“,/,”,左右操作数均为int型,因此结果也为int型;,5.0/2,的结果为,2.5,,因为运算符,“,/,”,左操作数为double型,右操作数为int型,因此运算时首先统一为double型,显然结果也为double型。,class autoPromoteExample,public static void main(String args),byte b=1;,char c=b;,short s=10;,int i=100;,float f=1.23f;,double d=6.78,result;,result=(f*b)+(i/c)-(d*s);,System.out.println(result=+result);,以下说明表达式,(f*b)+(i/c)-(d*s),计算过程中数据类型转换过程:,首先,在第一个子表达式,f*b,中,变量,b,被提升为,float,类型,该子表达式的结果,(,称为中间值,1),是,float,类型。在子表达式,i/c,中,变量,c,被提升为,int,类型,该子表达式的结果,(,称为中间值,2),是,int,类型。在子表达式,d*s,中,变量,s,被提升为,double,类型,该子表达式的结果,(,称为中间值,3),是,double,类型。,其次,,float,类型中间值,1,和,int,类型中间值,2,的结果,(,称为中间值,4),是,float,类型。最后,,float,类型中间值,4,和,double,类型中间值,3,相减的结果是,double,类型。因此,该表达式的最后结果是,double,类型。,2.3.2,关系运算符与关系表达式,运算符,表达式,返回,true,的情况,op1,op2,op1,大于,op2,=,op1,=op2,op1,大于或等于,op2,op1,op2,op1,小于,op2,=,op1,=op2,op1,小于或等于,op2,=,op1=op2,op1,与,op2,相等,!=,op1!=op2,op1,与,op2,不等,2.3.3,逻辑运算符与逻辑表达式,操作数取值,表达式运算结果,op1,op2,op1&op2,op1|op2,!op1,false,false,false,false,true,false,true,false,true,true,true,false,false,true,false,true,true,true,true,false,2.3.4,赋值运算符与赋值表达式,赋值运算符,“,=,”,是双目运算符,左面的操作元必须是变量。级别是,14,级,结合性从右到左。,2.3.5,位运算符,Java,位运算符主要面对基本数据类型,包括,byte,、,short,、,int,、,long,和,char,。,位运算符包括,“,按位与,”,&,、,“,按位或,”,|,、,“,按位非,”,、,“,按位异或,”,、左移,。此外,,Java,引入一个专门用于逻辑右移运算符,,它采用了所谓的零扩展技术,不论原值是正或负,一律在高位补,0,。,例如:,int a=-2,b;,b=a30;,2.3.6,条件运算符,条件运算符是一个,3,目运算符,符号是:,“,?:,”,。,用法如下:,op1,?,op2,:,op3,要求第一个操作元,op1,的值必须是,boolean,型数据。,运算法则是:当,op1,的值是,true,时,运算的结果是,op2,的值;当,op1,的值是,false,时,运算的结果是,op3,的值。,Java,要求:,op2,与,op3,必须同类型。,例如,,128?100:200,的结果是,100,;,12y&x0?(x+1):y),的值是,int,型数据,结果为,17,。,2.4 Java,语句,2.4.1 Java语句概述,2.4.2 分支语句,2.4.3 循环语句,2.4.4 跳转语句,2.4.5 输入输出语句,2.4.1 Java,语句概述,Java,语言中的语句可分为以下,5,类:,(,1,)方法调用语句:例如,reader.nextInt();,(,2,)表达式语句:,x=23,;,(,3,)复合语句:,“,”,+,代码块,+,“,”,,例如,,z=23+x;,System.out.println(hello);,(,4,)控制语句:条件分支语句、循环语句和跳转语句。,(,5,),package,语句和,import,语句,2.4.2,分支语句,1,条件分支语句,if-else,语句,.,if(,表达式,),若干语句,else,若干语句,多条件,if-else if-else,语句,if(,表达式,1),若干语句,else if(,表达式,2),若干语句,else if(,表达式,n),若干语句,else,若干语句,if(,表达式,),的表达式的值必须是,boolean,型,图,2-6,多条件,if-else if-else,语句执行过程示意图,表达式,1,语句块,1,true,false,表达式,2,语句块,2,true,false,表达式,n,语句块,n,true,false,default,:语句块,n+1,语句块,1,true,表达式,语句块,2,false,2.4.2,分支语句,switch(,表达式,),case,常量值,1,:,若干个语句,break,;,case,常量值,n,:,若干个语句,break,;,default,:,若干语句,图,2-6 switch,语句执行过程示意图,表达式,其他语句,值,1,break;,语句块,1,值,2,break;,语句块,2,值,n,break;,语句块,n,default,break;,语句块,n+1,匹配,匹配,匹配,匹配,图,2-6 switch,语句执行过程示意图,表达式,语句块,1,break;,匹配,语句块,2,break;,匹配,语句块,n,break;,匹配,值,1,值,2,值,n,语句块,n+1,break;,匹配,default,其他语句,不包含,break,不包含,break,不包含,break,不包含,break,public class switchExample,public static void main(String args),int month=1;,String str=;,switch(month),case 1:,case 2:,case 3:,str=,春季,;,break;,case 4:,case 5:,case 6:,str=,夏季,;,break;,case 7:,case 8:,case 9:,str=,秋季,;,b
展开阅读全文