《JAVA语言概述》PPT课件.ppt_第1页
《JAVA语言概述》PPT课件.ppt_第2页
《JAVA语言概述》PPT课件.ppt_第3页
《JAVA语言概述》PPT课件.ppt_第4页
《JAVA语言概述》PPT课件.ppt_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章Java语言概述二,复习,安装、编辑、编译、解释执行JAVA应用程序JAVA小应用程序,第一个Application中常见错误,publicclassAvoidf()System.out.println(IamA);classHello1publicstaticvoidmain(Stringargs)System.out.println(你好,很高兴学习Java);Aa=newA();a.f();,-javac-Hello1.java:1:类A是公共的,应在名为A.java的文件中声明publicclassA1错误输出完成(耗时0秒)-正常终止,复习,安装、编辑、编译、解释执行JAVA应用程序JAVA小应用程序,编辑:HelloApplet.java(JavaApplet程序),/第一个Applet程序.importjava.applet.*;importjava.awt.*;publicclassHelloAppletextendsAppletpublicvoidpaint(java.awt.Graphicsg)g.drawString(s,25,25);/显示方法,每次需要重画时该方法被调用,编辑:JavaApplet程序(applet.html),HelloWorld,编译和运行:Java程序,Compiler编译应用程序:javac.exejavacHelloApplet.javaExecute执行应用程序:appletviewer.exeappletviewerapplet.html,注意Applet小应用程序运行不是使用JAVA命令执行,必须使用appletviewer命令且必须对应HTML文件。,2.1Java语言开发环境的安装与配置2.2使用JDK开发Java程序2.3屏幕输出与键盘输入2.4Java程序基本结构2.5Java基本数据类型2.6Java语言的构成标识符、关键字与字面值(直接量)、变量、常量2.7输入和输出2.8运算符和表达式,9,2.5JAVA基本数据类型(DataType),Javatypesystem,primitive,reference,char,numeric,boolean,class,interface,array,integral,floating-point,byte,short,int,long,float,double,字面值直接量,10,DataType,Java是一种强类型的语言每个变量每个表达式都有一个类型,每个类型被严格定义所有赋值都要进行类型兼容性检验UniqueData(forportableandcross-platform)所有基本类型所占的位数都是严格定义和确定的,并不因操作系统的不同而不同,这样才能确保其大小在所有平台上是相同的.,八种基本数据类型,整数类型:byte,short,int,long浮点类型:float,double字符类型:char逻辑类型:boolean,1.整数类型与字面值,(1)整数类型的字面值(书写格式)inta=100;/100为十进制形式字面值a=077;/077为八进制形式字面值longb=100000L;/100000L为long类型字面值bytec=0 x55;/0 x55为十六进制形式字面值,(2)整型字面值的默认类型整型字面值的默认类型(即缺省类型)是int型。inta=77;intb=0 x77;intc=077;longd=100000000000;,/出错,应改为100000000000L出错原因是100000000000不能表示合法的int型数据(超过了231-1),所以需要写成100000000000L。,2.浮点类型与字面值,(1)浮点类型的字面值(书写格式)doublea=100.123;floatb=123.1F;浮点型字面值的常用书写格式包括:小数形式。比如,10.0、12345.123。浮点型后缀。对于float类型的字面值,一般在上述形式的后面添加f或F,而double类型也可在数字之后加D或d(一般省略D或d)。比如,123.1F、1.23E3F、2e3f都是float类型的字面值,而100.123D经常省略为100.123。,(1)浮点类型的字面值(书写格式)a=1.23E5;/1.23乘以10的5次方b=1.23E3F;/1.23乘以10的3次方且是float类型a=2e10;/2乘以10的10次方b=2e3f;浮点型字面值的常用书写格式包括:指数形式。包括小数部分与指数部分,中间用字母E或e分隔。,(2)默认浮点型浮点型数值默认为double型。double类型字面值一般是省略D或d;而float类型字面值之后必须加f或F,否则会导致编译出错。doublea=1.23;/可以将1.23D省略为1.23floatb=1.23;/出错,必须将1.23写成1.23F或1.23fb=1.23e3;/出错,必须将1.23e3写成1.23e3F或1.23e3f由于1.23、1.23e3都是默认为double类型,所以会导致出错,而必须在1.23、1.23e3之后添加浮点型后缀F或f。,3.字符类型,字符char类型占用2个字节(16比特),本质上是个非负整数,其取值范围为065535(即0216-1)。(1)字符类型的字面值格式(即字符数值的书写格式)chara=A;charb=啊;charc=u554A;/表示中文字符啊chard=u0061;/表示字符a(2)用整数对字符类型变量赋值char类型本质上是双字节无符号整数,可用数字对其初始化或赋值。chare=97;/e将表示字符acharf=0 x554A;/f将表示中文字符啊,表2.3常用的转义字符,4.逻辑类型(布尔类型boolean,boolean仅有两种取值:true或false。因此仅有true与false两个字面值,分别代表逻辑值的“真”与“假”。下面几行代码是布尔类型变量定义的示例:booleanb;b=true;booleanc=false;下面的代码是错误的:booleanb;b=1;/错误,不能用整数赋值注意:上述错误是熟悉C语言的程序员容易发生的错误。,22,布尔型数据只有两个值true和false它们不对应于任何整数值false为缺省值不能对boolean类型进行类型转换示例:booleanb1,b2=true;intint1,int2;while(int1=int2)while(b1=b2)/,JAVA中仅限boolean型能编译通过,C+中,若int2是一个非零值,那么这种赋值的结果肯定是true。JAVA中编译出错,2.6Java语言的构成,2.6.1标识符(Identifier)2.6.2关键字2.6.3变量2.6.4常量2.6.5注释,问题1:,(1)需要“class”?(2)需要标识符?错误到底在哪里?,2.6.1标识符,标识符(Identifier)就是编程时用的名字,用以标识程序中出现的类名、方法名、变量名、类型名等。,publicclassHellopublicstaticvoidMain(stringargs)System.out.Println(你好,很高兴学习Java);,标识符,1.标识符命名规定标识符可由字母、下划线、美元符号以及数字等字符组成,而且必须保证首字符不能是数字;,PublicClasshellopublicstaticvoidMain(stringargs)int_2ab,$2ab,2ab;_2ab、$2ab是合法的标识符,2ab则是一个非法的标识符。,标识符,1.标识符命名规定标识符区分大小写。,publicclassM_mpublicstaticvoidMain(Stringargs)System.out.println(“大小写要注意”)Main与main是两个不同的标识符。,publicclass大小写publicstaticvoidmain(Stringargs)System.out.println(“大小写要注意”);,中文可以作为标识符。,2.标识符使用Unicode字符集,Unicode字符集的前128个字符与ASCII码编码完全一致,因此Unicode是ASCII的扩展。,在Unicode字符集中,不仅包含了ASCII字符,而且还包含了中文、日语、韩语、阿拉伯等多国文字的字符。因此,这些非英文字符也可以出现在标识符中。比如,“您好”、“你好”、“说Hello”等都是合法的标识符,可以作为类名或变量名。,Java语言内部采用Unicode字符集,因此Unicode字符集中的大部分字符可以用来书写标识符。Unicode字符集不同于ASCII字符集。前者目前主要采用双字节(16比特)编码方式,可以最多表示216个(即65536个)字符,而严格的ASCII码采用7比特编码方式,最多可表示27个(即128个)字符,命名风格统一规范可以增加程序的可读性,降低维护成本。Java语言推荐的标识符命名习惯如下:类名:尽量用名词对类进行命名;类名中每个单词的首字母要大写,并且尽量不使用缩写形式classCarclassStudentclassGraduateStudent方法名:尽量采用动词进行命名;方法名首字一般小写,以区别于类名或接口名;如果方法名由多个单词组成,那么第二个单词开始每个单词的首字母大写。比如:voidrun();voidconnect();booleanisConnected();,3.标识符的命名习惯,2.6.2关键字,关键字一般具有特殊用途,而不能作为程序的标识符,publicclassKeyWordpublicstaticvoidmain(Stringargs)intclass=100;System.out.println(class=+class);,关键字,1.关键字(keyword)关键字一般具有特殊用途,而不能作为程序的标识符。如下所示:,35,关键字简单分类,数据和返回值类型:int,void,return包/类/成员/接口:package,class,interface访问控制:public,private,protected循环及循环控制:if,switch,break例外处理:throw,try,finally保留词(无含义但不能使用):goto,const,所有的关键字都是小写const和goto是java的保留字。虽然指定goto作为关键字,但不支持它的使用,使程序简洁易读。,publicClassKeyWordpublicstaticvoidMain(Stringargs)intgoto=100;System.out.println(goto=+goto);,类似于方法名的命名;变量名应该简短而有含义;尽量避免使用单个字符的变量,除非是作为临时用途的变量(字母i,j,k,m,n常作为整型临时变量名,而c、d、k常作为char类型的临时变量名)。比如:doublespeed;StringstudentName;inti;,2.6.3变量:,变量,1变量声明与初始化intvar1;inta,b,c,d;doublee,f,g;inta=100;/声明变量a,并初始化为100doubleb=10.1;/声明变量b,并初始化为10.1intc,d=111,e;/对d进行初始化,c与e没有赋初始值,2局部变量及其初始化,例:局部变量的初始化问题publicclassLocalVariableInitExamplepublicstaticvoidmain(Stringargs)inta;/局部变量a不自动初始化System.out.print(a);/以上代码出错,a没有进行初始化或者赋值,局部变量是在某个方法体(或某个代码块)中声明的变量。系统不会自动对局部变量进行默认初始化,因此必须显示初始化或赋值。,3变量名的命名最好能够做到“见名知义”。比如,计数变量可以命名为count。变量名首字母最好小写,如果变量名需要多个单词表达,那么第二个单词起每个单词的首字母大写。比如studentCount。一个合法的变量名需要符合以下条件:满足标识符的命名要求;不能是关键字,也不能是true,false,null等具有特殊含义的字面值;在同一个作用域内不能重名。,final变量类似于其它语言的常量。常用的final变量声明方式是:final数据类型变量名=初始值;final变量的特点:声明并初始化后就不能修改。finalintmax=100;finalintmin=1;max=10;/错误,final变量初始化之后不可再赋值如果final变量在声明时没有直接初始化,那么可以在后续代码中对它初始化一次(即赋值1次),但不能多次赋值。finalintmax;/max在声明时没有直接初始化,max=100;/正确,第1次赋值可以初始化maxmax=200;/错误,final变量初始化之后不可再赋值,publicclassKw_finalpublicstaticvoidmain(Stringargs)finalintvar=100;var+;System.out.println(var=+var);,2.6.4常量:,final关键字这些常量标识符的所有字母大写;如果是多个单词,那么用下划线连接这些单词,以增加可读性。比如:finalintMAX_LENGTH=1000;finaldoubleMIN_VALUE=10;,publicclassKw_finalpublicstaticvoidmain(Stringargs)finalintvar=100;var+;System.out.println(var=+var);,常量:,final关键字,final修饰类final类不能被继承final方法final方法不能被子类覆盖final变量final变量就是常量,注释是为源程序增加必要的解释说明的内容,其目的是提高程序的可读性,书写注释是编写程序的良好习惯。Java中有三种形式的注释:/*注释部分*/*注释部分*/注释部分,2.6.5【注释】,注释的使用,packagesample;importrobocode.*;/*MyFirstRobot-asamplerobotbyMathewNelson*Movesinaseesawmotion,andspinsthegunaroundateachend*/publicclassMyFirstRobotextendsRobot/*MyFirstRobotsrunmethod-Seesaw*/publicvoidrun()while(true)ahead(100);/Moveahead100turnGunRight(360);/Spingunaroundback(100);/Moveback100turnGunRight(360);/Spingunaround,2.6.6基本数据类型之间的转换,1.自动类型转换目标类型的取值范围总是比被转换的类型取值范围大,也称为基本类型自动转换(wideningprimitiveconversion)。,1.自动类型转换2强制类型转换,自动转换的例子代码:bytea=12;shortb=a;/将byte类型自动转换为short类型charc=啊;intd=c;/将char类型自动转换为int类型longe=d;/将int类型自动转换为long类型floatf=e;/将long类型自动转换为float类型doubleg=f;/将float类型自动转换为double类型,自动转换可能发生的精度损失问题inti=123456789;floatj=i;System.out.println(j);/输出1.23456792E8,损失了精度。,问题accuracy_1:精度损失问题,publicclassaccuracy_1publicstaticvoidmain(Stringargs)inti=123456789;floatj=i;System.out.println(j);,问题accuracy_2:自动类型转换失败,publicclassAccuracy_2publicstaticvoidmain(Stringargs)shortk=2;charch=H+k;System.out.println(H+k=+ch);,取值范围不同,不可自动转换。,自动转换原则,取值范围不同,不可自动转换。char_byte;char_shortchar(0216-1(65535)byte(-2727-1)/(-128127)char(0216-1(65535)short(-215215-1)/(-3276832767)所以可自动转换的前提是,从小到大:shortint,byteshort,charint,2强制类型转换如果待转换数据类型的取值范围没有包含于目标类型的取值范围,那么需要强制类型转换,也称为基本类型窄化转换(narrowingprimitiveconversion)longa=10L;intb;b=(int)a;/(int)a将a的值由long类型强制转换为int类型。charc=(char)a;/(char)a将a的值强制转换为char类型。byted=(byte)a;/(byte)a将a的值强制转换为byte类型。doublee=123.45;intf=(int)e;/(int)e将e的值强制转换为int类型。,强制类型转换问题:数据截断与符号丢失。,强制转换带来的问题importjava.util.*;publicclassTypeCastExamplepublicstaticvoidmain(Stringargs)inta=(int)123.45;/将小数转换为int类型,会丢失小数部分,System.out.println(a);/转换后a的值为123,shortb=(short)0 x12345678;/丢失高位的两个字节(含符号位)System.out.println(b);/b的值为0 x5678,十进制输出是22136bytec=(byte)255;/丢失高位的三个字节(包括符号位)System.out.println(c);/c的值为0 xff,十进制输出是-1byted=(byte)128;/丢失高位的三个字节(包括符号位)System.out.println(d);/d的值为0 x80,十进制输出是-128,3.隐含强制转换bytea=12;/将int型的12隐含转换为byte型shortb=12345;/将int型12345隐含转换为short型charc=97;/将int型的97隐含转换为char型JAVA中做了优化,只要int类型常量值属于byte,char,short的取值范围内,JAVA编译器自动进行隐含强制转换。以下代码会出错:bytea;intb=12;a=b;/出错,需要更正为a=(byte)b;,2.8运算符、表达式,本章导读1.算术运算符和算术表达式2.赋值运算符与赋值表达式3.关系运算符与关系表达式4.逻辑运算符与逻辑表达式5.位运算符6.其他:条件运算符、instanceof运算符.,1、算术运算符和算术表达式,(1)加减运算符加减运算的结合性是从左到右。加减运算的操作元是整型或浮点型数据,加减运算符的优先级是4级。(2)乘、除和求余运算符乘、除和求余运算的运算符号为*、/、%,都是双目运算符。*、/、%运算符的结合性是从左到右,例如:2*3/8,先计算2*3,然后再将得到的结果除以8。乘、除和求余运算的操作元是整型或浮点型数据。*、/、%运算符的优先级是3级。,区别:模运算符%,模运算符%,其运算结果是整数除法的余数。它能像整数类型一样被用于浮点类型(这不同于C/C+,在C/C+中模运算符%仅仅能用于整数类型)。下面的示例程序说明了模运算符%的用法:classModuluspublicstaticvoidmain(Stringargs)intx=42;doubley=42.25;System.out.println(xmod10=+x%10);System.out.println(ymod10=+y%10);,输出如下:xmod10=2ymod10=2.25,(3)自增、自减运算符自增、自减运算的运算符号为:+、-,都是单目运算符,运算符的优先级是2级。运算符可以放在操作元之前,也可以放在操作元之后,但操作元必须是一个整型或浮点型变量(不能是常量或表达式,建议不要在其他表达试中使用+自找麻烦JAVA核心技术卷I:原理(原书第5版)。,:算术混合运算的精度,(4)算术表达式用算术符号和操作元连接起来的符合Java语法规则的式子,称为算术表达式。如x+2*y-30+3*(y+5)-12+n+(-n)。(5)算术混合运算的精度精度从“低”到“高”排列的顺序是:byteshortintlongfloatdoubleJava将按运算符两边的操作元的最高精度保留结果的精度,例如:5/2的结果是2,要想得到2.5,必须写成5.0/2或5.0f/2。,59,算术混合运算的精度,char,int,short,byte,float,long,double,char型数据和整型数据运算结果的精度是int。,publicclassAccuracypublicstaticvoidmain(Stringargs)bytek=18;charch=(H+k);System.out.println(H+18=+ch);,2、赋值运算符与赋值表达式,1、赋值运算符:=。赋值运算符是双目运算符,左面的操作元必须是变量,不能是常量或表达式。2、普通赋值x=y;x=(y=10);/(y=10)表达式的值是10,3运算赋值Xop=Y相当于X=(X的类型)(XopY)不用强制转换,比如charc=a;c=c+1;/会出错?(答:会,需要强制转换)c+=1;/会出错吗?(答:正确,因为c+=1相当于c=(char)(c+1);),2、赋值运算符与赋值表达式,3、关系运算符与关系表达式,关系运算表达式的返回结果类型只能取值为true或false,不同于C语言,C语言关系运算结果一般用1表示真,用0表示假。例关系运算示例,例关系运算示例,/例关系运算示例publicclassRelationalOperatorExamplepublicstaticvoidmain(Stringargs)booleanb=108;/关系运算108的返回值为?/答:true,所以b将被赋值为trueSystem.out.println(b);/输出?/答:truebooleanc=108;/关系运算108的返回值为false,所以b将被赋值为falseSystem.out.println(c);/输出false,逻辑运算的操作数是boolean类型逻辑运算符“if(false/是否执行?/答:输出z的值,即输出2,5、位运算符5.1、按位逻辑,1.整数类型的位运算按位与:如果操作数op1和op2的第i位同时为1,那么op1charsecret=z;for(inti=0;ia.length;i+)ai=(char)(aisecret);System.out.printf(密文:n);for(inti=0;ia.length;i+)System.out.printf(%3c,ai);for(inti=0;i65实际上等同于100L1如果n为int、byte、short、char等类型,那么移动位数是=op2%32,即移动位数是s对32求余。比如,10033实际上等同于1001,2移位运算的含义假设表2.5中的各种移位运算实际移动的位数是s,即s不需要再求余了。那么,对于左移运算,ns相当于n/2s,即有符号右移s位,相当于整除2s;但是需要注意,若n为负数,那么ns的值的最大值是-1,即ns的值不可能出现零。比如,102相当于10/22,即有符号右移2位,相当于整除22。但是-27不为零,而是-1。,(1)左移位运算符假设a是一个被移位的整型数据,n是位移量。an运算的结果是通过将a的所有位都左移n位,每左移一个位,左边的高阶位上的0或1被移出丢弃,并用0填充右边的低位。,注意点,利用每次左移都可以使原来的操作数翻倍的特点,写程序时可以用此来进行快速的2的乘法但如果将1移进高阶位(31或63位),那么该值将变为负值。下面的程序说明了这一点:,classMultByTwopublicstaticvoidmain(Stringargs)inti;intnum=0 xFFFFFFE;for(i=0;i4;i+)num=numn运算的结果是通过将a的所有位都右移n位,每右移一个位,右边的低阶位被移出丢弃,并用0或1填充左边的高位,a是正数用0填充,负数时用1填充。如果n是正数,ns相当于n/2s,即有符号右移s位,相当于整除2s;但是需要注意,若n为负数,那么ns的值的最大值是-1,即ns的值不可能出现零。,-5/2=?答:-2,bytea=10;a=a1;/编译会出错吗?/答:会出错,需要强制转换对于byte或short型数据,an的运算结果是int型精度。Xop=Y相当于X=(X的类型)(XopY)不用强制转换,比如:a=1;/会出错吗?/答:正确,因为a=1相当于a=(byte)(a1);了,例,importjava.util.*;publicclassExamplepublicstaticvoidmain(Stringargs)Scannerreader=newScanner(System.in);System.out.println(输入待移位的int型整数:);intx=reader.nextInt();System.out.println(输入移位量:);intn=reader.nextInt();System.out.println(左移位的结果:+(xn);,6、其它常用的运算符,1.“?”条件运算:op1?op2:op32.new运算符newint10;/创建长度为10的int类型数组newString(“Hello”);/创建一个内容为Hello的字符串对象3.“.”运算符:主要用于访问对象或类的成员方法与成员变量4.“”运算符:用于数组操作5.instanceof运算符:判断对象是什么类型,7.运算符优先级与结合性,表2-12JAVA语言中运算符的优先级与结合性,8.Math类,在类的章节中统一介绍,2.9语句,2.9.1语句简述2.9.2分支语句2.9.3循环语句2.9.4控制转移语句,2.9.1语句简述,复合语句代码块(Block)代码块类似于复合语句。代码块通过一对花括号“”将若干语句组合使用(包括局部变量声明语句、局部类声明语句)。表达式语句表达式语句以分号“;”结束,即在各种表达式后面加上分号,构成一个表达式语句,包括赋值语句、方法调用语句、对象创建语句、变量声明语句等。控制相关语句控制程序流程的语句,包括分支语句、循环语句、控制转移语句等。异常处理语句异常处理语句包括try-catch-finally语句(用于程序的异常处理),以及throw语句(用于抛出异常对象)。包语句与导入语句用于说明某个类或接口属于哪个包,或从哪个包导入。,2.9.2分支语句,1.if语句例if语句运算示例2.switch-case分支语句例switch-case语句示例switch表达式值的类型一般是char、byte、short、int等整数类型,也可以是Character、Byte、Short、Integer等类型。如果某个case省略break,那么会继续下一个case判断。如果default省略,那么可能不会有任何一个case被执行(如果所有case值都不匹配)。,例if语句运算示例,程序解析输入百分制成绩,屏幕输出A(=90),B(=80),C(=70

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论