1、Java 语言基础,Java回顾,Java 编程语言由 Sun Microsystems 于 1995 年推出 Java 是面向对象的跨平台语言 Java 字节码是 Java 虚拟机 (JVM) 可理解的机器语言指令,通常是编译Java 语言源代码生成的结果 JDK 提供多种工具,这些工具位于 JDK 的 bin 目录下,具体如下:javac java javadoc Java 字节码是 Java 虚拟机 (JVM) 可理解的机器语言指令,通常作为 Java 语言源代码的编译结果而生成,目标,理解数据类型 掌握运算符 掌握数组 运用控制流语句,Java 语言的基础知识,数据类型,变量,运算符,
2、控制流语句,Java 块,变量是存储数据的基本单元 。,数据类型确定要存储在内存中的数据的类型。,运算符是一个符号,用于操作一个或多个参数以得出结果。,程序是按顺序执行的。控制流语句允许改变此顺序。,标识符用来标识类名、变量名、方法名、类型名、数组名、文件名的有效字符序列称为标识符,定义的规则如下:由字母、数字、下划线和美元符组成必须以字母、下划线或美元符号打头严格区分大小写,没有长度限制应该具有特定的意义,拉丁字母(a,b,c),汉语中的汉字,日文中的片假语、平假语,朝鲜文以及其他许多语言中的文字,标识符是Java语言的基本组成部分,合法的标示符,如: $Programe _java $Pr
3、ograme_Java1 Programe2_1 日历a,非法的标示符,如: 12Programe &_java Program-Java1 %Programe21 $sum¥number,关键字关键字就是Java语言中已经被赋予特定意义的一些单词,它们在程序上有着不同的用途,不可以把关键词作为类名、变量名、方法名、类型名、数组名、文件名等名字来用,关键字如下表所示,关键字,Java关键字表,Java数据类型表,基本数据类型,整数类型Java整型数都为有符号数,整型多为十进制数形式,也可为八进制或十六进制形式整型的范围与Java代码所运行的机器无关 整形按所占内存空间的大小分为四种类型byte
4、、short、int、long,int类型:32位(4个字节) ,最常用,变量的取值范围是: -231231-1int型变量使用关键字int来定义,如:int a,sum,Number,整数; int n = 55;,long类型:64位(8个字节),用于很大的整数,长整形数字都有一个后缀L,变量的取值范围是 -263263-1long型变量使用关键字long来定义,如: long number,数学,$sum; long n = 500000L; / L的大小写均可,short类型:16位(2个字节),变量的取值范围是-215 215-1short型变量使用关键字short来定义,如: sh
5、ort number,数学,$sum; short mynum = 500;,byte类型:8位(1个字节),变量的取值范围是 -2727-1byte型变量使用关键字long来定义,如: byte number,数学,$sum; byte num = 50;,浮点型数据浮点型数据有两种表示方式用十进制数形式表示,由数字和小数点组成,如:3.25用科学计数法形式表示,如:123E-3,浮点型按所占内存空间的大小分为两种类型:float型(4字节)和double型(8字节)浮点型数据不适合在不允许舍入误差的金融计算领域使用,如: 2.0f - 1.1f = 0.89999999999999990,
6、数后加f或F为float型,加d或D为double型(默认为double类型),实例,public class FloatandDoublepublic static void main(String args)float c = 4.2f;float d = 12E-3f;double a = 5.0;double b = 13E-2;System.out.println(“a = ”,a);System.out.println(“b = ”,b);System.out.println(“c = ”,c);System.out.println(“d = ”,d); ,a = 5.0 b =
7、0.13 c = 4.2 d = 0.012,字符数据类型字符常量是用单引号括起来的一个字符,如:J、*char型变量,内存分配给2个字节,占16位,最高位不是符号位,没有负数的char,Java中有以反斜杠开头的字符,反斜杠将其后面的字符转变为另外的含义,称为转义字符如:n b t ,char变量的定义如下:char ch=5;,Java中的字符型数据是16位的Unicode字符,汉字和英文字母占的内存空间相同例:“JAVA你好”共12个字节,要观察一个字符在unicode表中的顺序位置,必须使用int类型显示转换,如:(int)a不可使用short型(2字节)转换,因为char的最高位不是
8、符号位,如果要得到一个065536之间的数所代表的unicode表中相应位置上的字符必须使用char向显示转换,如:(char)69,例:显示字符在unicode中的位置 Public class exaPublic static void main(String args)char Word = 你 ;int p = 20329;System.out.println(“汉字你在unicode表中的顺序位置:”+(int)Word);System.out.println(“unicode表中第20329位置上的字符是:”+(char)p); ,结果:20320,结果:佩,布尔数据类型又称为逻辑
9、类型,布尔型常量值只有:true和false布尔型变量为boolean类型,取值为true或false,定义时可以赋予初值,例如: boolean b = true;,基本数据类型的转换就是把一种基本数据类型变量转变成另一种基本类型变量。,当把级别低的变量的值赋给级别高的变量时,系统自动完成数据类型的转换。当把级别高的变量的值赋给级别低的变量时,必须使用显示类型转换运算。,高精度向低精度转换容易造成精度损失。,基本数据类型的转换,类型提升规则,两种类型兼容; 目标类型大于源类型;例如: byte、char和 short 型值可提升为 int 型 对于表达式 如果一个操作数为 long 型,则整
10、个表达式提升为 long 型 如果一个操作数为 float 型,则整个表达式提升为 float 型 如果一个操作数为 double 型,则整个表达式提升为 double 型,实例,int a=9,c; short b=4; c = a + b,int c; float b=4.2f; c = (int)b,int c; doouble b=4.2; c = (int)b,结果:c=13,结果:c=4,结果:c=4,Java提供的数据输入与输出很多都是在命令行窗口(例如,MS-DOS窗口)中进行。,数据输出 System.out对象println():输出文本并换行print():输出文本不换行
11、printf():带格式的输出(新增方法) 教材P21printf(格式控制部分,表达式1,表达式2,表达式n);,数据的简单输入与输出,public class PrintOut public static void main (String args)long x = 5678l;float f = 123.456789f;double d = 123456.12345678;char c = a;System.out.print(f);System.out.println(f); System.out.printf(“%cn%10.3f%n%f, %12d%n%d“, c,f,d,x=x
12、+2,x); System.out.printf(“%cn%10.3f%n%f,%3d%n%d“,c,f,d,x=x+2,x); ,数据的输入:ScannerScanner是SDK1.5新增的一个类,然后reader对象调用下列方法,读取用户在命令行输入的各种数据类型。nextByte(), nextDouble(), nextFloat(), nextLine(),nextInt(),nextLine(),nextLong(), nextShort(),上述方法执行时系统都会暂时停下来,等待在命令行输入数据后回车确认,,首先创建一个该类的对象: Scanner reader = new Sc
13、anner(System.in);,例:用户在键盘依次输入若干个数字,每输入一个数字都需要按回车键确认,最后在键盘输入一个非数字字符(比如回车)结束整个的输入操作过程,程序将计算出这些数的和及平均值等待输入的方法:hasNextXXX()读取输入数据的方法:nextXXX(),import java.util.*; public class Example public static void main (String args )Scanner reader = new Scanner(System.in);double sum = 0;int m = 0;while(reader.hasN
14、extDouble()double x = reader.nextDouble();m = m+1;sum = sum+x; System.out.printf(“%d个数的和为%fn“,m,sum);System.out.printf(“%d个数的平均值是 %fn“,m,sum/m);reader.close(); ,变量,变量声明由以下三个部分组成:数据类型名称要赋给的初始值(可选),语法:数据类型 标识符 =值, 标识符=值;,class VariableTest public static void main(String args) double a = 1.0;int b = 3;
15、System.out.println(“双精度变量的值为: “+a);System.out.println(“整型变量的值为:“+b); ,示例,声明变量并初始化,变量的作用域和生存期,变量可以在代码块中声明 块以左大括号开始,以右大括号结束 块用来定义作用域 每次创建一个新块后,就会创建一个新的作用域 变量的作用域是一个作用的范围,每个变量都有自己的作用域 变量的生存期是指变量的生存周期,class ScopeVar public static void main(String args) int num = 10; if ( num = 10) /num 在内层作用域中可用int num1
16、 = num * num;System.out.println(“num 和 num1 的值为“ + num + “ “ + num1);System.out.println(“num 的值为“ + num); ,示例,/num1 = 10; 错误!num1 未知,检查变量的作用域 如果从变量的作用域外访问变量,则会出错!,运算符,示例,代码片断:int a= 5, b= 12,d=10,c; c=a+b; 加法 c=b%a; 取模 d+; 递增 d-; 递减c 和 d 的值:c=17 相加后 c=2 这是 a/b 的余数 d=11 递增后 d=10 递减后,代码片断:boolean i=tr
17、ue, j=false; boolean or=i|j, and=ior 和 and 的值or=true 使用逻辑 or and=false 使用逻辑 and not=false 使用一元逻辑 not,算术运算符,逻辑运算符,运算符的优先级,表达式通常由多个运算符组成。优先级的规则决定每个运算符在任何给定表达式中的计算顺序,控制流语句,所有应用程序开发环境都提供一个判定过程,称为控制流语句,它用于引导应用程序的执行 流控制使程序员可以创建一个应用程序,该应用程序能够检查现有的条件并决定适当的操作过程 循环或迭代是重要的编程结构,可用于重复执行一组操作 跳转语句允许以非线性的方式执行程序,控制流
18、语句的类型,判断语句 if-else 语句 switch-case 语句 循环语句 while 循环 do-while 循环 for 循环,if-else 语句,if-else 语句测试条件的结果,然后根据此结果来执行相应的操作 它可用于以两个不同的路径来执行程序 if-else 语句的语法为:if (condition)action1;elseaction2;,switch-case 语句,switch-case 语句可用于替换 if-else-if 语句 在表达式可以得出多个值的情况下,使用此语句 使用 switch-case 语句会带来更好的效果 switch-case 语句的语法为:s
19、witch (表达式) case 1:操作 1 的语句;break;case 2:操作 2 的语句;break;.case n :操作 n 的语句;break;default:默认语句; ,循环 3-1,while,只要指定的条件评估为 true,while 循环则执行一个语句或一组语句,语法,int count = 0; while (count 10) System.out.println(count);count+; ,示例,while (测试)/ 语句,被执行,条件 = true,循环 3-2,do-while,do-while 循环执行某些语句,直到指定的条件为真。此循环确保循环体至
20、少执行一次,语法,do System.out.println(count);count+; while (count 10),示例,do / 语句while (测试),被执行,条件 = true,循环 3-3,for,for 循环主要用于按预定的次数执行语句或语句块,语法,Int count; for(count = 0; count 10; count+) System.out.println(count); ,示例,for(初始化;测试; 增量)操作语句; ,条件 = true,被执行,跳转语句2-1,两种跳转语句为: break continuebreak 语句:用于终止块。contin
21、ue 语句:有时程序员可能希望继续循环,而停止处理其主体内的其余代码,以进行特定的迭代。continue 语句可用于这种操作。,跳转语句2-2,将 break 关键字引入循环 避免不必要的执行 终止循环,int number = 29;for (int i = 2; i number; i+) if (number % i = 0) System.out.println(i+“是非质数“);continue; System.out.println(i+“是质数“);,数组2-1,数组是一个变量,用于将相同数据类型的数据存储在存储单元中 可以使用以下三种方式声明数组: 数据类型 标识符 ; 数据
22、类型 标识符 = new 数据类型大小; 数据类型 标识符 = 值 1,值 2,值 N ; 数组可以为多维,数组 2-2,一维数组由一列相同类型的数据组成 可以通过指定数组的名称和大小来声明数组,一维数组,多维数组,多维数组是数组的数组 要声明一个多维数组,必须使用另一组方括号来指定附加索引,一维数组, 静态初始化 int intArray=1,2,3,4; String stringArray=“abc“, “How“, “you“; 动态初始化 1)简单类型的数组 int intArray; intArray = new int5; 2)复合类型的数组 String stringArray
23、 ; String stringArray = new String3;/*为数组中每个元素开辟引用空间(32位) */ stringArray0= new String(“How“);/为第一个数组元素开辟空间 stringArray1= new String(“are“);/为第二个数组元素开辟空间 stringArray2= new String(“you“);/ 为第三个数组元素开辟空间,多维数组,1二维数组的定义 type arrayName ; type arrayName;2二维数组的初始化 静态初始化 int intArray =1,2,2,3,3,4,5; Java语言中,由
24、于把二维数组看作是数组的数组,数组空间不是连续分配的,所以不要求二维数组每一维的大小相同。 动态初始化 1) 直接为每一维分配空间,格式如下: arrayName = new typearrayLength1arrayLength2; int a = new int23; 2) 从最高维开始,分别为每一维分配空间: arrayName = new typearrayLength1 ; arrayName0 = new typearrayLength20; arrayName1 = new typearrayLength21; arrayNamearrayLength1-1 = new type
25、arrayLength2n;,多维数组(2),3) 例: 二维简单数据类型数组的动态初始化如下, int a = new int2 ; a0 = new int3; a1 = new int5; 对二维复合数据类型的数组,必须首先为最高维分配引用空间,然后再顺次为低维分配空间。而且,必须为每个数组元素单独分配空间。 例如: String s = new String2 ; s0= new String2;/为最高维分配引用空间 s1= new String2; /为最高维分配引用空间 s00= new String(“Good“);/ 为每个数组元素单独分配空间 s01= new String
26、(“Luck“);/ 为每个数组元素单独分配空间 s10= new String(“to“);/ 为每个数组元素单独分配空间 s11= new String(“You“);/ 为每个数组元素单独分配空间,示例,数组声明 访问数组元素 使用 length 属性,/* 数组初始化*/double nums = 2, 0, 1; /* 输出数组元素*/ System.out.println(“位置 3 的值为:“ + nums2);,int numbers = 8, 18, 5, 2, 1, 10; System.out.println(“数组中元素的总数为:“+ numbers.length);
27、System.out.println(“数组中的第一个元素为:“ + numbers0); System.out.println(“数组中的最后一个元素为:“ + numbersnumbers.length - 1);,命令行参数,在程序执行过程中,可以通过传递命令行参数将信息传递至 main( ) 方法 可以通过 String 参数访问这些参数,public class ComndLineArg1 public static void main(String args ) for(int i=0;iargs.length;i+) System.out.println(argsi); ,输出 结果,使用转义序列格式化输出,每当要将输出结果显示到屏幕上时,就需要进行格式化 可以使用 Java 提供的转义序列进行格式化示例:System.out.println (“生日t快乐”);输出结果:生日 快乐,总结,Java 中的数据类型分为两种:原始数据类型和引用数据类型 变量是存储数据的基本单元 数组用于将相同数据类型的多项数据存储在连续的内存单元中 Java 提供各种类型的运算符 Java 支持用作控制语句的各种编程结构,