• 1. 内容回顾第二章 Java 语言概述 Java开发环境 Java 程序的编辑、编译和运行(基于JDK和Eclipse) Application程序的特点(主方法,主类,文件命名) Applet程序的特点(主类必须为Applet子类,文件命名,必须import一些系统类,配合浏览器工作) 图形界面程序的特点(定义界面元素,设置其属性,并加入到面板中,事件源注册对应的监听器,实现接口中定义的事件处理方法) 字符界面的输入输出(如何读入单个字符、一行字符)
  • 2. Java 语言基础 3.1 Java程序的构成 3.2 数据类型、变量、常量 3.3 表达式 3.4 流程控制语句教材第3章
  • 3. package --- import --- class 类名1 { //主类 属性定义 方法名1() { ----- } 方法名2() { ----- } } class 类名2 { ------- }3.1 Java程序的构成 一个Java程序可包括若干辅助语句以及若干个类,有一个类是主类(文件以此命名)。 各类之间存在并列、继承和包含关系。这些类通常是在一起协同工作的。例如一个类的方法中需要创建其他类的对象,并操作这个对象。 每个类包含属性和方法的定义,类和方法的定义所有代码用大括号括起。 类的属性和方法通过语句构成。
  • 4. 3.1 Java 程序的构成public class MyJavaApplication{ // 主类类头 static String s = “Hello,Java World!”;// 成员变量 public static void main(String args[])// 成员函数,主函数 { // 执行具体操作的语句 System.out.printIn(UserClass.m_sMessage + s); } } class UserClass{ static String m_sMessage = "Message from User Defined Class"; }
  • 5. 3.1 Java 程序的构成public class MyJavaApplication{ // 主类类头 static String s = “Hello,Java World!”;// 成员变量 public static void main(String args[])// 成员函数,主函数 { // 执行具体操作的语句 System.out.printIn(UserClass.m_sMessage + s); } } class UserClass{ static String m_sMessage = "Message from User Defined Class"; }
  • 6. 语句规则语句种类 说明语句 : 如属性说明、变量说明等 表达式语句 控制语句 (条件、循环、转移) 异常处理语句 块语句(代码块,一组语句用花括号括起来) 语句用分号结束(语句块除外) 代码元素间可以插入任意空格、tab和换行符。 注释 // - - 只限于行内 /* - - - */ 一段注释文本
  • 7. 3.2 数据类型、变量、常量数据类型关键字位数缺省数值取值范围短整型short160-32768 ~ 32767整型int320-2147483648 ~ 2147483647长整型long640-9223372036854775808 ~ 9223372036854775807浮点型float320.0F1.40129846432481707e-45 ~ 3.40282346638528960e+38双精度型double640.0D4.94065645841246544e-324 ~ 1.79769313486231570e+308d字节型byte80-128 ~ 127布尔型boolean8falsetrue , false字符型char16‘\u 0000’‘\u 0000’ ~ ‘\u FFFF’数值类型
  • 8. 数据类型Java程序中所处理数据是将各种数据类型实例化后的数据。 实例化数据的两种形式:常量与变量 基本 数据 类型数值类型整数 byte(8), short(16), int(32), long(64)浮点类型 float (32), double(64)字符类型char (16) 注:Unicode码 布尔类型boolean (true / false)引用 类型类class字符串String,StringBuffer数组 数组类型[ ]
  • 9. 常 量布尔常量:true , false 整型常量 十进制: 以非 0(零) 开头 八进制: 以 0 开头 017 == 15 十六进制:以 0x 开头 0x2f == 47 浮点常量 单精度(32位): 以 F、f 表示,如:8.1f; 双精度(64位) :带 D、d 或不加后缀,如:8.1 字符串常量 用“”表示,如“Hello Java world!”
  • 10. 字符常量,用‘ ’表示,如:‘a’、‘8’以及(转义符)引用方法对应 Unicode 码意义‘\b’‘\u0008’退格‘\t’‘\u0009’水平制表符‘\n’‘\u000a’换行‘\f’‘\u000c’表格符‘\r’‘\u000d’回车‘\”’‘\u0022’双引号‘\’’‘\u0027’单引号‘\\’‘\u005c’反斜线常 量
  • 11. 变 量变量声明(与C相同) 格式:数据类型 变量名 [ = 初始值 ] ; 可见域、生存期(与C相同) 用大括号将若干语句组成语句块,变量的可见域、生存期就是声明它的语句所在的语句块,一旦程序的执行离开了这个语句块,变量就变得没有意义,不能再使用了。
  • 12. 数据类型与说明语句变量说明语句例: (同时给变量赋初值) boolean b = true; short si = 128; int i,j,k = -99; long l = 123456789; char ch = 'J'; char chc = '中' ; float f = 3.1415926; double d = -1.04E-5; Java几乎是将字符串视为基本数据类型 String s = "你好!" ;
  • 13. 引用类型-类定义类(新的数据类型) class MyDate { int day ; int month ; int year ; } 基本数据类型——直接分配内存空间 int i,j,k ; 引用类型 ,如何分配空间?
  • 14. 引用类型-类 MyDate d1 ; MyDate d1 = new MyDate() ;nulld1day month year8820080x01abcdefd1.day = 8 ; d1.month = 8; d1.year = 2008 ;
  • 15. 引用类型—字符串类字符串类代表字符串。每个字符串变量存放字符串类的一个对象;每个字符串常量是该类的一个实例。 构造函数 String s = new String(); String s = new String("abc"); 常用方式 String s = "abc"; 系统自动为该字符串常量创建一个String类的实例。
  • 16. 字符串类与基本类型对照 int x=123; int y=x ; String s1="abc" ; String s2 = s1 ;1231230x01234567nullx y s1 s2"abc"0x01234567
  • 17. 引用类型—字符串String s1 = new String("abc") ; String s2 = new String("abc") ;0x012345670x12345678s1 s2 "abc""abc"s1 == s2 false s1.equals(s2) true
  • 18. 引用类型—字符串String s1 = "abc" ; s1=s1 + "def " ;XXXXX"abc""abcdef"s1
  • 19. 字符串类-String的方法int length() // 返回字符串长度 例:“Java与面向对象程序设计”.length() 的值为13 char charAt(int index) //返回指定位置的字符 例: "Java与面向对象程序设计".charAt(2) 的值为'v' int compareTo(String s2) //字符串比较 int compareToIgnoreCase(String s2)//忽略大小写 boolean equals(Object obj) //判断字符串相等 String toLowerCase() //将字符串转换为小写 (返回新串,不改变原字符串) String toUpperCase() //将字符串转换为大写
  • 20. 字符串类-String的方法String substring(int beginIndex) //取子串 String substring(int beginIndex, int endIndex) int indexOf(String s) //返回串s在当前串中位置 boolean startsWith(String prefix)判断该字符串是否以prefix为前缀。 boolean endsWith(String suffix) 判断该字符串是否以suffix为后缀。 char[] toCharArray() //将字符串转为字符数组
  • 21. Wrapper类-面向对象语言特点基本数据类型Wrapper 类booleanCharactercharBooleanBytebyteShortshortIntegerintLonglongFloatfloatDoubledouble
  • 22. Wrapper类例-Integer属性 static int MAX_VALUE 返回int型数据的最大值 static int MIN_VALUE 返回int型数据的最小值 构造方法 Integer(int value) Integer(String s) 方法 int intValue() double doubleValue() String toString() static String toString(int i) static Int parseInt(String s) static Integer valueOf(String s)静态方法
  • 23. 类型转换-利用类/对象方法利用类方法(静态方法) Integer.parseInt("23") //返回整数23 Integer.toString(23) //返回字符串"23" Double.parseDouble("12.3") Double.toString(12.3) 利用对象方法 Double d ; String s; d=new Double(12.3) ; //构造方法 s= d.toString(); Double.valueOf("12.3").doubleValue() ; //返回...
  • 24. Integer 例-面向对象的方法public class Test { public static void main(String[ ] args) { Integer i=new Integer(256); Integer j=new Integer("256"); System.out.println(i.intValue()); System.out.println(j.doubleValue()); System.out.println("i= "+ i.toString()); System.out.println(Integer.parseInt("100")); int k ; k=Integer.valueOf("100”).intValue(); System.out.println(k); } }
  • 25. Java标识符标识符语法要求 标识符由字母、数字、下划线’ _ ’ 和美元符号 ‘$ ’ 组成; 以字母、下划线’ _ ’ 或美元符号 ‘ $ ’ 开头;(不能以数字开头) 大小写有区别。 通常要求见名知义,如: TextField input,output; Label prompt;
  • 26. Java 标识符约定俗成规则类名(接口名) — 名词 第一字母大写,每一单词首字母大写。 例:AccountBook 方法名 — 动词 第一字母小写,每一单词首字母大写。 例:balanceAccount() 变量名 — 名词 第一字母小写,每一单词首字母大写。 常量名 全部大写,单词间用下划线分开 . 例:HEAD_COUNT
  • 27. 例3-2 GetNumber.java import java.io.*; public class GetNumber{ public static void main(String args[]){ int i = 0; String s=""; System.out.print("请输入一个整数: "); try{ BufferedReader in = new BufferedReader( new InputStreamReader( System.in )); s = in.readLine(); i = Integer.parseInt(s); } catch( IOException e){};
  • 28. 例3-2 GetNumber.java System.out.print("你输入了数字: " + i); System.out.println("\t,对吗? ");} }
  • 29. 例3-3 GetDouble.java import java.applet.*; //必须引入的类; import java.awt.*; //必须引入的类; import java.awt.event.*; //必须引入的类; public class GetDouble extends Applet implements ActionListener{ Label prompt; TextField input; double d = 0;
  • 30. public void init(){ prompt = new Label(“请输入一个浮点数:"); input = new TextField(10); add(prompt); add(input); input.addActionListener(this); } public void paint(Graphics g){ g.drawString(“你输入了数据:”+d,10,50);} public void actionPerformed(ActionEvent e){ d=Double.valueOf(input.getText()).doubleValue(); repaint(); } }
  • 31. (本页无文本内容)
  • 32. 3.3 表达式表达式是变量、常量及运算符的组合。 表达式既可单独组成语句,也可出现在条件测试、变量说明、方法调用的参数等场合。 表达式的结果是一个右值,即不能出现在赋值运算的左边,结果类型由参与运算的数据类型确定。 在表达式构建中,运算符起到关键作用。 运算符(实现操作)——运算元(操作对象) 二元运算符、一元运算符、三元运算符
  • 33. 赋值: 变量或对象 = 表达式或常量 String s1 = “string”; String s2 = s1; 类型转换: 自动转换:从占用内存较少的类型转化成占用内存较多的类型; 强制转换:(数据类型)变量名或表达式 byte b = 10 ; int i = -1 ; b = (byte ) i ;赋值与强制类型转换
  • 34. 数据类型转换说明数值类型数据转换: 短类型 → 长类型:默认(系统自动转换) 长类型 → 短类型:强制 int a ; long b ; char c; b = a ; //自动转换 a = ( int ) b ; //强制类型转换 c= (char) a ; a=(int) c //强制类型转换 注:不能滥用强制类型转换,如布尔型与其他数据类型之间不能强制类型转换!byte short int long float double
  • 35. 赋值与强制类型转换3. Java的字符串连接运算符’+’ class Test{ public static void main(String[] args) { int x = Integer.parseInt(“2”); int y = Integer.parseInt(“3”); System.out.println("x+y=" + (x+y) ); } } 注意’+’的二义性,主要由左右两个 操作数决定!!
  • 36. 算 术 运 算双目运算符 +(加) - (减) * (乘) /(除) %(取余) 单目运算符 + +(自增) - -(自减) -(求相反数) 例: int x =2 ; int y = ( + + x ) * 3; 求x=?,y=? 结果: x = 3, y = 9 例: int x =2 ; int y = ( x + + ) * 3 ; 求x=?,y=? 结果: x = 3, y = 6
  • 37. 算 术 运 算例3-4 UseArithmetic.java import java.applet.*; import java.awt.*; import java.awt.event.*; public class UseArithmetic extends Applet implements ActionListener{ Label prompt; TextField input1, input2; Button btn; int a = 0, b = 1; public void init(){ prompt = new Label("请输入两个整数:"); input1 = new TextField(5); input2 = new TextField(5); btn = new Button("计算"); add(prompt); add(input1);add(input2); add(btn); btn.addActionListener(this); }
  • 38. 算 术 运 算public void paint(Graphics g){ g.drawString(a + "+" + b + "="+(a+b), 10, 50); g.drawString(a + "-" + b + "="+(a-b), 10, 70); g.drawString(a + "*" + b + "="+(a*b), 10, 90); g.drawString(a + "/" + b + "="+(a/b), 10, 110); g.drawString(a + "%" + b + "="+(a%b), 10, 130); } public void actionPerformed(ActionEvent e){ a = Integer.parseInt(input1.getText()); b = Integer.parseInt(input2.getText()); repaint();} }
  • 39. 算 术 运 算
  • 40. 关 系 运 算 = =(等于) ! =(不等于) >(大于) <(小于) > =(大于等于) < =(小于等于) 用于比较数据的大小关系,结果为布尔型; int x = 5, y = 7; boolean b = (x == y); System.out.println(“b=" + b );
  • 41. 逻 辑 运 算 &(非简洁与) &&(简洁与) | (非简洁或) || (简洁或) ^(异或) !(取反) 注: &、&& 的区别:非简洁运算符左右两边的表达式总会被运算执行,而简洁运算符不一定; int x=3, y=5; boolean b= x>y && x++ == y-- ; 问 b=?,x=?,y=? b=false, x=3, y=5;
  • 42. 位 运 算 >>(右移) <<(左移) >>>(不带符号的右移) ~(位反) 十进制表示二进制补码表示X < < 2X > > 2X > > > 23000011110011110000000011100000111-1711101111101111001111101100111011
  • 43. 其 他 运 算 符三目条件运算符 x ? y : z 例: int y= x>0? x : -x ; 问函数的作用; 对象运算符 instanceof 用来测定一个对象是否属于某一个特定类或其子类的实例; 例: TextField input; boolean b = input instanceof TextField ;
  • 44. 运算符的优先级与结合性 优先级描述运算符结合性1最高优先级. [ ] ( )左/右2单目运算- ~ ! ++ -- 强制类型转换右3算术乘除运算* / %左4算术加减运算+ -左5移位运算>> << >>>左6大小关系运算< <= > >=左7相等关系运算== != 左8非简洁与&左9异或运算^左10非简洁或|左11简洁与&&左12简洁或| |左13三目条件运算? :右14简单、复杂赋值= 运算符=右
  • 45. 3.4 流程控制语句用来控制程序语句中各语句的执行顺序的语句,是程序中非常关键和基本的部分。 结构化程序的三种基本流程 顺序结构 分支结构(选择结构) if else语句 switch语句 循环结构 while语句 do while 语句 for 语句
  • 46. 条件语句-基本形式例: Test.java import java.io.*; class Test{ public static void main(String[] args) { int ch; try{ System.out.print("请输入一个字符:"); ch = (char)System.in.read( ); // 从键盘输入一个字符 if (ch>='0' && ch<='9') System.out.println("你输入了一个数字字符"); else System.out.println("你输入了一个非数字字符"); }catch(IOException e) { } } }if ( 条件表达式 ) 语句块1; else 语句块2;
  • 47. if (条件1) 语句块1; else if (条件2) 语句块2; else if (条件3) 语句块3; else 语句块n;条件语句-多分支
  • 48. 例3-7 FindMax.java import java.applet.*; import java.awt.*; import java.awt.event.*; public class FindMax extends Applet implements ActionListener{ Label result; TextField in1,in2,in3; Button btn; int a=0,b=0,c=0,max; public void init(){ result = new Label("请输入三个待比较的整数:"); in1 = new TextField(5); in2 = new TextField(5); in3 = new TextField(5); btn = new Button("比较"); add(in1); add(in2); add(in3); add(btn); add(result); btn.addActionListener(this); }
  • 49. 例3-7 FindMax.java public void actionPerformed(ActionEvent e){ a = Integer.parseInt(in1.getText()); b = Integer.parseInt(in2.getText()); c = Integer.parseInt(in3.getText()); if(a>b) if(a>c) max = a; else max = c; else if(b>c) max = b; else max = c; result.setText("三数中最大值是:"+ max); } }
  • 50. switch 语句 switch(表达式) { case 常量值1:语句块 1 ; case 常量值2:语句块2 ; …… default:语句块n; } switch 的常量和表达式可以是整型、字符型及byte型 任何两个case常量值不可以有相同的值。 只能对等式进行测试(即表达式的值是否等于值1、值2...,根据表达式取值的不同转向不同的分支。 每个case分支中的语句块无须用花括号括起来。 每个case分支都只是入口点 可在case语句块中加入break 语句,可立即转出switch语句(不再走后面case流程)。
  • 51. switch 语句
  • 52. switch 语句例import java.io.*; class Test { public static void main(String[] args) { char ch ; try{ System.out.print("请输入成绩(字符):"); ch = (char)System.in.read() ; // 从键盘输入一个字符 switch (ch) { // switch分支 case 'A' : System.out.println("85~100"); break ; case 'B' : System.out.println("60~84"); break ; case 'C' : System.out.println("0~59"); break ; default : System.out.println("输入有误"); } } catch(IOException e) { } } }
  • 53. switch 语句例import java.io.*; class Test { public static void main(String[] args) { char ch ; try{ System.out.print("请输入成绩(字符):"); ch = (char)System.in.read() ; // 从键盘输入一个字符 switch (ch) { // switch分支 case 'A' : System.out.println("85~100"); break ; case 'B' : System.out.println("60~84"); break ; case 'C' : System.out.println("0~59"); break ; default : System.out.println("输入有误"); } } catch(IOException e) { } } }
  • 54. Java的循环语句:whilewhile(表达式){ 循环体 }while 中表达式运行结果应该为boolean类型;(注意同 C的区别)
  • 55. while循环例求两个正整数的最小公倍数 public class Test { public static void main(String[] args) { int result ; int m = Integer.parseInt(“3”); int n = Integer.parseInt(“4”); if (m>0 && n>0) { //检查输入的合法性 result = m>n?m:n ; while(result % m!= 0 || result % n != 0) { result++; } System.out.println("最小公倍数为:"+ result); } else //输入错误 System.out.println("没有输入两个正整数"); } }
  • 56. 例3-8 Narcissus.java public class Narcissus { public static void main(String args[]){ int i,j,k, n = 100, m = 1; while(n<1000){ i = n/100; j = (n - i * 100) / 10; k = n % 10; if((Math.pow(i, 3) + Math.pow(j, 3) + Math.pow(k, 3) == n)) System.out.println("找到第"+(m++)+"水仙花数:"+n); n++; } } }
  • 57. Java的循环语句:do-whiledo { 循环体 } while(表达式)
  • 58. do-while 循环例例3-9 ShowCharValue.java import java.io.*; public class ShowCharValue{ public static void main(String[] args) { char ch; try { System.out.println("请输入一个字符,以'#'结束"); do { ch = (char)System.in.read( ); System.out.println("字符"+ch+"的ASCII码为"+(int)ch); System.in.skip(2); //跳过回车换行键 } while(ch!='#'); }catch(IOException e) { System.err.println(e.toString( )); } } }
  • 59. do-while 循环例
  • 60. Java的循环语句 For语句for ( 表达式1;表达式2;表达式3){ 循环体 } 表达式1:循环变量赋初值 表达式2:循环条件 表达式3:循环变量修正
  • 61. for循环例计算:12+22+32+42+…1002 public class Test { public static void main(String[] args) { int result =0 ; for(int k=1; k<=100 ; k++) result += k*k ; //累加 System.out.println("计算结果为:" + result ) ; } }
  • 62. Java的转移语句break 从一个封闭的语句(如switch 、 循环语句)中跳出来,只跳出当层循环。 break 标号 从包含本break语句的标号指示的封闭语句中跳出来。 while (e1) { while(e2){ ... break ; } } break语句从内循环跳出aaa: while (e1) { while(e2){ ... break aaa ; } } break语句从外循环跳出
  • 63. Java的转移语句continue (用在循环体中) 提前结束所在循环的本次执行(即忽略本循环体中continue语句后面的语句)回到循环的条件测试部分继续执行。 continue 标号 提前结束标号所指循环的本次执行。 通常是某外层循环。 continue不是goto 语句,标号不能指向与本循环并列的循环或其他循环,也不可指向非循环语句。
  • 64. continue语句例例:求2~100中的素数,每行打印5个数字 import java.io.*; public class Test { public static void main(String[] args) { outer_loop: for(int i=2,k=0 ; i<100 ; i++) { for(int j=2 ; j<=Math.sqrt(i) ; j++) { if(i%j==0) continue outer_loop ; } System.out.print(i+"\t"); k++; if(k%5==0) System.out.println(); } //outer_loop } //main } //class
  • 65. Java的转移语句return语句 return 表达式; 程序流程中从方法调用中返回,表达式的值就是调用方法的返回值。 如果方法没有返回值,则return语句中的表达式可以省略。
  • 66. 小 结数据类型的特点(缺省值、内存长度固定、引用数据类型) 表达式 常用运算符 运算符的优先级和结合性 流程控制语句 if else; switch for, while, do while, continue 、break语句
  • 67. 作 业P59. 3-1, 3-4, 3-9 P59. 3-8, 3-10, 3-14, 3-16