资源预览内容
第1页 / 共57页
第2页 / 共57页
第3页 / 共57页
第4页 / 共57页
第5页 / 共57页
第6页 / 共57页
第7页 / 共57页
第8页 / 共57页
第9页 / 共57页
第10页 / 共57页
亲,该文档总共57页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第第2章章Java基本的程序设计结构基本的程序设计结构 n标识符和关键字标识符和关键字 nJava的基本数据类型的基本数据类型 n运算符、表达式和语句运算符、表达式和语句 n语句语句 n输入输出输入输出 n数组数组 2.1 标识符和关键字标识符和关键字 n在Java中的标识符和关键字统称为保留字。 2.1.1 标识符 n标识符是赋予常量、变量、方法、类或者接口的名称,可以由用户自行定义,无长度限制,但要符合以下规则:q1、标识符可以由一个或多个字符组成q2、标识符必须以字母、下划线_或$为开头,后面可以包含数字、字母但不包含空格。q3、标识符中大小写字母有区别,但长度没有限制q4、关键字不能做为标识符使用q5、用以命名类、方法和变量、以及包遵守JAVA的命名规范,类名称的每个单词都以大写字母开头。方法和变量第一个字母不大写,其他照旧。 2.1.2 关键字 nJava中的关键字,它是Java特意保留的,具有特殊的意义和用途,不可以任意使用或更改,当我们在编写程序时要注意不要使用它作为变量或方法名称,以免造成程序编译的错误。nJava的关键字有:qAbstract、default、if、package、this、Boolean、do、implements、private、throw、Break、double、import、protected、throws、Byte、else、instanceof、public、transient、Case、false、interface、short、try、Catch、final、long、static、void、Char、finally、native、super、volatile、 Class、float、new、switch、while、Continue、for、null、synchronized。ngoto和const在Java中虽然不再使用,但是还作为关键字存在。 2.2 Java的基本数据类型 nJava严格规定每个数据类型的大小,而且不允许任意更换变量的数据类型。也就是说如果A变量我们声明为整数类型后,就不能再将A变量改为其它类型,而且所占的空间就是32位,无法更改。表2-1 Java的基本数据类型 类型内容默认值内存空间取值范围booleantrue/falsefalse16位true或falsecharUnicodeu000016位u0000-uFFFFbyte整数08位-128+127short整数016位-32768+32767int整数032位-2147483648+2147483647long整数064位-9223372036854775808+9223372036854775807float浮点0.032位3.40282347E+381.40239846E-45double浮点0.064位1.79769313486231570E+3084.94065645841246544E-3242.2.1 布尔型 n布尔型,也就是我们所说的真或假,使用关键字boolean来定义逻辑变量,值为常量:true、false。 n【例2-1】一个布尔型应用的示例。q定义了一个布尔类型变量y,起初给它赋值false,然后又赋值为true,在if条件判断中,因为y是true,条件满足,执行语句所以执行System.out.println(y is true);,最后是一个表达式109,结果为真,所以显示true。 npublic class BoolTest npublic static void main(String args) nboolean y;ny = false;nSystem.out.println(y is + y);ny = true;nif (y) nSystem.out.println(y is true);nnSystem.out.println(109? + (10 9);nn 2.2.2 字符型 n字符型在C语言中占8位,而Java中由于使用的是unicode,所以占16位。n【例2-2】举个例子说明一下字符型数据的使用。qpublic class CharDemo qpublic static void main(String args) qchar ch1, ch2;qch1 = 65;qch2 = B;qSystem.out.print(ch1 and ch2);qSystem.out.println(ch1 + + ch2);qqn大写的A在ASCII字符集中的值为65,因为ASCII中的字符集占了Unicode中的前127个字符,所以ASCII中的技巧这里面一样用。从上面可以看出,给字符型变量ch1赋值65和A作用是一样的。程序2-2运行结果如下所示。 图2-2 字符型数据应用示例运行结果 2.2.3 整数型 nJava定义了四种整数型,即字节型(byte),短整型(short),整型(int),长整型(long)。在Java语言中没有无符号这个关键字(unsigned),这个有区别于C语言,也就是说所有的数都为有符号数。 2.2.4 浮点型 n浮点型,也就是所说的实数,其中单精度数float占4个字节,双精度数占8个字节,当需要保持多次反复迭代的计算的精确性时或操作值很大时,是最好的选择了。n【例2-4】下面例子是一个双精度数计算圆面积的例子。q/计算圆的面积qpublic class Area qpublic static void main(String args) qdouble pi, r, a;qr = 0.3; /半径qpi = 3.1416;qa = pi * r * r; /面积qSystem.out.println(面积为: + a);qq 2.2.5 基本数据类型的转换 n在Java中类型由低到高的顺序为:byte、short、char、int、long、float、double。n1、自动转换:当由低到高时可以自动转换,比如:qbyte b;int i=b;long l=b;float f=b;double d=b;q那么这些都可以自动转换,是合法的,但byte、short、char是平级的不能自动转换,必须使用强制转换。n2、强制转换:由高级到低级时,必须使用强制转换。qint i=99;byte b=(byte) i;char c=(char) i;n【例2-5】下面例子说明这两种转换。qpublic class ChangeTest qpublic static void main(String args) qbyte b = 15;qint i = b;qlong l = b;qfloat f = b;qdouble d = b;qSystem.out.println(b);qSystem.out.println(i);qSystem.out.println(l);qSystem.out.println(f);qSystem.out.println(d);qint s = 99;qbyte n = (byte) s;qSystem.out.println(s);qSystem.out.println(n);qq注意注意:在强制转换时有时会导致溢出或降低精度,比如整型值赋给byte时,如果整型值大了,会自动取模再赋值,而浮点数赋值给整数时会去掉小数点。 n3、字符串型数据与其他数据类型转换:在Java中是通过toString()方法来实现的。n【例2-6】字符串型数据与其他数据类型转换的例子。qpublic class ChangeTest1 qpublic static void main(String args) qint i1 = 10;qfloat f1 = 3.14f;qdouble d1 = 3.1415926;q/注意大小写qInteger I1 = new Integer(i1); /生成integer类qFloat F1 = new Float(f1); / 生成float类qDouble D1 = new Double(d1); /生成double类q/分别调用包装类的tostring()方法转换为字符串qString si1 = I1.toString(); /toString在此完成integer类型转换为字符串qString si2 = F1.toString();qString si3 = D1.toString();qSystem.out.println(si1);qSystem.out.println(si2);qSystem.out.println(si3);qqn4、将CHAR型值直接做为数值转换为其他数据类型n【例2-7】CHAR型值直接做为数值转换为其他数据类型的例子。qpublic class ChangeTest2 qpublic static void main(String args) qint i;qchar c1 = A;qi = c1;qSystem.out.println(i);qchar c2 = (char) (i + 2); / 此处要强制转换qSystem.out.println(c2);qq2.3 运算符、表达式 nJava提供了丰富的运算符,如算术运算符、关系运算符、逻辑运算符、位运算符等。2.3.1算术运算符与算术表达式 n在Java中提供运算功能的就是运算符(Operator),例如与算术相关的有加(+)、减(-)、乘(*)、除(/)这类的运算符。另外还有一个也很常用的取模运算符(%)。这类以数学运算为主的运算符称为算术运算符(Arithmetic Operator)。 n算术运算符的使用基本上与加减乘除一样,也是先乘除后加减,必要时加上括号表示运算的先后顺序。 2.3.2比较和条件运算 n数学上有比较的运算,像大于、等于、小于等运算,Java中也提供了这些运算符,这些运算符称为“比较运算符”(Comparison Operator)。它们有大于()、大于等于(=)、小于()、小于等于( 5 结果 + (10 5);nSystem.out.println(10 = 5 结果 + (10 = 5);nSystem.out.println(10 5 结果 + (10 5);nSystem.out.println(10 = 5 结果 + (10 = 60 ? 是 : 否);nn2.3.3逻辑和位运算 nJava中也提供这几个基本逻辑运算所需的逻辑运算符(Logical Operator),分别为与(&)、或(|)和取反(!)3个运算符。 n【例2-11】下面是逻辑和位运算的示例。qpublic class LogicalOperator qpublic static void main(String args) qint number = 75;qSystem.out.println(number 70 & number 80 | number 80 | number 75);qq2.3.4递增和递减运算 n递增(Increment)、递减(Decrement)与赋值(Assignment)运算符,这几种运算符的目的除了让程序看来比较简洁之外,还可以稍微增加一些程序执行的效率。n在程序中对变量递增1或递减1是很常见的运算,例如:qint i = 0; qi = i + 1; qSystem.out.println(i); qi = i - 1; qSystem.out.println(i);n上面这段程序会分别显示变量+1与-1操作的结果,1与0两个数, 【例2-16】递增、递减运算符的示例。 npublic class IncrementDecrement npublic static void main(String args) nint i = 0;nSystem.out.println(+i);nSystem.out.println(-i);nn2.3.5赋值运算符 n到目前为止,只学习过一个赋值运算符,也就是=这个运算符,事实上赋值运算符还有其他几个,如表2-2所示。 赋值运算符范例结果+=a+=ba=a+b-=a-=ba=a-b*=a*=ba=a*b/=a/=ba=a/b%=a%=ba=a%b&=a&=ba=a&b|=a|=ba=a|b=a=ba=ab=a=ba=a=a=ba=ab表2-2 赋值运算符 2.4语句 在Java语言中,语句可分为以下5类:n1方法调用语句方法调用语句qSystem.out.println(“Hello”);n2表达式语句表达式语句q由一个表达式构成一个语句,最典型的是赋值语句,如:x = 23;q一个表达式加上一个分号就构成了一个语句,分号是语句不可缺少的部分。n3复合语句复合语句q可以用把一些语句括起来构成复合语句,如:q z = 23 + x;qSystem.out.println(“Hello”);n4控制语句控制语句q包括条件语句和switch开关语句。n5package语句和语句和import语句语句qPackage语句和import语句与类、对象有关,相关内容在第3章中介绍。 2.4.2 控制语句 nJava的控制语句有2种类型,即条件语句和switch开关语句。 n1条件控制语句条件控制语句q为了解决“如果”发生了,就要的需要,Java提供了if条件控制语句。它的语法如下:qif(条件式)q 语句1;qelseq 语句2;n如果在if后有两个以上的语句,称之为复合语句(Compound Statement),此时必须使用 定义程序块(Block)将复合语句包括起来。例如:qif(条件式) q 语句1;q 语句2; qqelse q 语句3;q 语句4;q【例2-19】使用if条件式来判断使用者的输入是奇数还是偶数。 nimport java.util.Scanner;npublic class OddDecider3 npublic static void main(String args) nScanner scanner = new Scanner(System.in);nSystem.out.print(请输入数字: );nint input = scanner.nextInt();nint remain = input % 2; / 求除 2 的余数nif (remain = 1) / 如果余数为1nSystem.out.println(input + 为奇数);nelsenSystem.out.println(input + 为偶数);nn2switch 条件式条件式 nswitch只能比较数值或字符,使用适当的话,可比if判断式有效率。switch的语法结构如下:qswitch(变量名称或表达式) q case 符合数字或字符:q 语句1;q break;q case 符合数字或字符:q 语句2;q break;q default:q 语句3; q 【例2-21】使用switch来改写处理学生的成绩等级问题。 nimport java.util.Scanner;npublic class ScoreLevel2 npublic static void main(String args) nScanner scanner = new Scanner(System.in);nSystem.out.print(请输入分数: );nint score = scanner.nextInt();nint level = (int) score / 10;nswitch (level) ncase 10:ncase 9:System.out.println(得A);nbreak;ncase 8:System.out.println(得B);nbreak;ncase 7:System.out.println(得C);nbreak;ncase 6:System.out.println(得D);nbreak;ndefault:System.out.println(得E(不及格);nnn2.4.3 循环语句 n1for循环循环 n在Java中如果要进行重复性的指令执行,可以使用for循环式。它的基本语法如下:qfor(初始式; 判断式; 递增式) q 语句1; q 语句2; q n如果语句只有一个,也就是非复合语句, 可以省略不写。for循环的第一个初始语句只会执行一次,之后每次重新进行循环时,都会根据判断式来判断是否执行下一个循环,而每次执行完循环之后,都会执行递增式。【例2-22】for循环的功能示例。 npublic class SimpleLoopFor npublic static void main(String args) nfor (int i = 0; i 10; i+)nSystem.out.print( + i);nn2while循环循环 nJava提供while循环式,它可以根据所指定的条件式来判断是否执行循环体。语法如下:qwhile(条件式) q 语句1; q 语句2; q 【例2-25】计算输入成绩平均的程序。 nimport java.util.Scanner;npublic class ScoreAverage npublic static void main(String args) nScanner scanner = new Scanner(System.in);nint score = 0;nint sum = 0;nint count = -1;nwhile (score != -1) ncount+;nsum += score;nSystem.out.print(输入分数(-1结束):);nscore = scanner.nextInt();nnSystem.out.println(平均: + (double) sum / count);nn2.4.4 break和continue nbreak可以离开当前switch、for、while、do while的程序块,并前进至程序块后下一条语句,在switch中主要用来中断下一个case的比较。在for、while与do while中,主要用于中断目前的循环执行,break的例子之前已经看过不少,这里不再举例。ncontinue的作用与break类似,主要用于循环,所不同的是break会结束程序块的执行,而continue只会结束其之后程序块的语句,并跳回循环程序块的开头继续下一个循环,而不是离开循环。 n例如:nfor(int i = 1; i 10; i+) n if(i = 5)n break;n System.out.println(i = + i); nn这段程序会显示i = 1到4,因为当 i 等于5时就会执行break而离开循环。 n看下面这个程序:nfor(int i = 1; i 10; i+) n if(i = 5)n continue;n System.out.println(i = + i); n n这段程序会显示1到4,与6到9。当 i 等于5时,会执行continue直接结束此次循环,这次循环中System.out.println()行并没有被执行,然后从程序块开头执行下一次循环,所以5并没有被显示。2.5输入输出n1)利用System.out.println(),可以非常容易实现输出 n【例2-29】一个输出的例子。qpublic class OutputTest qpublic static void main(String args) qfloat x;qx = 100.0f / 3.0f;qSystem.out.println(x);qSystem.out.println(100.0 / 3.0);qqn2)格式化输出n在java.text包中,提供了NumberFormat类可以产生这种格式,然后我们再用format方法来得到格式化的字符。 【例2-30】一个格式化输出的例子。 nimport java.text.*;npublic class OutputTest1 npublic static void main(String args) n double x;n x = 100.0 / 3.0;n NumberFormat f1 = NumberFormat.getNumberInstance();/ 数字格式n String s = f1.format(x);n System.out.println(s);n NumberFormat f2 = NumberFormat.getPercentInstance();/ 百分比格式n s = f2.format(x);n System.out.println(s);n NumberFormat f3 = NumberFormat.getCurrencyInstance();/ 货币格式,这跟系统区域有关n s = f3.format(x);n System.out.println(s);nnn3)键盘输入n【例2-31】一个键盘输入的例子。qimport javax.swing.*;qpublic class InputTest qpublic static void main(String args) qString name = JOptionPane.showInputDialog(please input you name:);qString input = JOptionPane.showInputDialog(please input you age:);qint age = Integer.parseInt(input);qSystem.out.println(your name: + name + you age: + age);qSystem.exit(0);qq2.6 数组 n2.6.1数组的概念n数组(Array)是一组相同数据类型数据的有序集合。在Java语言中数组元素可以由简单数据类型组成也可以由对象组成。数组中的每个元素都具有相同的数据类型,可以用一个统一的数组名和一个下标来唯一地确定数组中的元素。 n数组主要具有下面的特点:q数组是相同数据类型的元素的集合。q数组中的各元素是有先后顺序的,在内存中按照这个先后顺序连续存放在一起。q数组元素用整个数组的名字和其在数组中的顺序位置来表示。如a0表示名字为a的数组中的第一个元素,a1表示数组a中的第二个元素。q从数组的构成形式上看,可将其分为一维数组和多维数组。2.6.2一维数组n1 一维数组的定义qtype arrayName ; q类型(type)可以为Java中任意的数据类型,包括简单类型和复合类型。 例如: qint intArray ;qDate dateArray;n2 一维数组的初始化 q 静态初始化 nint intArray=1,2,3,4; nString stringArray=abc, How, you; n 动态初始化 n1)简单类型的数组 qint intArray; qintArray = new int5; n2)复合类型的数组 qString stringArray ; qString stringArray = new String3; /为数组中每个元素开辟引用空间(32位)qstringArray0= new String(How); /为第一个数组元素开辟空间 qstringArray1= new String(are); /为第二个数组元素开辟空间 qstringArray2= new String(you); / 为第三个数组元素开辟空间 n3一维数组元素的引用 n数组元素的引用方式为:qarrayNameindex qindex为数组下标,它可以为整型常数或表达式,下标从0开始。每个数组都有一个属性length指明它的长度,例如:intArray.length指明数组intArray的长度。 2.6.3多维数组nJava语言中,多维数组被看作数组的数组。 n1二维数组的定义 qtype arrayName ; qtype arrayName; n2二维数组的初始化 n 静态初始化 qint intArray =1,2,2,3,3,4,5; qJava语言中,由于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。 n 动态初始化 n1) 直接为每一维分配空间,格式如下: qarrayName = new typearrayLength1arrayLength2; qint a = new int23; n2) 从最高维开始,分别为每一维分配空间: qarrayName = new typearrayLength1 ; qarrayName0 = new typearrayLength20; qarrayName1 = new typearrayLength21; q qarrayNamearrayLength1-1 = new typearrayLength2n; n二维简单数据类型数组的动态初始化如下, qint a = new int2 ; qa0 = new int3; qa1 = new int5; n对二维复合数据类型的数组,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。而且,必须为每个数组元素单独分配空间。 例如:qString s = new String2 ; qs0= new String2; /为最高维分配引用空间 qs1= new String2; /为最高维分配引用空间 qs00= new String(Good); /为每个数组元素单独分配空间 qs01= new String(Luck); /为每个数组元素单独分配空间 qs10= new String(to); /为每个数组元素单独分配空间 qs11= new String(You); /为每个数组元素单独分配空间 n3二维数组元素的引用 n对二维数组中的每个元素,引用方式为:qarrayNameindex1index2 q例如: num10; 【例2-32】一个二维数组的例子。 npublic class MatrixMultiply npublic static void main(String args) nint i, j, k;nint a = new int23; / 动态初始化一个二维数组n/ 静态初始化一个二维数组nint b = 1, 5, 2, 8 , 5, 9, 10, -3 , 2, 7, -5, -18 ;nint c = new int24; / 动态初始化一个二维数组nfor (i = 0; i 2; i+)nfor (j = 0; j 3; j+)naij = (i + 1) * (j + 2);nfor (i = 0; i 2; i+) nfor (j = 0; j 4; j+) ncij = 0;nfor (k = 0; k 3; k+)ncij += aik * bkj;nnnSystem.out.println(*Matrix C*);/ 打印Matrix C标记nfor (i = 0; i 2; i+) nfor (j = 0; j 0);qSystem.out.println(Finish);qqnA. Doing it for l is 3nB. Doing it for l is 1nC. Doing it for l is 2nD. Doing it for l is 0nE. Doing it for l is ?C1nF. Finish
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号