Java语言基础知识.ppt_第1页
Java语言基础知识.ppt_第2页
Java语言基础知识.ppt_第3页
Java语言基础知识.ppt_第4页
Java语言基础知识.ppt_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

1,第二章 Java 语言基础知识,2,主要内容,1、Java语言基本元素 2、Java数据类型 3、运算符与表达式 4、Java数组 6、Java 控制语句(自学教材3.1) 课后参考:thinking in Java 第二,三章,第四章数组的初始化; 教材第一章,第三章3.1,第四章4.6.1,3,1、Java语言基本元素,1)标示符(identifier) 标识符是程序员对程序中的各个元素加以命名时使用的命名记号称为标识符(identifier)包括:类名、变量名、常量名、方法名 标识符的第一个字符必须是下列字符之一: 大写字母 (A-Z) 小写字母 (a-z) 下划线(_) 美元符号 ($) 标识符的第二个字符及后继字符必须是: 上述列表中的任意字符 数字字符 (0-9),4,2)保留字 具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字(reserved word) abstract break byte boolean catch case class char continue default double do else extends false final float for finally import implements int interface instanceof long length native new null package private protected public final return switch synchronized short static super try true this throw throws threadsafe transient void while if,5,保留字注意事项: Java中,true、false和null都是小写的。区别于C+中大写的TRUE、FALSE和NULL。 所有数据类型在所有机器中的大小都是相同的,因此在Java中没有sizeof操作符。 不能更改或重复定义保留字,也不能将Java保留字用作用户自定义标示符。,6,3)变量 即程序中的基本存储单元,其定义包括变量名、变量类型和变量值几个部分,定义格式: type varName = value; int n = 3, n1 = 4; type为数据类型名;var为变量名,value为变量的值。,7,与C+不同,作为类成员的变量,其默认初值都是确定的: 布尔变量的初值为:false 整数变量的初值为:0 浮点数变量的初值为:0.0 引用(类)变量的初值为:null 但是在方法(函数)实现中定义的变量必须程序员自己初始化;,8,4)常量 Java中 的 常 量 值 是 用 文 字 串 表 示 的,它 区 分 为 不 同 的 类 型,如 整 型 常 量 123,实 型 常 量 1.23,字 符 常 量 a ,布 尔 常 量 true、false以 及 字 符 串 常 量 “This is a constant string.“。 与 C、 C+不 同,Java中 不 能 通 过 #define命 令 把 一 个 标 识 符 定 义 为 常 量,而 是 用 关 键 字 final来 定义,其定义格式为: final Type varName = value; final int globalAccount = 100, nationalAccount = 50; final double PI=3.14159;,9,2、Java数据类型,基本数据类型,引用数据(类)类型,10,2.1 基本数据类型,所有基本类型所占的位数都是确定的,并不因操作系统的不同而不同。 所有基本类型的关键词都是小写的。,数据类型 所占位数 数的范围 char 16 0 65535 byte 8 -2727-1 short 16 -215215-1 int 32 -231231-1 long 64 -263263-1 float 32 3.4e038 3.4e038 double 64 1.7e308 1.7e308,11,1)布尔类型(boolean) 布尔型数据只有两个值true和false,且它们不对应于任何整数值 布尔型变量的定义如: boolean b = true; 布尔型数据只能参与逻辑关系运算: ,2)字符类型(char) 字符型数据代表16位的Unicode字符 字符常量是用单引号括起来的一个字符 a B n u0030 字符型数据的取值范围为 065535 示例 char c1; 缺省值为0 char c2 = 0; 赋初值为字符0 char c3 = 32; 用整数赋初值为空格,13,特殊字符的常量表示法: 反斜线(Backslash) 退格(Backspace) b 回车(Carriage return) r 进纸符(Form feed) f 制表符(Form feed) t 换行(New line) n 单引号(Single quote) 八进制数( 0377 ) DDD Unicode字符 uHHHH,14,3)整数类型(byte, short, int, long) 整型常量 1. 十进制整数 如123,456,0 2. 八进制整数 以0开头,如0123表示十进制数83,011表示十进制数9。 3. 十六进制整数 以0x或0X开头,如0x123表示十进制数291,0X12表示十进制数18。 整型变量 类型为byte、short、int或long,整型变量的定义如: int x=123; /指定变量x为int型,且赋初值为123 byte b = 8; short s = 10; long y = 123L; long z = 123l;,15,示例 byte b1; 缺省值为0 byte b2 = 127; 赋初值为127 short s1 = (short)(b1 + b2); 强制类型转换 short s2 = (short)(b1 + 123) 强制类型转换 int n = b1 + b2; 不需要强制类型转换 long l1 = 2343; 不需要强制类型转换 long l2 = 4294967296L; 必须用L或l结尾 long l3 = 65536*63356; 乘法运算越界,l3为0 long l4 = 65536L*63356; l4为4294967296L,16,4)浮点数类型,实型(float, double) 实型常量 1. 十进制数形式 由数字和小数点组成,且必须有小数点,如0.123, .123, 123.,123.0 2. 科学计数法形式 如:123e3或123E3,其中e或E之前必须有数字,且e或E后面的指数必须为整数。 32位浮点数形式: 0.23f, 1.23E-4f , . 18F,17,数据类型转换 自动类型转换 整型、实型、字符型数据可以混合运算。运算中,不同类型的数据先转化为同一类型,然后进行运算,转换从低级到高级: 低-高 byte,short,char int long float double 数据类型转换必须满足如下规则: 不能对boolean类型进行类型转换。 不能把对象类型转换成不相关类的对象。 允许把容量小的类型转换为容量大的类型,18,在把容量大的类型转换为容量小的类型时必须使用强制类型转换。 转换过程中可能导致溢出或损失精度 int i = 8; byte b=(byte)i; 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入 (int)23.7 = 23; (int)-45.89f = -45;,19,2.2 引用数据类型,引用数据类型是一种组合型数据类型,即把若干个数据类型组合在一起, C语言称之为结构,Java称为引用类型,也就是类。 Java中的引用,在语法上更接近于C+的引用。可看作是对指针的抽象。,20,关于引用类型,需要注意以下两点: 与基本数据类型不一样,创建引用类型并不分配任何存储空间,也就是当声明一个引用类型时,编译程序并不会分配任何空间,以存储相应数据类型的数据。 如:String s; 一旦对它作初始化或创建一个新对象,就在内存里为它分配了一定空间。 String s = “asdf”; /初始化 String s = new String(“asdf”); /创建一个String对象并初始化。 Rectangle oneRec = new Rectangle(); /创建一个Rectangle对象并初始化。,21,2.3 基本数据类型的对象包装,Java中,除了引用类型外,其他基本数据类型也可作为类类型。 在Java库中,8种基本数据类型都有一个相应的,预定的类类型。例如,其中存在一个相应于整数的java.lang.Interger,这些类类型称为对象包装(object wrappers), 其设计目的是借助于类,把基本数据类型对象化,为基本数据类型的运算提供必要的方法,如实现基本数据类型的数值与可打印字符串之间的转换。 参看javadoc API,22,例如: int i = 15; Integer myInt = new Integer(i); /wrap an int /in a object /get the printable representation of an Integer; String s = myInt.toString(); 注意:JDK 1.5 版引入了自动封装(autoboxing)的特性,上述例子可以直接赋值: int i =15; Interger myInt = i; (autoboxing) 即把基本数据类型变量int封装成Interger对象。,23,解封(Unboxing)是反向操作,即从封装的对象类型转换为与之相应的基本数据类型。 Double dObj = 27.0; /autobox double d = dObj; /unbox, gets value 27.0,24,基本数据类型的对象包装类,基本数据类型 相应的包装类 boolean java.lang.Boolean char java.lang.Charater int java.lang.Integer long java.lang.Long byte java.lang.Byte short java.lang.Short double java.lang.Double float java.lang.Float,25,生成包装类对象的方法,生成包装类对象的方法 从基本数据类型的变量或常量生成包装类对象 double x = 1.2; Double a = x; Double b = new Double(-5.25); 从字符串生成包装类对象 Double c = new Double(“-2.34“); Integer i = new Integer(“1234“); 已知字符串,可使用valueOf方法将其转换成包装类对象: Integer.valueOf(“125“); Double.valueOf(“5.15“);,26,从包装类数据转换为基本数据类型数据的方法,转换为基本数据类型数据的方法 1、每一个包装类都提供相应的方法将包装类对象转换回基本数据类型的数据 anIntegerOValue() / 返回 int类 aCharacterObject.charValue() / 返回 char类型的数据,27,2、Integer、Float、Double、Long、Byte 及Short 类提供了特殊的方法能够将字符串类型的对象直接转换成对应的int、float、double、long、byte或short类型的数据 Integer.parseInt(“234”) / 返回int类型的数据 Float.parseFloat(“234.78”) / 返回float类型的数据 例:example.java 一个从键盘接受输入的例子:AcceptInput.java 从对话框接受输入的例子: GreatestNumber.java,28,(1)运算符 算术运算符: +,*,/,%,+, 关系运算符: ,=,&,|, 赋值运算符: =,及其扩展赋值运算符如+=,=,*=,/=等。 条件运算符: ? :,3、运算符与表达式,29,其它 分量运算符 , 下标运算符 , 实例运算符 instanceof, 内存分配运算符 new, 强制类型转换运算符 (类型), 方法调用运算符 () 由于数据类型的长度是确定的,所以没有长度运算符sizeof。,30,运算符的优先次序 1) . , , () 9) & 2) + , - , ! , , instanceof 10) 3) new (type) 11) | 4) * , / , % 12) & 5) + , - 13) | 6) , , , = , = , =,31,(2)表达式 表达式是由操作数和运算符按一定的语法形式组成的符号序列。 一个常量或一个变量名字是最简单的表达式,其值即该常量或变量的值; 表达式的值还可以用作其他运算的操作数,形成更复杂的表达式。 例: x num1+num2 a*(b+c)+d 3.14 x=(y+z) x&y|z,32,4、Java数组,在java里,数组也是对象,也就是数组类型是引用类型。 数组采用new分配空间。 每个数组都有一个由 public final 修饰的成员变量:length ,即表示数组含有元素的个数(length可以是正数或零) 得到数组的大小:myArray.length /yes 不可以写为: myArray.lengh( ) /No!No!No!,33,4.1 数组的声明,声明(Declaration) 如同其他对象的使用,使用数组前必须对它进行声明,声明数组时无需指明数组元素的个数,也不为数组元素分配内存空间。 不能直接使用,必须经过初始化分配内存后才能使用。 Type arrayName; 例如: int a1; String stringArray; 或者按照C/C+程序员的习惯 Type arrayName ; 例如: int a1; String stringArray;,34,正如处理类类型一样,用new创建一个新的数组。给它分配空间。 int carrot ; carrot = new int100; 或者可以将数组的声明和创建一并执行 int carrot=new int100; 注意:在java中,决不能像C语言那样在声明中指定数组的大小: int carrot256; /NO! NO! NO!,4.2 数组的创建,35,声明数组名时,直接对它的各个元素进行初始化: int a=22, 33, 44, 55; String wkdays = “mon”,”Tue”,”Wed, “Thu”, “Fri”; 比C/C+优越的是,创建数组的时,如果没有指定初始值,数组便被赋予默认值初始值。 基本类型数值数据,默认的初始值为0; boolean类型数据,默认值为false; 引用类型元素的默认值为null。,4.3 数组元素的初始化,36,数组在使用前,必须以适当的数值为数组元素赋值。例如: int carrot = new int256; /creates 256 ints, initial value 0 carrot7 = 32; /ok, accesses 1 element 如果数组是引用类型,则需要为对象引用变量分配空间,也必须先进行赋值。如欲使用一个类Timestamp: class Timestamp int hh, int mm, int ss; Timestamp appts = new Timestamp256; /creates 256 null reference appts7.hh = 10; /NO! appts7 is still null,37,在能够访问对象之前,需要对每个引用元素赋值,使之不再是null, 指向一个具体的对象: Timestamp appts = new Timestamp256; for(int i=0; iappts.length; i+) apptsi = new Timestamp(); appts7.hh = 10; /now OK! 注意:创建对象数组时出现失误是Java初学者常犯的错误,一旦出错,将会引起NullPointerExecption异常,38,通过下面的表达式使用数组的一个元素: arrayNameindex 下标从零开始计数. 元素的个数即为数组的长度,可以通过 arryName.length引用 元素下标最大值为 length 1,如果超过最大值,将会产生数组越界异常(ArrayIndexOutOfBoundsException),4.4 数组的使用,39,例:打印数组的值 public class MyArray public static void main(String args) int myArray; /声明数组 myArray=new int10; /创建数组 System.out.println(“IndexttValue“); for(int i=0; imyArray.length;i+) System.out.println(i+“tt“+myArrayi); /证明数组元素默认初始化为0 /myArray10=100; /将产生数组越界异常 ,40,例:length.java 获取main()中参数数组的长度 public class length public static void main(String args) System.out.println( “number of String args:“ + args.length +“n“); for(int i= 0; iargs.length; i+ System.out.println(“arg“+i+“ = “+argsi); System.out.println( “length of “+i+“th String:“ +argsi.length()+“n“); ,41,例:求一个数组总值 class Gauss public static void main(String args) int ia = new int101; for (int i = 0; i ia.length; i+) iai = i; int sum = 0; for (int i = 0; i ia.length; i+) sum += iai; System.out.println(sum); 输出: 5050,42,数组的复制可以用System类中的方法实现: public static void arraycopy(Object source , int srcIndex , Object dest , int destIndex , int length ),4.5 数组的复制,43,例子 public class ArrayCopy public static void main(String args) int I; int arr1 = 1,2,3,4,5,6,7,8,9,10; int arr2 = new int10; System.arraycopy(arr1, 0, arr2, 0, arr1.length); for(I =0; iarr2.length; i+) System.out.println(arr2i + “ “); System.out.println(); 运行结果为: 1 2 3 4 5 6 7 8 9 10,44,int gradeTable; gradeTable 0 1 为42 gradeTable 3 4 为93 gradeTable 6 2 为78,4.6 二维数组,45,int myArray ; myArray 可以存储一个指向2维整数数组的引用。其初始值为null。 int myArray = new int35 ; 建立一个数组对象,把引用存储到myArray。这个数组所有元素的初始值为零。 int myArray = 8,1,2,2,9, 1,9,4,0,3, 0,3,0,0,7 ; 建立一个数组并为每一个元素赋值。 例:MyArray2.java,4.1 二维数组的声明和构造,46,public class MyArray2 public static void main(String args) int myArray; /声明数组 myArray=new int510; /创建数组 int total=0; for(int i=0; imyArray.length;i+) for(int j=0;jmyArrayi.length;j+) myArrayij=i*10+j; /为每个数组元素赋值 for(int i=0; imyArray.length;i+) for(int j=0;jmyArrayi.length;j+) total+=myArrayij; System.out.println(“The sum is : “+total); ,47,class UnevenExample2 public static void main( String args ) int uneven = 1, 9, 4 , 0, 2, 0, 1, 2, 3, 4 ; System.out.println(“Length is: “ + uneven.length ); ,运行结果: Length is: 3,4.2 二维数组的长度,48,每行的长度: class UnevenExample3 public static void main( String arg ) / 声明并构造一个2维数组 int uneven = 1, 9, 4 , 0, 2, 0, 1, 2, 3, 4 ;,49,/ 数组的长度 (行数) System.out.println(“Length of array is: “ + uneven.length ); / 数组每一行的长度(列数) System.out.println(“Length of row0 is: “ + uneven0.length ); System.out.println(“Length of row1 is: “ + uneven1.length ); System.out.println(“Length of row2 is: “ + uneven2.length ); ,运行结果: Length of array is: 3 Length of row0 is: 3 Length of row1 is: 2 Length of row2 is: 5,50,5、Java控制语句(自学),Java控制语句 Java程序通过控制语句来控制方法的执行流程 Java中的流程控制结构主要有三种 顺序结构 选择结构 if语句(二路选择结构) switch语句(多路选择结构) 循环结构 for语句 while语句 do-while语句,51,if选择结构,语法形式 只有if分支,没有else分支 if (boolean-expression) / statement1; if-else语句 if (boolean-expression) / statement1 ; else / statement2 ; ,52,ex3_1 输入一个年份,判断它是不是闰年。 闰年: 能被4整除但不能被100整除,或者能被400整除。 public class ex3_1 public static void main(String args) throws IOException int year; boolean IsLeapYear; System.out.println(“Enter the year:“); BufferedReader in =new BufferedReader( new InputStreamReader(System.in); year=(new Integer(in.readLine().intValue();,if选择结构(续) ex3_1.java,53,IsLeapYear=(year%4=0 ,if选择结构(续) ex3_1.java,54,已知一个学生的分数,给出其分数等级。90-100分为级;80-89分为B级;70-79分为级;60-69分为D级;0-59分为E级 public class IfElseDemo public static void main(String args) int testscore = 76; char grade; if (testscore = 90) grade = A; else if (testscore = 80) grade = B; else if (testscore = 70) grade = C; else if (testscore = 60) grade = D; else grade = F; System.out.println(“Grade = “ + grade); ,程序输出: Grade = C,if选择结构(续) ifElseDemo.java,55,switch选择结构,switch语句是多分支的选择结构 switch (switch-expression) case value1: statements for case1; break; case value2: statements for case2; break; . case valueN: statements for caseN; break; default: statements for default case; break; 注意问题 switch-expression、常量值value1到valueN必须是整形或字符型 如果表达式的值和某个case后面的值相同,则从该case之后开始执行,直到break语句为止 default是可有可无的,若没有一个常量与表达式的值相同,则从default之后开始执行,56,if (i = 1) statementA(); else if (i = 2) statementB(); else if(i=3)|(i=4) statementC(); else if (i = 5) statementD(); else statementF(); ,switch (i) case 1: statementA();break; case 2: statementB();break; case 3: case 4: statementC();break; case 5: statementD();break; default: statementF(); ,switch选择结构(续) 用switch代替if,57,switch选择结构(续) 例3_2,例_3,58,for循环结构 是Java三个循环语句中功能较强、使用较广泛的一个 for循环可以嵌套 一般语法格式如下 for (start-expression; check-expression; update-expression) /body of the loop; 解释 start-expression完成循环变量和其他变量的初始化工作 check-expression是返回布尔值的条件表达式,用于判断循环是否继续 update-expressio

温馨提示

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

评论

0/150

提交评论