12.Java语言基础z内容提要–数据类型–标识符和关键字–常量与变量–数据类型–运算符–分支语句–循环语句–跳转语句–数组2标识符用来唯一地标识Java程序中的各种成分的名称,包括类名、对象名、方法名、常量名和变量名等,统称为标识符标识符由程序员定义,可以由字母、数字、下划线(_)和($)符号组成,但是标识符的第一个字符不允许为数字,只允许为字母、下划线(_)或($)符号。长度不限,区分大小写,为提高可读性应使用有意义的名称,要尽量遵循“见其名知其意“的原则。3zJava标识符的具体命名规则如下:–一个标识符可以由几个单词连接而成。–对于类名,每个单词的首字母都要大写,其他字母则小写,例如RecordInfo。–对于方法名和变量名,与类名有些相似,除了第一个单词的首字母小写外,其他单词的首字母都要大写,例如getRecordName()。–对于常量名,每个单词的每个字母都要大写,如果由多个单词组成,通常情况下单词之间用下划线(_)分隔,例如MAX_VALUE。–对于包名,每个单词的每个字母都要小写,例如com.frame。4关键字z关键字(保留字)–Java语言为特殊目的而保留的由ASCII字符构成的字符串,统称为关键字,例如public、class、int等。–关键字都有特定含义,只能用于特定的位置,不能作为标识符使用。–有些关键字尚未使用,如goto,const等。–有些非关键字如true和false也不能作为标识符使用。5Java关键字abstractcastdefaultfinalgoto*intoperatorrestsynchronizedtrybooleancatchdofinallyifinterfaceouterreturnthisvarbreakchardoublefloatimplementslongpackageshortthrowvoidbyteclasselseforimportnativeprivatestaticthrowsvolatilebyvalue*const*extendsfutureinnernewprotectedsupertransientwhilecasecontinuefalsegenericinstanceofnullpublicswitchtrue注:有*标记的关键字是被保留但当前尚未使用的。6z数据类型–确定了该类型数据的取值范围,由所占存储单元的多少而决定–确定了允许对这些数据所进行的操作zJava语言中的数据类型分为两大类:–基本数据类型:由Java语言定义,占用内存的大小固定数据存储在栈内存中–引用数据类型由类库开发者和程序员定义,占用内存的大小不固定数据存储在堆内存中,通过栈内存中的引用类型变量访问,引用类型变量的值为数据在堆内存中的地址名称使用的关键字占用字节数字节型byte1短整型short2整型int4整数类型长整型long8单精度型float4浮点类型双精度型double8字符类型char2基本类型布尔类型boolean1bit类class接口interface数据类型引用类型数组[]8整数类型(byte,short,int,long)z整数类型用来表示整数。Java中的整数类型可分为如下四种–byte:占用1个字节,取值范围为-128~127–short:占用2个字节,取值范围为-32768~32767–int:占用4个字节,取值范围为-2147483648~2147483647–long:占用8个字节,取值范围为-9223372036854775808~9223372036854775807在long类型数值后面要加上一个字母L或l,说明其类型为long。如果数值超出了int取值范围,必须加L或l。如果数值未超出int类型的取值范围,可加可不加。9整数类型(byte,short,int,long)例如:longla=9876543234L;//必须加“L”longlb=98765432L;//可加longlc=98765432;//可不加整数类型值有三种表示形式:十进制整数:如56,-24,0八进制整数:以零开头的数是八进制整数,如017,0,0123十六进制整数:以0x开头的数是十六进制整数,如0x17,ox0,0xf,0xD。十六进制整数可以包含数字0~9、字母a~f或A~F。10浮点类型(float,double)z浮点类型用于表示有小数部分的十进制数,它有两种表示形式:–小数点形式,由数字和小数点组成,如3.9,-0.23,-23.,.23,0.23–指数形式,如2.3e3,2.3E3,都表示2.3×103;.2e-4表示0.2×10-4。z浮点类型值有两种:单精度与双精度–单精度(float):占用4个字节,在数值后加上f或F,如2.3e3F,2.4f,2.4F。有效小数位为7位,绝对值的取值范围为0和1.4E-45~3.4028235E3811–双精度(double):占用8个字节,在数值后加上d或D,如2.3e3,2.3e3d,2.3e3D。有效小数位为15位,绝对值的取值范围为0和4.9E-324~1.7976931348623157E30812字符类型(char)z字符类型用于表示Unicode字符集中的任何字符。–Unicode字符集:国际组织为各种语言中的每一个字符设定了统一并且唯一的数字编号,以满足跨语言、跨平台进行文本转换、处理的要求,每个字符占用两个字节。–Unicode字符集的前128个字符和ASCII字符集相同。z字符类型可以转换为0~65535范围内的整数类型,该数值范围内的整数类型也可以转换为字符类型。13z字符类型可以有四种表示形式:–用单引号括起的单个字符,如'a','&','中'等。–用单引号括起的转义字符,包括'\b','\t','\n','\f','\r','\','\'','\\'。–用单引号括起的八进制转义序列,形式为'\ddd'。此处ddd表示八进制数中的数字符号0~7。可以表示范围为'\000'~'\377'内的字符。如:'\101'。–用单引号括起的Unicode转义字符,形式为'\uxxxx'。此处xxxx表示十六进制数。如:'\u3a4f'14布尔类型(boolean)z布尔类型只有两个值:true(真)和false(假),用途有:–关系表达式和逻辑表达式的运算结果–流程控制语句z布尔类型的数值不能和其他类型的数值相互转换。15引用数据类型z引用数据类型包括类、接口以及数组。–由类库开发者和程序员定义,占用内存的大小不固定–数据存储在堆内存中,通过栈内存中的引用类型变量访问–引用类型变量的值为数据在堆内存中的地址z下面的代码分别声明一个java.lang.Object类的引用、java.util.List接口的引用和一个int型数组的引用。初始化为null表示引用类型的变量不引用任何对象。Objectobject=null;Listlist=null;int[]months=null;16基本数据类型与引用数据类型的区别z1.表示含义–基本数据类型:表示的是一个单一的数据,如数字、字符等–引用数据类型:表示的是一个较复杂数据结构(类,接口,数组)的实例,实例中不仅可以包含基本数据类型的变量,还可以包含对这些变量的具体操作行为,甚至是包含其他引用类型的变量z2.内存处理–基本数据类型:JVM根据变量的实际类型为其分配内存空间–引用数据类型:实例数据存放在堆内存中,引用类型变量的值为实例数据在堆内存中的地址17z3.赋值操作–基本数据类型:数值的复制;–引用数据类型:两个引用指向堆中的同一块数据z4.方法调用中的参数传递–基本数据类型:在被调用方法中无法改变实参的值–引用数据类型:在被调用方法中可改变实参的值基本数据类型与引用数据类型的区别18zJava程序占用的内存分为两部分–栈内存:在方法中定义的基本数据类型的变量和对象的引用变量在栈内存中分配。当在一段代码块中定义一个变量时,Java就在栈中为这个变量分配内存空间。当程序运行超出变量的作用域后,这一内存空间被自动释放。19–堆内存:用于存放由new关键字创建的对象和数组所占有的空间。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。在堆中为一个数组或者对象分配内存后,所分配内存的首地址值保存在数组或者对象的引用变量中。通过引用变量来访问堆中的数组或者对象。当没有引用变量指向数组或者对象在堆中的内存时,这块内存成为垃圾,在随后的一个不确定的时间被垃圾回收器释放。20引用数据类型示例z创建一个图书类Book:publicclassBook{Stringisbn;Stringname;Stringauthor;floatprice;}z声明两个Book类的实例,分别通过变量book1和book2进行引用。对book1进行具体的初始化,而将book2初始化为null,代码如下:Bookbook1=newBook();Bookbook2=null;Java虚拟机为引用类型变量book1、book2及book1所引用实例的成员变量分配的内存空间如下图所示。从图中可以看出,变量book1引用了Book类的实例,book2没有引用任何实例。下面对变量book2进行具体的初始化,将book1引用实例的地址复制给book2变量,即book2与book1引用同一个Book类的实例,代码如下:book2=book1;此时Java虚拟机的内存分配情况如下图所示。23常量z常量是指在程序的整个运行过程中其值始终保持不变的量。z在Java语言中,常量有两种形式:–一种是以字面形式直接给出值的常量;–另一种则是以关键字final定义的标识符常量。24zJava中的常量按其数据类型来分,有整数型常量、浮点型常量、布尔型常量、字符型常量和字符串常量等五种。–前四种常量对应于四大类基本数据类型。–字符串常量是用双引号括起的0个或多个字符串序列。字符串中可以包括转义字符。如:Hello,two\nline,\22\u3f07\nAB1234\n,。Java要求一个字符串在一行内写完。若需要一个大于一行的字符串,则可以使用连接操作符“+”把两个或更多的字符串常量串接在一起组成一个长串。25变量z变量是在程序的运行过程中其值可以被改变的量。z变量除了区分为不同的数据类型外,更重要的是每个变量都具有变量名和变量值两重含义。–变量名是用户自已定义的标识符,代表内存中存储一个数据的位置。变量名一旦定义便不会改变。–变量的值则是这个变量在某一时刻的取值,它是变量名所表示的存储位置中存放的数据,它是随着程序的运行而不断变化的。26zJava中的变量遵从先声明后使用的原则。声明的作用有:–确定该变量的标识符(即名称),以便系统为它指定存储位置和识别它,这便是“按名访问”原则;–为该变量指定数据类型,以便系统为它分配足够的存储单元。因此,声明变量需要给出变量的名称和指明变量的数据类型,必要时还可以指定变量的初始值。27变量z变量的声明是通过声明语句来实现的,变量的声明格式如下:[修饰符]类型名变量名1[,变量名2][,……];或[修饰符]类型名变量名1[=初值1][,变量名2[=初值2]][,……];其中方括号括起来的部分是可选的;修饰符指定变量的属性,如final,static等。用final修饰符声明的变量是标识符常量。z变量经声明以后,便可以对其赋值和使用。变量经声明之后,若在使用前没有赋值,则在编译时会指出语法错误。28z例如,下面均是一些合法的变量声明语句:charch1,ch2;//char是类型名,ch1,ch2是变量名(标识符)。inti,j,k=9;//int为类型名,i、j、k为变量名,并且k的初值为9floatx1=0,x2,y1=0,y2;//float是类型名,x1、x2、y1、y2是变量名。finaldoubler=10.0;//final是修饰符,double是类型名,r是变量名29标识符常量z在声明标识符常