1第二章Java结构化程序设计标识符、关键字数据类型、常量和变量运算符控制结构编程规范2标识符(Identifier)标识符:是对变量、类、方法、标号和其它各种用户自定义对象的命名。标识符规则是一个由字符、数字、下划线(_)和美元符号($)构成的字符串。必须以字符、下划线(_)或美元符号($)开头,不能用数字开头。不能是保留字。不能是true、false和null(这三个不是保留字)。可以有任意的长度。正确的标识符google、h1n1、_start_time、$china、University不正确的标识符360safe、public、true、bill@gmail.com汉字也可以作为标识符(但书写不便,不推荐):int年龄=20;3Java对标识符的规范规范标识符的重要性:没有规范的命名不是一个科班出身的软件开发者应有的行为Java标识符规范:类名称:Mammal函数名:getAge常量:MAX_HEIGHT标识符起名应该尽量做到“望名知义”。4关键字(reservedword、keyword)对编译器具有特殊意义,在程序中不能用作其他目的的字,如:class、public、static、void等。Java关键字列表(共50个):abstractcontinuefornewswitchassertdefaultgotopackagesynchronizedbooleandoifprivatethisbreakdoubleimplementsprotectedthrowbyteelseimportpublicthrowscaseenuminstanceofreturntransientcatchextendsintshorttrycharfinalinterfacestaticvoidclassfinallylongstrictfpvolatileconstfloatnativesuperwhile5第二章Java结构化程序设计标识符、关键字数据类型、常量和变量运算符控制结构编程规范6数据类型(datatypes)基本数据类型(primitivetype)布尔型——boolean字符型——char整型——byte、short、int、long浮点型——float、double引用数据类型(referencetype)数组——array类——class接口——inteface枚举——enum7常量(constant)在程序运行过程中,不许改变的变量,称为常量利用关键字final声明常量,对于全局的常量(即在整个项目中都可用),通常按以下模式声明:publicstaticfinalintMAX_VALUE=512;如果某常量只在本类使用,则应将其定义为private的。常量名字通常采用大写字母,可以使用下划线注:在C/C++语言中,使用const来定义常量。Java中const也是保留字,但是没有用。publicfinaldoublePI=3.14159;publicfinaldoubleCM_PER_INCH=2.54;publicfinalintNOTEBOOK_WEIGHT;......NOTEBOOK_WEIGHT=2000;//第一次赋值NOTEBOOK_WEIGHT=3000;//第二次赋值,错误!CM_PER_INCH=3.00;//第二次赋值,错误!8常量的数据类型Java常量包括基本数据类型常量、字符串(String)常量和null布尔(boolean)常量:true,falsechar常量:‘c’,‘\u0061’,‘\u0051’,‘\u005a’int常量:(10)10=(0xA)16=(012)8,34long常量:34Ldouble常量:1.5,45.6,76.4E8,-32.0float常量:1.5F,45.6f,76.4E8F,-32.0FString常量:”HelloWorld!”引用数据类型常量:null独立于平台Java中,整型的范围与运行机器无关,解决了移植时的问题在C/C++中,int表示与目标机器相关的整数类型9类型范围存储空间大小byte-27(-128)~27-1(127)8-bitsignedshort-215(-32768)~215-1(32767)16-bitsignedint-231(-2147483648)~231-1(2147483647)32-bitsignedlong-263(-9223372036854775808)~263-1(9223372036854775807)64-bitsignedfloat负数范围:-3.40282347×1038~-1.4×10-45正数范围:1.4×10-45~3.40282347×103832-bitIEEE754double负数范围:-1.7976931348623157×10308~-4.9×10-324正数范围:4.9×10-324~1.7976931348623157×1030864-bitIEEE754整型浮点型byte:-128:1000,0000负数,补码方式:128=1000,0000==(按位取反)==0111,1111==(加1)==1000,0000-1:1111,1111负数,补码方式:1=0000,0001==(按位取反)==1111,1110==(加1)==1111,1111127:0111,1111常量的数据类型10常量的数据类型Java1.7的新特性为了方便阅读大的整数,Java7中现在允许使用下划线分隔多个数位:intnumber1=1_000_000;intnumber2=1000000;System.out.println(number1==number2);//true//使用当前区域语言特性格式化数字NumberFormatformat=NumberFormat.getInstance();System.out.println(format.format(number1));//1,000,00011变量(Variable)变量表示Java程序中的基本存储单元,总是具有某种数据类型:基本数据类型引用数据类型变量总是具有与其数据类型相对应的值每个变量均具有:名字、类型、一定大小的存储单元以及值变量就是内存单元的名字,即对应内存的位置数据类型决定了它所占用的内存单元数量值表示变量所占用的内存单元中所保存的数据HelloJavastr变量名内存单元内存单元中存放的内容Stringstr=“HelloJava”;12变量变量的读写当新值被赋给变量时,老值将被取代,仅从内存中读数据不会破坏数据变量的使用变量在使用前应保证它有确切的值。同名变量的屏蔽原则。在实际开发中,一般使用变量来存储用户在程序运行时输入的数据。举例:在Java应用程序中如何读入数据。13Java应用程序读入数据在运行时读取用户输入方法一:使用JOptionPane类的showInputDialog方法。StringfirstNumber=JOptionPane.showInputDialog(“Enter:);14Java应用程序读入数据方法二:使用Scanner类(JDK1.5以上)Scanner类有nextInt,nextDouble等方法。实例:InputTest.javaImportsjava.util.*;Scannerin=newScanner(System.in);System.out.print(“Whatisyourname?”);Stringname=in.nextLine();15浮点数据的精度浮点数的精度?包含浮点数的计算是近似的,因为这些数没有以完全的准确度存储。例如:System.out.println(1.0-0.1-0.1-0.1-0.1-0.1);显示的是0.5000000000000001而不是0.5System.out.println(1.0-0.9);显示的是0.09999999999999998而不是0.1整数可以精确地存储。因此,整数计算得到的是精确的运算结果注意:浮点数的比较问题Demo:Test.javadoublen1=0.1;doublen2=1.0-0.9;if(n1==n2){System.out.println(equal!);}else{System.out.println(notequal!);}doublen1=0.1;doublen2=1.0-0.9;if(Math.abs(n1-n2)0.00000001){System.out.println(equal!);}else{System.out.println(notequal!);}16浮点数据的精度Demo:TestDouble.java17浮点数据的精度处理精度损失(*)解决方法——使用BigDecimal类Demo:TestBigDecimal.java注意:在构建BigDecimal对象时应使用字符串而不是double数值,否则,仍有可能引发计算精度问题。18字符类型字符类型使用单引号括起来注意,双引号括起来的是字符串。'A'和A是不同的char类型用来表示在Unicode编码表中的字符增量和减量运算也可以用于char型变量,得到后一个或前一个Unicode字符,如:charletter='A';//ASCIIcharnumber='4';//ASCIIcharunicodeLetter='\u0041';//UnicodecharunicodeNumber='\u0034';//UnicodecharcnChar1='中';charcnChar2='国';charletter='A';//ASCIISystem.out.println(++letter);19字符类型Unicode由UnicodeConsortium建立的一种16位编码方案,支持世界不同语言的文本交换、处理和显示。一个Unicode码占两个字节,书写上用以\u开头的4位十六进制数表示,范围从‘\u0000’到‘\uFFFF’,共65536个目前大约使用了35000个例子:publicclassUnicodeDisplay{/**Mainmethod*/publicstaticvoidmain(String[]args){//显示:欢迎αβγSystem.out.println(\u6B22\u8FCE\u03b1\u03b2\u03b3);}}Demo:UnicodeDisplay20字符类型特殊字符的转义序列运算符含义Unicode值\b退格\u0008\tTab\u0009\n换行\u000A\r回车\u000D\\反斜杠\u005C\'单引号\u0027\双引号\u0022charletter1='\'';//单引号charletter2='\';//双引号charletter3='\\';//反斜杠21boolean类型boolean类型基本数据类型(同int、double一样)只有两个取值:true(真)、false(假)整型数据和boolean型不能相互转换C/C++中是可以相互转换的。在C/C++中,数字、指针都可以充当boolean值。但是这种灵活性带来了潜在的灾难,无数程序的bug也出现在这里。22字符串类型(String)char类型只表示一个字符,要表示一个字符构成的串,就应使用字符串(String),如:Stringmessage=Hello,world;注意String的S要大写字符串由双引号括起来String是Java的一个预定义类,String不是基本类型,称为引用类型。任何Java类都可以作为变量的引用类型目前,只需要知道如何声明一个String