第二章Java语法元素•电脑使用内存来存储计算时所使用的数据•内存如何存储数据?•内存像旅馆–数据各式各样,要先根据数据的需求(即类型)为它申请一块合适的空间1、开房间(单人间、双人间、总统套间)2、入住√内存存放数据•内存地址不好记,怎么办?–通过内存中小房间的别名找到数据存储的位置变量是存储数据的一个基本单元房间房间名字房间类型入住的客人变量变量名变量类型变量值为什么需要变量对应1000*(1+5%)内存10001050变量:一个数据存储空间的表示对于专业程序员,数据存入内存不算完:怎么找到存入的数据?存进去还能改吗?98.76不同数据存入具有不同内存地址的空间,相互独立变量在银行存1000元钱,银行一年的利息5%,那一年之后钱变成了多少?变量应用1、在内存中存储本金1000元2、显示内存中存储的数据的值publicclassHelloAccp1{publicstaticvoidmain(String[]args){intmoney=1000;//存数据}}数据类型变量名内存空间存的数值演示示例:如何存取变量System.out.println(money);//使用数据变量的声明和赋值•使用变量的步骤:–第一步:声明一个变量–第二步:赋值–第三步:使用变量数据类型变量名=数值;根据类型开辟空间将数据存入空间取出数据使用数据类型变量名;变量名=数值;intmoney=1000;intmoney;money=1000;两种方式:数据属于不同类别非洲ThequickbrownfoxTRUE数据非数值数值整型非整型9002.129999/12/20032.175123陈扬char非数值数值整型int…………double非整型StringJava常用数据类型数据类型数据类型说明char(字符型)用于存储单个字符如:性别‘男’、‘女’,电灯‘开’、‘关’int(整型)用于存储整数如:一天的时间是24小时,一月份有31天double(双精度)用于存储小数如:蒙牛早餐奶的价格1.3元,手机待机时间6.5小时String(字符串)用于存储一串字符如:“我的爱好是踢足球”,“我喜欢Java程序”数据类型说明数据类型的使用•输出Java课考试最高分:98.5•输出最高分学员姓名:张三•输出最高分学员性别:‘男’publicclassHelloAccp2{publicstaticvoidmain(String[]args){doublescore=98.5;Stringname=张三;charsex='男';System.out.println(本次考试成绩最高分:+score);//输出其他……}}单引号双引号连接输出信息1、字母2、下划线‘_’3、‘$’符号首字母任意多的:1、数字2、字母3、下划线‘_’4、‘$’符号其余部分变量名Java语言中,变量命名要符合一定规则money,score,name,sex变量命名规范:简短且能清楚地表明变量的作用,通常第一个单词的首字母小写,其后单词的首字母大写。例如:myScore变量命名规则2-1另外还必须注意:在符合以上规则的前提下还不能是Java的关键字变量命名规则2-2•检查下面这些是否是合法的变量名principalcost_pricemarks_3$lastnamecity123ratediscount%zipcodeCityint××××Java关键字abstractbooleanbreakbytecasecatchcharclassconstcontinuedodoubleelseextendsfalsefinallycastdefaultfinalfinallyfloatforfuturegenericgotoifimplementsimportinnerinstanceofintinterfacelongnativenewnulloperatorouterpackageprivateprotectedpublicRestreturnshortstaticsuperSwitchsynchronizedthisthrowthrowsTransienttruetryvarvoidVolatilewhile关键字是对编译器有特殊意义的单词,Java常用关键字如表所示:publicclassHelloAccp3{publicstaticvoidmain(String[]args){Stringtitle;System.out.println(title);}}Stringtitle;//声明变量titletitle=Java;//赋值Stringtitle=Java;//声明变量title并赋值12先声明变量并赋值,然后才能使用常见错误1代码错误正确方案变量名不能以%开始常见错误2publicclassHelloAccp4{publicstaticvoidmain(String[]args){int%hour=18;System.out.println(%hour);}}代码错误publicclassHelloAccp5{publicstaticvoidmain(String[]args){Stringname=张三;Stringname=李四;}}声明两个同名变量导致编译错误Stringname=张三;StringName=李四;Java程序区分大小写常见错误3正确方案•使用变量存储以下MP3信息,并打印输出–品牌(brand):爱国者F928–重量(weight):12.4–电池类型(type):内置锂电池–价格(price):499•定义变量有哪两种方式?常量的定义:final变量类型变量名=变量值常量是特殊的变量,一旦被赋值,值就不能再改变;例如,finalinta=5;a=19;常量×自动类型转换某班第一次Java考试平均分81.29,第二次比第一次多2分,计算第二次考试平均分?doublefirstAvg=81.29;//第一次平均分doublesecondAvg;//第二次平均分intrise=2;secondAvg=firstAvg+rise;System.out.println(第二次平均分是:+secondAvg);猜猜结果是什么?!!!•在某种条件下,系统自动完成类型转换–两种类型兼容•例如:int和double兼容–目标类型的精度大于源类型•例如:double型大于int型•对于表达式–如果一个操作数为double型,则整个表达式可提升为double型类型提升规则如果低级类型为char型,向高级类型(整型)转换时,会转换为对应ASCII码值,例如•charc='c';•inti=c;•System.out.println(output:+i);•输出:output:99;对于short,char类型而言,他们是平级的,因此不能相互自动转换,可以使用下述的强制类型转换。•shorti=99;•charc=(char)i;•System.out.println(output:+c);•输出:output:c;intage=19;charsex=‘女’;charresult=age+sex;下面语句正确吗?inta=10;intb=10.2;doublec=10;c=a;intd=c;int不可以自动转换成chardouble不可以自动转化成int常见错误intbefore=20;//apple笔记本市场份额doublerise=9.8;//增长的份额intnow=before+rise;//现在的份额intnow=before+(int)rise;去年Apple笔记本所占的市场份额是20,今年增长的市场份额是9.8,求今年所占的份额?编译出错:不能完成自动类型转换(类型名)表达式强制类型转换intb=(int)10.2;doublea=10;intc=(int)a;强制类型转换更改为演示示例:强制类型转换强制类型转换完整代码演示实现一个数字加密器,加密规则是:加密结果=(整数*10+5)/2+3.14159加密结果仍为一整数某班的A学员Java成绩是80分,B学员与A学员成绩相同,输出B学员成绩intaScore=80;intbScore;aScore=bScore;System.out.println(bScore);bScore=aScore;//将右边的值给左边的变量赋值运算符aScorebScore8080副本赋值运算符-1代码错误变量名表达式;赋值运算符-2Z=(X*2)+(5–Y)表达式表达式表达式•赋值运算符•表达式举例算术运算符-1•基本的算术运算•某学员3门课成绩如右表所示,编程实现:1、Java课和SQL课的分数之差2、3门课的平均分操作数操作数运算符课程分数STB89Java90SQL60publicclassHelloAccp7{publicstaticvoidmain(String[]args){intstb=89;//STB分数intjava=90;//Java分数intsql=60;//SQL分数intdiffen;//分数之差doubleavg;//平均分//省略输出成绩单代码……diffen=java-sql;//计算java课和sql课的成绩差System.out.println(Java和SQL的成绩差:+diffen);avg=(stb+java+sql)/3;//计算平均分System.out.println(3门课的平均分是:+avg);}}声明变量算术运算符-2intnum1=5;intnum2=2;inta=num1%num2;intb=num1/num2;System.out.println(num1+%+num2+=+a);System.out.println(num1+/+num2+=+b);num1++;num2--;System.out.println(num1=+num1);System.out.println(num2=+num2);5%2=15/2=2下面代码片断的输出结果是什么?输出%:求余数/:求商等价于:num1=num1+1;等价于:num2=num2-1;num1=6num2=1输出算术运算符-31、根据天数(46)计算周数和剩余的天数2、已知圆的半径radius=1.5,求其面积关系运算符–关系运算符用来比较两个值,包括大于()、大于等于(=)、小于()、小于等于(=)、等于(==)、不等于(!=)6种。关系运算符都是二元运算符,运算的结果是一个逻辑值–Java允许“==”和“!=”两种运算用于任何基本数据类型•可以判定两个基本数据类型的变量的值是否相等示例•publicclassTest{•publicstaticvoidmain(String[]args){•booleanb;•intx=1,y=5;•b=xy;•System.out.println(b的值是:+b);•b=(x=y);•System.out.println(b的值是:+b);•b=x==y;•System.out.println(b的值是:+b);•b=x!=y;•System.out.println(b的值是:+b);•}•}逻辑运算符•逻辑运算符包括逻辑与(&&)、逻辑或(||)和逻辑非(!)。前两个是二元运算符,后一个是一元运算符–Java对逻辑与和逻辑或提供短路操作功能。进行运算时,先计算运算符左侧表达式的值,如果使用该值能得到整个表达式的值,则跳过运算符右侧表达式的计算,否则计算运算符右侧表达式,并得到整个表达式的值示例•publicclassLogic{publicststicvoidmain(String[]args){inta=1;intb=1;if(ab&&ba/0){System.out.println(Oh,That'sImpossible!!!);}else{System.out.println(That'sinmycontrol.);}}}条件运算符•条件运算符(?