《教学课件Java语言程序设计1》由会员分享,可在线阅读,更多相关《教学课件Java语言程序设计1(298页珍藏版)》请在金锄头文库上搜索。
1、1第一章 Java语言概述2程序与程序设计语言 计算机与程序计算机的工作基本原理-存储程序与程序控制指令-指示计算机执行某种操作的命令程序-指令序列,描述让计算机能完成某一任务动作步骤3程序与程序设计语言 程序设计设计语言-编写程序的词法和语法规则 机器语言与汇编语言高级语言-c/c+/java/vb等高级语言编写的程序不能直接被计算机执行转换的两种方式:编译和解释4Java程序设计语言 Java语言产生与发展从Oak到Java软件开发领域内最流行的开发语言之一 5Java程序设计语言 Java语言的特点面向对象;多线程;平台无关性;。 6/*本程序实现一个应用,将“Hello World!”
2、显示*/public class HelloWorld public static void main(String args) / Display Hello java! System.out.println(Hello java!); Java应用程序(Application)7/*本程序实现一个应用,将“Hello World!”显示*/public class HelloWorld public static void main(String args) / Display Hello java! System.out.println(Hello java!); 注释语句的用处仅在于帮
3、助人理解程序。注释语句的用处仅在于帮助人理解程序。8/*本程序实现一个应用,将“Hello World!”显示*/public class HelloWorld public static void main(String args) / Display Hello java! System.out.println(Hello java!); 定义了一个名为HelloWorld的类,每个java应用程序至少定义一个类9/*本程序实现一个应用,将“Hello World!”显示*/public class HelloWorld public static void main(String arg
4、s) / Display Hello java! System.out.println(Hello java!); 每个类包含若干个方法,每个应用程序至少有每个类包含若干个方法,每个应用程序至少有一个一个mainmain方法方法/*本程序实现一个应用,将“Hello World!”显示*/public class HelloWorld public static void main(String args) / Display Hello java! System.out.println(Hello java!); “空的”,main方法没有返回值11/*本程序实现一个应用,将“Hello W
5、orld!”显示*/public class HelloWorld public static void main(String args) / Display Hello java! System.out.println(Hello java!); “静态的”,具体含义且听下月分解12/*本程序实现一个应用,将“Hello World!”显示*/public class HelloWorld public static void main (String args) / Display Hello java! System.out.println(Hello java!); 方法的参数, m
6、ain方法的参数是字符串数组13/*本程序实现一个应用,将“Hello World!”显示*/public class HelloWorld public static void main(String args) / Display Hello java! System.out.println(Hello java!); 系统类,可以干很多活14/*本程序实现一个应用,将“Hello World!”显示*/public class HelloWorld public static void main(String args) / Display Hello java! System.out.
7、println(Hello java!); System的一个成员,用以处理标准输出15/*本程序实现一个应用,将“Hello World!”显示*/public class HelloWorld public static void main(String args) / Display Hello java! System.out.println(Hello java!); 在屏幕上显示一行信息16/*本程序实现一个应用,将“Hello World!”显示*/public class HelloWorld public static void main(String args) / Dis
8、play Hello java! System.out.println( Hello java! ); 实际参数,显示一个字符串17/*本程序实现一个应用,将“Hello World!”显示*/public class HelloWorld public static void main(String args) / Display Hello java! System.out.println( Hello java! ); 程序块的开始和结束18/*本程序实现一个应用,将“Hello World!”显示*/public class HelloWorld public static void
9、main(String args) / Display Hello java! System.out.println( Hello java! ); 分号表示语句结束19/*本程序实现一个应用,将“Hello World!”显示*/public class HelloWorld public static void main(String args) / Display Hello java! System.out.println( Hello java! ); 公共的,而非私有的。20Java小程序(Applet)import javax.swing.*;import java.awt.*;
10、 public class Hello extends JAppletpublic void paint(Graphics g)g.drawString(Hello world, 10,10);21import javax.swing.*;import java.awt.*; public class Hello extends JAppletpublic void paint(Graphics g)g.drawString(Hello world, 10,10);告诉编译器程序所要用的类22import javax.swing.*;import java.awt.*; public clas
11、s Hello extends JAppletpublic void paint(Graphics g)g.drawString(Hello world, 10,10);表示这里定义的Hello类是一种JApplet类23import javax.swing.*;import java.awt.*; public class Hello extends JAppletpublic void paint(Graphics g)g.drawString(Hello world, 10,10);浏览器调用paint方法,进行绘制24import javax.swing.*;import java.a
12、wt.*; public class Hello extends JAppletpublic void paint(Graphics g)g.drawString(Hello world, 10,10);Graphics类的对象g对应于显示区域25import javax.swing.*;import java.awt.*; public class Hello extends JAppletpublic void paint(Graphics g)g.drawString(Hello world, 10,10);26Hello Applet 27JAVA基本开发工具(Java Develop
13、ment Kit, JDK)JAVA平台的三个版本JavaSE-标准版 JavaEE-企业版 JavaME-微型版 Java语言开发环境28集成开发环境集成开发环境是指将程序设计需要的很多功能,例如程序编辑、程序编译、程序调试等等一系列功能都集成到一个软件系统中JcreatorEclipesJava语言开发环境第2章 基本数据类型与表达式 2.1数据类型、常量与变量 p程序中的数据有类型之分,数据类型规定了数据的存储格式、取值范围以及运算方式。 p基本类型数据在程序中体现为常量和变量 31public class circlepublic static void main (String ar
14、gs )int r = 12 ;double area;area = 3.14*r*r;System. out.println (area);常量32public class circlepublic static void main (String args )int r = 12 ;double area;area = 3.14*r*r;System. out.println (area);变量程序中用以存放数据变量程序中用以存放数据33变量 变量先定义后使用定义的目的在于申请分配一块一定大小的内存空间int i;float score;char c1, c2, c3;double ave
15、rage;声明语句中赋初值int i=0;double x=3.5, y=1.2;34整型(byte、short、int、long)字节型(byte),1个字节, 范围-2727-1 短整型 (short),2个字节,取值范围是-215215-1 整型 (int),4个字节,取值范围是-231231-1长整型 (long),8个字节,取值范围是-263263-1byte age;short s;int i;long m;age=127; age=128;s=128;s=32768;i=32768i=2147483648;m=2147483648L;m=2147483648;m=92233720
16、36854775808L35基本数据类型整型常量0-1000+3213210770132-054(八进制整数)0x68-0xFB(十六进制整数)非法整型常量举例:3.03,323,211$2107836浮点型(float、double) 单精度浮点型(float),4个字节双精度浮点型(double) ,8个字节double 具有更大的表示范围,更多的有效数字double x;float y;x=1.5; Xy=1.5; x=1.5f; y=1.5f; 37基本数据类型浮点常量十进制形式+10.625 -6.2 0.0 0.666 -2.0 .32指数形式1.62E3或1.62e3 7.3E-
17、3或7.3e-3 非法浮点常量7.31E-3.21.625E3.0E3e-538字符型(char) 如字符a、A、$、#等 在内存中以相应的Unicode代码存放 转移(转义)字符 n char ch;ch=A;ch=;39基本数据类型逻辑型(boolean)有两个值:true(真),false(假)boolean f;f=true;40字符串 字符串不是Java基本数据类型用String类来表示字符串System.out.println(这里有个双引号 );System.out.println(welcome!n to HDU);2.2 输入与输出处理 p程序一般需要接收键盘输入的数据,而运
18、算的结果也往往需要输出到屏幕上。pJava提供了一组方法来实现输入和输出处理。System.out.print()方法System.out.println()方法前者将光标停留在输出内容后,而后者将光标移到下一行上。使用print()时,下一个输出会出现在同一行紧跟在前一个输出之后,使用println()时,下一个输出则被放到下一行上。class testpublic static void main(String args)int a=2,b=3;System.out.print(a=);/输出a=,光标停止在=后System.out.println(a); /输出2,光标移到下一行Syst
19、em.out.print(b=);/输出b=,光标停止在=后System.out.println(b);/输出3,光标移到下一行System.out.println (a= + a+ ,b= + b); /输出a=2,b=3System.out.println (a+b); /输出5System.out.printf(格式控制串,表达式1,表达式2)l整型数据的格式控制 若有int a=2,b=3; System.out. printf (“%d %d”, a, b);2 3System.out. printf (“a=%d, b=%d”, a, b);a=2,b=3 System.out.
20、printf (a=%5d, b=%2d, a, b);a= 2,b= 3System.out.printf()方法 l实型数据的格式控制 System.out.printf (e=%f,pi=%f,2.718,3.1415926);e=2.718000,pi=3.141593System.out.printf (%e,%e,271.8,314159.2);2.718000e+02,3.141592e+05System.out.printf (e=%7.2f,pi=%.3f,2.718,3.1415926); e= 2.72,pi=3.142 l字符型数据的格式控制 char ch=a;Sys
21、tem.out. printf (%c,%c, ch,ch-32); a,Al布尔型数据的格式控制 boolean flag=true;System.out. printf (%b, flag); trueSystem.in.read()方法Scanner类的方法从J2SE 5.0版本开始,Java提供了Scanner类,为数据输入程序的编写带来了很大的方便。调用Scanner类的相应方法,可从键盘输入各种基本类型和字符串类型的数据。import java.io.*; class test public static void main(String args) throws IOExcept
22、ion char c; c=(char)System.in.read(); System.out.printf(%c,%c , c-1,c+1); import java.util.Scanner;class ex2_4public static void main(String args)int a;double b;Scanner kb=new Scanner(System.in);/创建Scanner对象a=kb.nextInt();/输入一个整数,并赋值给ab=kb.nextDouble();/输入一个实数,并赋值给bSystem.out.printf(%d+%.2f=%.2f,a,b
23、,a+b);import java.util.Scanner;public class ex2_5public static void main(String args)Scanner sc=new Scanner(System.in);int t,h,m,s;t=sc.nextInt();h=t/3600;m=(t-3600*h)/60;s=t%60;System.out.printf(%02d:%02d:%02d,h,m,s);2.3运算符与表达式p表达式是指由运算符和运算对象组成的运算式子p运算符指明对运算对象所进行的运算 52赋值表达式运算符 =赋值表达式 = int s=5; s=s
24、+7; x+1=5;(X) 5=5 (X)53算术运算加法运算符 +减法运算符 - 乘法运算符 *除法运算符 /两个整数数据作除法运算,结果一定是整数double a=1/4; /执行后a的值为0double b=1.0/4; /执行后b的值为0.2554算术运算求模运算符% 计算余数若int x=782;那么x/100=? x%10=? x/10%10=?import java.util.Scanner;class ex2_6 public static void main(String args) Scanner kb=new Scanner(System.in); int x,a,b,c
25、,s; x=kb.nextInt(); a=x/100; b=x/10%10; c=x%10; s=a*a*a+b*b*b+c*c*c; System.out.printf(%d ,s); 56算术运算自增运算符+(单目运算符)a+;+a;作为独立的语句,都等同于a=a+1作为表达式的一部分,含义不同a=1;b=a+;/先将a的值送给b,a的值再自增1c=+a;/先a的值再自增1,将a的值送给import java.util.Scanner;class ex2_6 public static void main(String args) Scanner kb=new Scanner(Syste
26、m.in); int x,a,b,c,s; x=kb.nextInt(); a=x/100; b=x/10%10; c=x%10; s=a*a*a+b*b*b+c*c*c; System.out.printf(%d ,s); 58算术运算自减运算符-(单目运算符)a-;-a;作为独立的语句,都等同于a=a-1作为表达式的一部分,含义不同a=1;b=a-;/先将a的值送给b,a的值再自减1c=-a;/先a的值再自减1,将a的值送给cclass ex2_7public static void main(String args)int a=2,b=2,x,y;x=+a+2;y=b-+2;System
27、.out.printf(x=%d,y=%d,a=%d,b=%d,x,y,a,b);60类型转换自动转换范围由小向大,自动转换int a=100; float b=a;运行结果100.0 强制转换不能实现自动类型转换的就必须采用强制类型转换float x=131137.89f;int a=(int)x; /a=13113761关系运算与逻辑运算关系运算符比较运算,计算结果“true”或“false”大于 大于等于 =小于 小于等于 b; a+bb-c ba;返回结果为一个布尔类型的值优先级低于算术运算符63关系运算与逻辑运算逻辑运算符逻辑与 & 操作数都为true,结果为true;否则结果为fa
28、lse逻辑或 | 有一个操作数为true,结果为true;否则结果为false逻辑非 ! 取反,操作数为true,结果为false 操作数为false,结果为trueimport java.util.Scanner;class ex2_8public static void main(String args)int a,b=0;boolean f1,f2;Scanner kb=new Scanner(System.in);a=kb.nextInt();f1=a0&+b=2;f2=a0;System.out.printf(f1=%b,f2=%b,a=%d,b=%d,f1,f2,a,b);65算术
29、运算优先级-* / %+ -= result=14+8/266算术运算结合性相同优先级,运算次序由结合性决定 + - * %是左结合(自左向右运算)int a=8,b=2,c=4;double x=a/b/c 赋值运算是右结合a=b=c+1; 67算术运算扩展赋值运算是算术运算符与赋值运算符的合成 +=、 -=、 *=、 /=、%=a += 5; 等价于 a=a+5;a/= b+5; 等价于 a=a/(b+5);public class ex2_10 public static void main(String args) int a=81;int b=4;double c,d;c=a/b;d
30、=(double)a/b;System.out.printf(c=%.3fn,c);System.out.printf(d=%.3fn,d);第3章 程序流程70import java.util.*;class ex3_1 public static void main(String args)Scanner kb=new Scanner(System.in);int a,b,c,max;a=kb.nextInt();b=kb.nextInt();c=kb.nextInt();max=a;if(maxb) max=b;if(maxc) max=c;System.out.printf(最大值为%
31、d,max);71class ex3_2public static void main(String args)Scanner kb=new Scanner(System.in);int a,b,result;a = (int)(Math.random() * 10);b = (int)(Math.random() * 10);System.out.printf(%d+%d=?,a,b);result=kb.nextInt();if(a+b=result)System.out.printf(对了!);else System.out.printf(错了!);72import java.util.
32、Scanner;public class Scorestatic int PASS=60; public static void main(String args) Scanner scan=new Scanner(System.in); System.out.print(“请输入成绩:); int score=scan.nextInt();System.out.println(“你输入的成绩是“+score); if(scorePASS)System.out.println(“很遗憾,这个成绩没有及格。 “); elseSystem.out.println(“祝贺你,这个成绩及格了。“);
33、System.out.println(“再见!“); 73import java.util.Scanner;public class Score2static int PASS=60; public static void main(String args) Scanner scan=new Scanner(System.in); System.out.print(“请输入成绩:); int score=scan.nextInt();System.out.println(“你输入的成绩是“+score); if(score 60)if( count 60)if( count 80 )Syste
34、m.out.println(“通过”);elseSystem.out.println (“不及格”);switch语句switch语句是多分支的开关语句,它的一般格式如下switch (表达式) case 判断值1: 语句块1 case 判断值2: 语句块2 case 判断值n: 语句块n default:语句块n+1 import java.util.Scanner;public class testswitchpublic static void main(String args) Scanner scan=new Scanner(System.in); System.out.print(
35、请输入一个整数:); int type=scan.nextInt();switch(type)case 1: System.out.println(你好!); break;case 2: System.out.println(早上好!); break;case 3: System.out.println(晚上好!); break;case 4: System.out.println(再见!); break;default:System.out.println(啊,什么啊?); import java.util.Scanner;public class testswitchpublic stat
36、ic void main(String args) Scanner scan=new Scanner(System.in); System.out.print(请输入一个整数:); int type=scan.nextInt();switch(type)case 1: case 2: System.out.println(早上好!); break;case 3: System.out.println(晚上好!); case 4: System.out.println(再见!); break;default:System.out.println(啊,什么啊?); import java.util
37、.Scanner;public class Gradepublic static void main(String args) Scanner scan=new Scanner(System.in); System.out.print(输入成绩(0-100):); int grade=scan.nextInt(); grade/=10; switch(grade)case 10: case 9: System.out.println( A); break;case 8: System.out.println( B); break;case 7: System.out.println( C);
38、break;case 6: System.out.println( D); break; default: System.out.println(F); break; 79n几点注意1.switch语句表达式的结果必须是byte, char, short, int 类型2.case后面只能是常量3.表达式的结果依次与每个case子句比较4.break语句用于跳出switch语句5.default子句是可选的80switch 语句m=1,2,3时以下switch语句输出结果是? switch(m) case 1: System.out.println(1); case 2: System.out
39、.println(2);break;default: System.out.println(e);图 3-9 Java的三种循环语句流程3.3、循环语句、循环语句 while循环while (布尔表达式) 循环体;例38 输出使下列不等式成立的n的最小值。class ex3_7public static void main(String args)int n=0;double s=0;while(s=0) s=s+grade; num+; grade=kb.nextDouble();if(num0) System.out.printf(%.1f,s/num); do-while循环do 循环体
40、; while(布尔表达式);循环体布尔表达式falsetrue循环终止import java.util.*;class ex3_11public static void main(String args)Scanner kb=new Scanner(System.in);int num,count;num=kb.nextInt();count=0;donum=num/10;count+;while(num!=0);System.out.printf(%d,count);例311 输入一个自然数,统计该数的位数。for循环 for (int count=10;count0;count-) Sy
41、stem.out.println(“count”); for (表达式1;表达式2;表达式3) 循环体;表达式1:初始化部分表达式2:条件判断表达式3:调整控制循环变量 表达式1表达式2true循环结束循环体表达式3false90例313输入10个学生的成绩,输出最高分。import java.util.*;class ex3_13apublic static void main(String args)Scanner kb=new Scanner(System.in);double max,grade;int i;max=-1;for(i=0;imax) max=grade;System.o
42、ut.printf(%.1f,max);循环的嵌套一个循环的循环体中包含另一个循环时,就构成循环嵌套 p输入n,输出n层用字符*构成的塔。 * * * * * *break和continue语句break语句-用于终止循环语句的执行p输入一个正整数,判断它是否为素数。素数指只能被1和自身整除的自然数。import java.util.*;class ex3_15public static void main(String args)Scanner kb=new Scanner(System.in);int i,n;n=kb.nextInt();for(i=2;in/2) System.out.
43、printf(Yes!);else System.out.printf(No!);break和continue语句带标号的break语句在嵌套循环结构中,跳出标号所指定的循环。 p 输入正整数n,输出方程的一对正整数解 。import java.util.*;class aaapublic static void main(String args)int n,a,b;Scanner kb=new Scanner(System.in);n=kb.nextInt();outer:for(a=1;aMath.sqrt(n);a+)for(b=1;bMath.sqrt(n);b+)if (a*a+b*
44、b=n) System.out.printf(%d,%dn,a,b); break outer;break和continue语句continue语句跳过本轮循环的剩余语句 import java.util.*;public class ex3_17public static void main(String args)Scanner sc=new Scanner(System.in);int a,i,m,k;m=1;k=0;for(i=1;i=10;i+) a=sc.nextInt(); if(a=0) continue; m=m*a; k+;System.out.printf(“m=%d,k
45、=%d”,m,k);break和continue语句带标号的continue语句 执行标号所指向的循环结构的下一次循环class ex3_18 public static void main(String args)Loop:for (int i=2;i50 ; i+ )for ( int j=2 ; ji ; j+) if (i%j=0 )continue Loop ;System.out.printf (%3d,i);3.5、方法的使用方法的使用 方法的定方法的定义 方法的返回值类型方法的参数 class ex3_19static int fac( int n )int m = 1;for
46、( int i=1; i=n; i+ ) m*=i;return m;static void printstar(int k)for(int i=0;ik;i+) System.out.print(*); System.out.println();static void hello()System.out.println(Hello!);public static void main(String args)int s; s=fac(4);System.out.printf(%dn,s);printstar(5);hello();方法的方法的调用与返回用与返回 调用与返回的流程调用与返回的流程
47、 参数传递参数传递 class ex3_19static int fac( int n )int m = 1;for( int i=1; i=n; i+ ) m*=i;return m;static void printstar(int k)for(int i=0;ik;i+) System.out.print(*); System.out.println();static void hello()System.out.println(Hello!);public static void main(String args)int s; s=fac(4);System.out.printf(%d
48、n,s);printstar(5);hello();p输入两个数,输入两个数,判断它们是否是亲和数判断它们是否是亲和数 如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。 import java.util.*;class ex3_20static int divsum( int n )int s = 0;for( int i=1; in; i+ )if( n%i = 0 ) s+=i;return s;public static void main(String args)Scanner sc=new Scanner(System.in);int a,b;a=sc.next
49、Int();b=sc.nextInt();if(a=divsum(b)&b=divsum(a) System.out.print(Yes);else System.out.print(No);p参数的按值传递 class ex3_21public static void main (String args) int b = 0;modify (b); System.out.println(b=+b); public static void modify (int a)a+;p变量的作用范围 class ex3_22static double round( double r )double s;
50、s=3.1416*r*r;return s;public static void main(String args)double x=1;round(x);System.out.printf(%.2f,s);/有语法错误p方法的嵌套调用 public class ex3_23 static int fact(int n)int f=1;for(int i=1;i=n;i+)f=f*i;return f;static int comb(int m,int n)return fact(m)/fact(n)/fact(m-n);public static void main(String args)
51、 System.out.printf(%d,comb(5,3); p用递归方法计算阶乘 public class ex3_24public static void main(String args)System.out.println(Fac of 4 is + fac( 4) );static long fac( int n )if( n=0 | n=1) return 1;else return fac(n-1) * n;第4章 数组1054.1、一维数组、一维数组 106p一维数组的声明数组元素类型标识符 数组名 ;数组元素类型标识符 数组名;double score ;boolean
52、married ; int a ,b ,c ; double score;boolean married; int a,b,c;p一维数组的创建在Java语言中,声明数组时不能指定它的长度,而是利用new 来为数组型变量分配内存空间。int a;a=new int8;a7a6a5a4a3a2a1a0p一维数组的创建数组元素的初始值数值型:0字符型:u0000逻辑型:false复合型:null分配了空间的数组,其长度是不会改变的,除非再次分配空间。p一维数组的创建class Mainpublic static void main(String args)double a;a=new double
53、8;int i;for(i=0;ia.length;i+)System.out.println(ai);p一维数组的初始化:int a=2,4,5,7;char ch=a, d, ?;a3a2a1a07542ch2ch1ch0?dap一维数组的引用数组元素的引用方式:数组名下标a2ai+1aa2a3a2a1a07542p顺序查找。import java.util.*;class Mainpublic static void main(String args) Scanner sc=new Scanner(System.in); int a=34,25,78,69,13,97,86,38,62,
54、9;p二分查找。86a0a1a2a3a4a5a6a7a8a99132534386269788697第一轮第一轮leftmid right第二轮第二轮leftmidright第三轮第三轮leftrightmidp二分查找 26a0a1a2a3a4a5a6a7a8a99132534386269788697第一第一轮lmr第二第二轮lmr第三第三轮l,mr第四轮第四轮l,r,m第五轮第五轮rlimport java.util.*;class Main public static void main(String args) int a=9,13,25,34,38,62,69,78,86,97; Sc
55、anner sc=new Scanner(System.in); int searchnum=sc.nextInt(); int index=-1,left,mid,right; left=0;right=a.length-1; while(left=right) mid=(left+right)/2; if(amid= searchnum) index=mid; break; else if(amid searchnum) left=mid+1; else right=mid-1; if(index=-1) System.out.println(不存在!);else System.out.p
56、rintln(在数组中位置是 + index); p冒泡排序class Main public static void main(String args) int a=37,28,51,13,64,8,42; int i,j,n,temp; n=a.length; for(j=1;jn;j+) 第i趟排序 for (i=0;in;i+) System.out.print(ai+ ); p冒泡排序class Main public static void main(String args) int a=37,28,51,13,64,8,42; int i,j,n,temp; n=a.length
57、; for(j=1;jn;j+) for(i=0;i ai+1)temp=ai;ai=ai+1;ai+1=temp; for (i=0;i 0) System.out.print(汪!);numOfBarks = numOfBarks - 1;140类的静态方法类的静态方法class Dog public static void main(String args)Dog.bark(3);static void bark(int numOfBarks) while(numOfBarks 0) System.out.print(汪!);numOfBarks = numOfBarks - 1;141
58、类的静态方法类的静态方法class Dog static void bark(int numOfBarks) while(numOfBarks 0) System.out.print(汪!);numOfBarks = numOfBarks - 1;class testDogpublic static void main(String args)Dog.bark(4);1421425.4、包与基础类、包与基础类 143包(包(PackagePackage)的含义)的含义将类分装在不同的包中,可以避免命名冲突包是分层管理的,其含义类似于文件夹同一包中的类在默认情况下可以互相访问144指定类所属的包
59、指定类所属的包-Package-Package语句语句Java源文件的第一条语句, 前面只能有注释或空行一个文件中最多只能有一条如果源文件中没有,则文件中声明的所有类属于一个默认的无名包package p1;public class Dog public void bark(int numOfBarks) while(numOfBarks 0) System.out.print(汪!);numOfBarks = numOfBarks - 1;145使用包中的类使用包中的类import p1.Dog;class testDogpublic static void main(String args
60、)Dog d=new Dog();d.bark(4);class testDogpublic static void main(String args)p1.Dog d=new p1.Dog();d.bark(4);146JavaJava基础类基础类pStringString类类 你输入的是Java吗?import java.util.*;public class Main public static void main(String args)Scanner sc=new Scanner(System.in);String s1=new String(Java);String s2=sc.n
61、extLine();if( )System.out.println(输入的是Java:);elseSystem.out.println(输入的不是Java:();147JavaJava基础类基础类pStringString类类 你输入了多少个Java呢?import java.util.*;public class Main public static void main(String args)Scanner sc=new Scanner(System.in);String str=sc.nextLine();String substr = “Java;int countSubstr = 0
62、;/*/System.out.printf(有%d个,countSubstr);148JavaJava基础类基础类pStringString类类 你输入是回文吗?import java.util.*;public class Main public static void main(String args)Scanner sc=new Scanner(System.in);String str=sc.nextLine();/*/客上天然居;居然天上客客上天然居;居然天上客149JavaJava基础类基础类pStringString类类 变了吗?!public class Main public
63、 static void main(String args)String s1=new String(Java);String s2=s1.toUpperCase();System.out.println(s1);System.out.println(s2);p1JavaJAVAp1150JavaJava基础类基础类pStringBufferStringBuffer类类 这个可以变!这个可以变!public class Main public static void main(String args)String s1=new String(Java);StringBuffer sf=new
64、StringBuffer(s1);sf.append(程序设计);System.out.println(sf);sf.insert(0, 我喜欢);System.out.println(sf);151JavaJava基础类基础类pMath Math 类类public class Main public static void main(String args)System.out.println(Math.PI);System.out.println(Math.sin(Math.PI/6);long x=Math.round(5.86);System.out.println(x);System
65、.out.println(Math.pow(2,10);152JavaJava基础类基础类pMath Math 类类public class Main public static void main(String args)System.out.println(Math.PI);System.out.println(Math.sin(Math.PI/6);long x=Math.round(5.86);System.out.println(x);System.out.println(Math.pow(2,10);153第6章 继承与对态1541546.1、继承、继承 155155什么是继承什么
66、是继承在已有类的基础上定义新的类子类继承父类的成员,同时子类可以有新的成员继承的好处在于:重用代码、简化程序设计、提高编程效率 156156JavaJava的继承的继承class Point int x,y; double distanceTo() return Math.sqrt(x*x+y*y); class NamePoint extends PointString name;NamePoint(String name, int x, int y) this.x=x;this.y=y;this.name=name;void print() System.out.printf(点%s(%d
67、,%d),name,x,y);Java的继承只允许单继承157157JavaJava的继承的继承public class testpublic static void main(String args) NamePoint q=new NamePoint(A,-2,3);q.print();System.out.printf(到原点的距离为%.2fn,q.distanceTo();158158super关键字关键字 class Point int x,y; Point(int x,int y) this.x=x; this.y=y; Point() this.x=0; this.y=0; do
68、uble distanceTo() return Math.sqrt(x*x+y*y); void print() System.out.printf(%d,%d, x,y); class Circle extends Point double r; Circle(int x,int y,double r) super(x,y); this.r=r; Circle() r=0; void print() super.print(); System.out.printf(%.2fn, r); public class test public static void main(String arg
69、s) Circle c1=new Circle(-2,3,1.5); c1.print(); Circle c2=new Circle(); c2.print(); 159159子类对象与父类对象子类对象与父类对象 class Employee String name; Employee(String name) this.name=name; void show() System.out.println(name+ is a Employee); class Manager extends Employee Manager(String name) super(name); void sho
70、w() System.out.println(name+ is a Manager); 160160子类对象与父类对象子类对象与父类对象 public class Main public static void main(String args)Employee e1,e2;e1=new Employee(tom);e2=new Manager(john);e1.show();e2.show();Manager m1,m2;m1=new Manager(johnny);m1.show();/m2=new Employee(“Wan);/m2.show(); 父类对象Tom子类对象John父类对
71、象变量e1父类对象变量e2子类对象变量m1子类对象变量m2父类对象Wan子类对象johnnyX1611616.2、类的访问控制类的访问控制 162162类的访问控制符类的访问控制符缺省规定这个类只能被同一个包中的类使用,而不能被其他包中的类使用,这种访问特性又称为包访问性 public表明这个类可以被所有的类使用,就可以创建这个类的对象或用这个类派生新类. 163163类成员的访问控制符类成员的访问控制符privateprivate成员只能被类自身的方法访问缺省无访问控制符的成员可被类自身的方法所访问,也可以被同一个包的其他类访问。protectedprotected成员,可被类自身的方法、同
72、一个包的其他类访问,还可被其子类(同包及不同包的子类)所继承。 public没有限制1641646.3、抽象类与接口抽象类与接口 165165抽象类与抽象方法抽象类与抽象方法用abstract来修饰的类称为抽象类用abstract来修饰的的方法称为抽象方法abstract class Shapepublic abstract double area();public abstract double circumference();166166抽象类与抽象方法抽象类与抽象方法抽象方法: 仅仅声明了方法,但未实现p有访问修饰词p返回值类型p方法名p参数列表p无方法体public abstract
73、double area() /错误!167167抽象类与抽象方法抽象类与抽象方法抽象类p抽象类不能实例化(创建对象)Shape a=new Shape();/错!p抽象类可有零到多个抽象方法p非抽象类继承抽象类时,必须实现所有的抽象方法;168168class Circle extends Shape public static final double PI = 3.14159265358979323846;protected double r;public Circle(double r) this.r = r;public double getRadius()return r;publi
74、c double area() return PI * r * r;public double circumference() return 2 * PI * r;169169class Rectangle extends Shape protected double w, h;public Rectangle(double w, double h) this.w = w;this.h = h;public double getWidth() return w; public double getHeight() return h; public double area() return w
75、* h; public double circumference() return 2 * (w * h); 170170public class ShapeDemo public static void main(String args) Shape shapes = new Shape3;shapes0 = new Circle(2.0);shapes1 = new Rectangle(1.0, 3.0);shapes2 = new Rectangle(4.0, 2.0);double total_area = 0;for (int i = 0; i shapes.length; i+)
76、total_area += shapesi.area();System.out.println(total_area);171171抽象类与抽象方法抽象类与抽象方法抽象类p抽象类不能实例化(创建对象)Shape a=new Shape();/错!p抽象类可有零到多个抽象方法p非抽象类继承抽象类时,必须实现所有的抽象方法;172172接口p接口可以看作一种特殊的抽象类;p接口中的变量默认: public static finalp接口中的方法都是未实现的抽象方法;interface Shapeabstract void draw();abstract void erase();public in
77、terface Figure double pi=3.14159; void showPerimeter();void showArea(); 173接口的声明与实现 pJava程序中的每个类只允许有一个直接父类; p利用接口实现多重继承。 interface CanSwim void swim(); interface CanFly void fly(); class Duck implements CanSwim, CanFly public void swim() public void fly() 第7章 异常处理什么是异常如何处理异常如何声明异常如何自定义异常类本章要点什么是异常程序
78、在运行过程中的不正常情况。import java.util.*;class Ex7_1 public static void main(String args) Scanner s=new Scanner(System.in); int i=s.nextInt(); int j=s.nextInt(); int k = i/j; System.out.println(k); 0 0Exception in thread main java.lang.ArithmeticException: / by zeroat Main.main (Main.java:7)a bException in t
79、hread main java.util.InputMismatchExceptionat java.util.Scanner.throwFor(Unknown Source)at java.util.Scanner.next(Unknown Source)at java.util.Scanner.nextInt(Unknown Source)at java.util.Scanner.nextInt(Unknown Source)at Main.main(Main.java:5)异常处理类体系结构错误异常不检查异常已检查异常try /可能发生异常的程序代码块catch(Exceptiontyp
80、e1 e) /对Exceptiontype1类型的异常进行处理catch(Exceptiontype2 e) /对Exceptiontype2类型的异常进行处理finally /退出异常处理程序代码块(不管有无异常均执行,用来释放资源等)异常处理语法异常处理实例import java.util.*;public class Ex7_2 public static void main(String args) Scanner s=new Scanner(System.in); int i=s.nextInt(); int j=s.nextInt(); try int k = i/j; Syste
81、m.out.println(k); catch(Exception e) System.out.println(e.getMessage(); finally System.out.println(finally!); 10 0/ by zerofinally!用throws语句声明异常import java.io.IOException;class Ex7_3 static char getChar() throws IOException char c = (char)System.in.read(); return c; public static void main(String ar
82、gs) try char c = getChar(); System.out.println(c); catch (IOException e) System.out.println(e); 用throw抛出异常class Ex7_4 static double sqrt(double x) if (x 10)throw new MyException(a);System.out.println(Normal exit);public static void main(String args) try compute(1);compute(20); catch (MyException e)
83、System.out.println(Caught + e);Called compute(1)Normal exitCalled compute(20)Caught MyException20异常处理原则:在当前方法中使用try-catch语句捕获并处理异常;方法被覆盖时,覆盖它的方法必须抛出相同的异常或异常的子类;如果父类方法抛出多个异常,那么子类覆盖方法必须抛出那些异常的一个子集。小结第8章 输入输出什么是输入输出Java用数据流来实现输入输出每个数据都必须等待排在它前面的数据读入或送出之后才能被读写,每次读写操作处理的都是序列中剩余的未读写数据中的第一个,而不能随意选择输入输出的位置。
84、输入流与输出流 p输入流:可用于从键盘或文件中读入数据p输出流:可用于将数据写到文件,或显示到屏幕上字节流和字符流 p字节流字节流:在输入输出过程中以字节为单位。p字符流字符流:在输入输出过程中以字符为单位。java语言6A 61 76 61 D3 EF D1 D48个字节; 6个字符以字节流的方式读: 读8次。以字符流的方式读: 读6次。标准输入与标准输出pSystem.in,字节输入流对象pSystem.out,字节输出流对象import java.io.*;class Mainpublic static void main(String args) throws IOException
85、char ch;int count=0;do ch=(char)System.in.read(); if(ch=0&ch=a&ch=A&ch=Z)i=ch-A; ai+;for(i=0;ia.length;i+) System.out.println(char)(a+i)+:+ai);f.close();(1)编写一个方法get(),该方法返回1000以内的自恋数的个数。自恋数指一个三位数,其各位数字立方和等于该三位数。如371=33+73+13,371就是一个自恋数;(2)在考生目录下新建一个文件jd.dat;(3)调用get方法,将返回值以字符形式写入文件jd.dat。import jav
86、a.io.*;public class JDesignpublic static void main(String args) throws IOException/.static int get()/.import java.io.*;public class JDesignpublic static void main(String args) throws IOExceptionFileWriter FileWriter out=new FileWriter(jd.dat);out.write( get()+ );out.close();static int get()int i,j,k
87、,count=0;for(int n=100;n1000;n+)i=n/100;j=n/10%10;k=n%10;if(i*i*i+j*j*j+k*k*k=n) count+;return count;第9章 图形用户界面 2009.1、Swing组件 201图形用户界面编程概述 p两个用于图形用户界面编程的包:AWT和Swing p图形界面上显示的各种对象都称为GUI控件组件:构成图形界面的基本元素,不能容纳其他组件,如按钮、文本框等 容器:用来容纳其他组件的区域,如面板、框架等。有的容器还可以容纳其它容器。 202框架(Frame) import java.awt.*;import jav
88、ax.swing.*;class SimpleFrame extends JFrameprivate JLabel lb;SimpleFrame() setTitle(框架示例);setLocation(300,200); setSize(300,200);setDefaultCloseOperation(EXIT_ON_CLOSE); lb = new JLabel(“我爱Java, SwingConstants.CENTER);Container c = getContentPane();c.add(lb); 203框架(Frame) import java.awt.*;import ja
89、vax.swing.*;class SimpleFrame extends JFrameprivate JLabel lb;SimpleFrame() setTitle(框架示例);setLocation(300,200); setSize(300,200);setDefaultCloseOperation(EXIT_ON_CLOSE); lb = new JLabel(“我爱Java, SwingConstants.CENTER);add(lb); 204框架(JFrame) class SimpleFrameDemopublic static void main(String args)S
90、impleFrame frm = new SimpleFrame();frm.setVisible(true);import javax.swing.*;import java.awt.*;class ButtonFrame extends JFrameprivate JButton btnChinese,btnEnglish;ButtonFrame()setTitle(按钮示例);setBounds(300,200,300,200);btnChinese = new JButton(中文);btnEnglish = new JButton(English);JPanel p = new JP
91、anel();p.add(btnChinese);p.add(btnEnglish);setContentPane(p);setDefaultCloseOperation(EXIT_ON_CLOSE);class ButtonFrameDemopublic static void main(String args)ButtonFrame frm = new ButtonFrame();frm.setVisible(true);206构造方法说明JTextField( )创建一个文本框JTextField(int n)创建一个列宽为n的空文本框JTextField(String s)创建一个文本
92、框,并显示字符串sJTextField(String s,int n)创建一个文本框,并以指定的字宽n显示字符串s方法说明void setFont(Font f)设置字体void setHorizontalAlignment(int alig)设置文本的水平对齐方式(LEFT、CENTER、RIGHT)void addActionListener(ActionListener e)添加指定的动作事件监听程序207构造方法说明JTextArea ()创建一个文本区JTextArea (int n,int m)创建一个具有n行m列的文本区JTextArea(String s)创建一文本区,并显示字
93、符串sJTextArea(String s,int n,int m)创建一个文本区,并以指定的行数n和列数m显示字符串s方法说明void insert(String str,int pos)在文本区的指定位置插入指定的文本void append(String str)将指定的文本添加到文本区中内容的末尾void replaceRange(String str, int start, int end)将文本区中指定范围的文本用指定的新文本替换int getRows( )返回文本区的行数void setRows(int rows)设置文本区的行数import javax.swing.*;class
94、 TextFrame extends JFrameprivate JLabel lblName, lblRemark;private JTextField tf;private JTextArea ta;TextFrame()lblName = new JLabel(名称:);lblRemark = new JLabel(备注:);tf = new JTextField(20);ta = new JTextArea(5,20);/5行20列ta.setLineWrap(true); ta.setWrapStyleWord(true); setTitle(文本框与文本区示例);setBounds
95、(300,200,300,170);setDefaultCloseOperation(EXIT_ON_CLOSE);JPanel p = new JPanel();p.add(lblName); p.add(tf);p.add(lblRemark); p.add(ta);setContentPane(p);class TextFrameDemo public static void main(String args)TextFrame frm = new TextFrame();frm.setVisible(true);2099.2、布局管理器 210布局管理器决定组件在界面中所处的位置和大小
96、 创建一个布局管理器对象将布局管理器对象指定为容器的布局管理者五种布局管理器FlowLayout GridLayoutBorderLayoutCardLayoutGridBagLayoutimport javax.swing.*;import java.awt.*;class FlowLayoutFrame extends JFrameJButton b1 = new JButton(确定);JButton b2 = new JButton(取消);JButton b3 = new JButton(重置);JButton b4 = new JButton(返回);JButton b5 = ne
97、w JButton(放弃);FlowLayoutFrame()setTitle(流布局器示例);setSize(300,200);setLocation(300,200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JPanel p = new JPanel();p.setLayout(new FlowLayout();p.add(b1);p.add(b2);p.add(b3);p.add(b4);p.add(b5);setContentPane(p); 212FlowLayout从上到下、从左到右进行放置。当容器的大小变化时,组件的大小不变,
98、但是相对位置会发生变化。构造方法主要下面几种: FlowLayout(FlowLayout.RIGHT,20,40); FlowLayout(FlowLayout.LEFT);FlowLayout(); /缺省的对齐方式居中对齐,横向间隔和纵向间隔都是缺省值5个象素213BorderLayout把容器分成5个区域:North,South,East,West和Center,每个区域只能放置一个组件。 上北、下南、左西、右东、中当容器的大小变化时,按钮相应的位置不变化,但其大小改变。 是Window,Frame和Dialog的缺省布局管理器。 构造方法主要下面2种BorderLayout(int
99、h,int v) /h,v组件间的水平和垂直距离BorderLayout() / 组件的垂直和水平间隔为0。class BorderLayoutFrame extends JFrameJButton btnEast = new JButton(按钮东);JButton btnWest = new JButton(按钮西);JButton btnSouth = new JButton(按钮南);JButton btnNorth = new JButton(按钮北);JButton btnCenter = new JButton(按钮中);BorderLayoutFrame()setTitle(边
100、界布局器示例);setSize(300,200);setLocation(300,200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JPanel p = new JPanel(); p.setLayout(new BorderLayout();p.add(btnEast,BorderLayout.EAST);p.add(btnWest,BorderLayout.WEST);p.add(btnSouth,BorderLayout.SOUTH);p.add(btnNorth,BorderLayout.NORTH);p.add(btnCenter
101、,BorderLayout.CENTER);setContentPane(p); 215GridLayout (java.awt.GridLayout)将空间划分为由行和列组成的网格单元,每个单元放一个组件,网格单元大小相同指定行数和列数GridLayout类的构造函数public GridLayout ( ) 生成一个行数为1的布局管理器对象。public GridLayout ( int rows, int cols )public GridLayout (int rows, int cols , int hgap, int vgap )import javax.swing.*;impor
102、t java.awt.*;class GridLayoutFrame extends JFrameString strArr = 北京,上海,广州,杭州,南京,厦门,西安,无锡,青岛;JButton btnArr;GridLayoutFrame()setTitle(网格布局器示例);setSize(300,200);setLocation(300,200);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JPanel p = new JPanel();p.setLayout(new GridLayout(3,3,10,10);btnArr = ne
103、w JButton9;for(int i = 0; i strArr.length; i+)btnArri = new JButton(strArri);p.add(btnArri);setContentPane(p); 217文本行一个单行的文本域,可接受从键盘输入的信息AWT用TextField表示,Swing 用JTextField表示TextField类常用的方法:1. public TextField( ):3个字符的空文本行。2. public TextField(int cols) 3. public TextField(String text)4. public TextFie
104、ld(String text, int cols)5. public getText();6. public void setEchoChar( char c ) 设置用户输入的响应字符,防止他人偷看。218文本区一个多行的文本域,内容超出显示范围时,具有滚动显示的功能AWT用TextArea表示,Swing 用JTextArea表示TextArea类常用的方法:1. public TextArea( ) 2. public TextArea( String text ) 3. public TextArea( int rows, int columns ) 4. public TextAre
105、a( String text, int rows, int columns ) 5. public TextArea( String text, int rows, int columns, int scrollbars )2198.3、事件处理 事件(Event)p用户对界面操作的描述p鼠标移动、鼠标点击、键盘键入等p事件类ActionEvent:单击按钮;文本域中按回车键KeyEvent:按键时触发ItemEvent:列表类,当选项状态发生变化时p每个组件能产生的事件是确定的。事件处理模型事件源产生事件事件送给监听器监听器处理事件(执行监听器的某个方法)如何实现事件处理p定义监听器类对于事
106、件XXXEvent, 要想接收并处理这类事件,必须定义相应的事件监听器类,该类需要实现与该事件相对应的接口XXXListenerp事件监听注册(委托)组件对象必须注册该类事件的监听器,使用addXXXListener(监听器对象) 方法来注册监听器。 委托事件模型import javax.swing.*;import java.awt.event.*;class AdderFrame extends JFrame implements ActionListenerAdderFrame()JLabel lblAdd = new JLabel(+);btnEqual = new JButton(=
107、);tfOp1 = new JTextField(10);tfOp2 = new JTextField(10);tfSum = new JTextField(10);setTitle(加法器);setBounds(200,300,500,80);setDefaultCloseOperation(EXIT_ON_CLOSE);btnEqual.addActionListener(this); JPanel p = new JPanel();p.add(tfOp1);p.add(lblAdd);p.add(tfOp2);p.add(btnEqual);p.add(tfSum);setContent
108、Pane(p);public void actionPerformed(ActionEvent event)int sum= Integer.parseInt(tfOp1.getText() + Integer.parseInt(tfOp2.getText();tfSum.setText(sum+);private JTextField tfOp1, private JTextField tfOp2, JTextField tfSum;private JButton btnEqual;第第1010章章 AppletApplet与绘制与绘制22510.1、Applet概述概述 226Applet
109、 pJava语言编写的小应用程序,可以直接嵌入到网页或者其他特定的容器 p和Application的区别Application程序都必须有main方法,这个方法是程序执行的入口 Applet小程序依赖于Web浏览器运行,可以没有main方法227applet版本的Hello World import javax.swing.*;public class HelloWorldApplet extends JApplet public void init() JLabel lbl=new JLabel(Hello world!, SwingConstants.CENTER);add(lbl); 要
110、运行applet小程序,需要先将这个java源文件编译成字节码文件228applet版本的Hello World /HelloWorldApplet.htmlHello world Applet229appletviewer命令 appletviewer HelloWorldApplet.html23010.2、Applet的生命周期的生命周期 231JApplet 的基本方法pinit完成Applet的初始化pstart 调用完init方法后,会自动调用start方法pstop 用户离开Applet所在页面或调用destroy方法前,方法被自动调用pdestroy 浏览器正常退出时调用pPa
111、int 用于在小程序中绘制文本、线条或图像装入小程序访问页面离开页面init()start()stop()destroy()退出浏览器applet的主要事件及状态转移233import javax.swing.*;public class DemoApplet extends JAppletprivate JTextArea ta; public void init()ta = new JTextArea(5,10);ta.setText(初始化n);add(ta);public void start()ta.append(开始n);public void stop()ta.append(暂停
112、n);23410.3、Applet的的HTML标记及属性标记及属性235Applet 相关的常用HTML标记pp236的常用属性pcode 指定applet字节码文件的文件名pwidth和height 指定Applet窗口的尺寸(以像素为单位)palign 指定Applet的对齐方式pcodebase 指定Applet的URL地址,告诉浏览器在哪个目录下查找字节码文件237的常用属性parchive 用于列出Java压缩文件,其中包含字节码文件或Applet需要的其他资源文件238p用于从HTML文件向Applet传递参数 p在applet中用getParameter()方法接收 public
113、 class MyApplet extends JApplet public void init() String value = getParameter(background); Color bg = Color.decode(value); /其他代码 23910.4、几何图形绘制、几何图形绘制240创建绘图接口pjava.awt.Graphics2DppaintComponent(Graphics g) public void paintComponent(Graphics comp) Graphics2D comp2D = (Graphics2D)comp; /其他代码 241绘制文
114、本pdrawString()方法 drawString( String str, int x, int y); /在坐标(x,y)处绘制字符串str的内容242字体pjava.awt.Font类p创建Font类的对象 public Font(String name, int style, int size) / name表示字体名,style表示字型,size表示字体大小 psetFont()方法 创建字体后调用此方法设置某个组件的字体,如: comp2D.setFont(f); comp2D.drawString(Hello World, 100, 100);Font f = new Fon
115、t(“Serif”, Font.BOLD+Font.ITALIC, 12);243颜色pjava.awt.Color类p创建Color类对象 public Color(int r, int g, int b); /参数r、g、b分别表示所需颜色的RGB值,取值范围是0255psetColor()方法 comp2D.setColor(Color.GREEN);244创建几何图形p使用java.awt.geom包中的类创建要绘制的图形对象p将这个对象作为参数,调用方法draw()或fill() draw()用于绘制图形边框,方法fill()用于填充对象245创建几何图形p线段p类Line2D.Fl
116、oatp创建对象 public Line2D.Float(float x1, float y1, float x2, float y2) /四个参数分别是线段两端点的x,y坐标值p矩形p类Rectangle2D.Double或Rectangle2D.Floatp创建对象 public Rectangle2D.Double(double, double, double, double) public Rectangle2D.Float(float x, float y, float w, float h) / 四个参数分别是矩形左上角坐标和矩形的宽和高246创建几何图形p多边形p类General
117、Pathp用法创建对象用moveTo方法创建多边形的第一个顶点用lineTo方法创建多边形的边 GeneralPath p = new GeneralPath();p.moveTo(20F, 30F);p.lineTo(30F,30F);p.lineTo(25F,40F);247创建几何图形p椭圆p类Ellipse2D.Floatp创建对象 public Ellipse2D.Float(float x, float y, float w, float h) / 前两个参数表示椭圆的外切矩形的左上角坐标 / 第三个参数表示宽度,最后一个参数表示高度。p圆弧p类Arc2D.Floatp创建对象 p
118、ublic Arc2D.Float(float x, float y, float w, float h, float start, float extent, int type) / 参数x,y表示圆弧所属椭圆的外切矩形的左上角坐标 / w和h表示椭圆的宽度和高度,start表示弧的起始角度 / extent表示弧环绕的角度,type表示闭合的方式import javax.swing.*;import java.awt.geom.*;class DrawFrame extends JFramepublic DrawFrame()setTitle(绘制几何图形);setBounds(300,2
119、00,500,300);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);DrawPanel panel = new DrawPanel();add(panel);Class DrawPanel extends JPanel public class DrawFrameDemopublic static void main(String args)DrawFrame frm = new DrawFrame();frm.setVisible(true);class DrawPanel extends JPanelpublic void paintCom
120、ponent(Graphics comp)Graphics2D comp2D = (Graphics2D)comp;int x = getSize().width/3;int y = getSize().height/5;comp2D.setColor(Color.blue);comp2D.drawString(绘制直线,x/5,2*y/5); Line2D.Float line = new Line2D.Float( x/5, 3*y/5, 4*x/5,3*y/5);comp2D.draw(line);comp2D.drawString(绘制矩形,x/5,6*y/5); Rectangle2
121、D.Float rect1 = new Rectangle2D.Float(x/5, 7*y/5, 3*x/5, 4*y/5);Rectangle2D.Float rect2 = new Rectangle2D.Float(x/5,13*y/5, 3*x/5, 4*y/5);comp2D.draw(rect1);comp2D.fill(rect2);comp2D.drawString(绘制椭圆,6*x/5,2*y/5);Ellipse2D.Float ellipse1 = new Ellipse2D.Float( 6*x/5, 3*y/5, 3*x/5, 3*y/5);Ellipse2D.Fl
122、oat ellipse2 = new Ellipse2D.Float( 6*x/5, 8*y/5, 3*x/5, 3*y/5);comp2D.draw(ellipse1);comp2D.fill(ellipse2); comp2D.drawString(绘制圆弧,6*x/5,14*y/5); Arc2D.Float arc1 = new Arc2D.Float( 6*x/5, 15*y/5, 3*x/5, 3*y/5, 0, 90, Arc2D.OPEN); Arc2D.Float arc2 = new Arc2D.Float(6*x/5, 20*y/5, 3*x/5, 3*y/5, 20,
123、150, Arc2D.PIE);comp2D.draw(arc1);comp2D.draw(arc2);comp2D.drawString(绘制多边形,11*x/5,2*y/5);GeneralPath p = new GeneralPath();p.moveTo(11*x/5,7*y/5);p.lineTo(12*x/5,3*y/5);p.lineTo(13*x/5,3*y/5);p.lineTo(14*x/5,7*y/5);p.lineTo(13*x/5,11*y/5);p.lineTo(12*x/5,11*y/5);p.closePath();comp2D.draw(p);第第1111章
124、章 多线程多线程25211.1、线程的概念、线程的概念 253多线程程序、线程多线程程序、线程 p多线程程序是指程序运行时,并发执行多个指令流,即多个任务同时执行。p进程在计算机中执行的程序叫做进程一个进程可以拥有一个或多个线程。p线程又称为“轻量级的进程”,是进程内部单一的一个顺序指令流。一个进程中的所有线程都生存在这个进程的空间中,共同使用进程的资源一个进程至少有一个主线程,主线程由系统自动创建,用户只需在应用程序中创建其它线程25411.2、线程的创建、线程的创建 255线程的创建线程的创建p两种方式p定义Thread类的子类p实现Runnable接口256Thread类类 p类java
125、.lang.Threadp创建、启动新线程p定义Thread类的子类,重写Thread类中的run()方法p创建线程对象p调用线程对象的start()方法,启动线程class FirstThread extends ThreadFirstThread(String s)message = s;public void run()for(int i = 0;i 50 ; i+)System.out.println(message);public static void main(String args)FirstThread thread1 = new FirstThread(Thread 1);
126、FirstThread thread2 = new FirstThread(Thread 2);thread1.start();thread2.start();private String message;258Runnable接口接口 p定义在java.lang中p创建、启动新线程p定义一个实现Runnable接口的类,重写run()方法p创建该类的对象,并将此对象作为参数构造一个Thread类的对象p调用start()方法启动这个Thread类的对象class FirstRunnable implements RunnableFirstRunnable(String s)message =
127、 s;public void run()for(int i = 0; i 50; i+)System.out.println(message);public static void main(String args) FirstRunnable r1 = new FirstRunnable(Thread 1);FirstRunnable r2 = new FirstRunnable(Thread 2);Thread t1 = new Thread(r1);Thread t2 = new Thread(r2);t1.start();t2.start();private String messag
128、e;26011.3、线程的管理、线程的管理261线程的状态p一个线程可能处于以下四种状态之一:新建、可执行、阻塞、消亡Thread类中常用的成员方法方法说明static void sleep(long millis)在指定的毫秒数内让当前正在执行的线程休眠void start()使该线程开始执行;Java 虚拟机调用该线程的 run 方法。void stop()结束该线程。由于安全性问题,已过时。static void yield()暂停当前正在执行的线程对象,并执行其他线程。void join()等待该线程终止void suspend()挂起线程。由于它具有死锁倾向,已过时。void res
129、ume()只与 suspend() 一起使用,激活已挂起的线程,已过时。static Thread currentThread()返回对当前正在执行的线程对象的引用。String getName()返回线程的名字int getPriority()返回线程的优先级263import javax.swing.*;public class DemoApplet extends JAppletprivate JTextArea ta; public void init()ta = new JTextArea(5,10);ta.setText(初始化n);add(ta);public void star
130、t()ta.append(开始n);public void stop()ta.append(暂停n);class ThreadMethodTestpublic static void main(String args) MyThread t1 = new MyThread(Thread 1);MyThread t2 = new MyThread(Thread 2);t1.start();t2.start();trySystem.out.println(等待Thread 1 结束.);t1.join(); /等待t1运行结束后main线程继续运行System.out.println(等待Thre
131、ad 2 结束.);t2.join();catch(InterruptedException e)System.out.println(e.toString();System.out.println(主线程结束.);class MyThread extends ThreadMyThread(String s)name = s;public void run()trySystem.out.println(name + 启动.);sleep(10000); / 休眠10秒钟System.out.println(name + 结束);catch(InterruptedException e)Syst
132、em.out.println(e.toString();private String name;Thread 1启动.Thread 2启动.等待Thread 1 结束.Thread 1结束Thread 2结束等待Thread 2 结束.主线程结束.266线程同步线程同步p异步 vs 同步p线程同步多个线程间需要合作完成任务或同时使用相同且有限的资源时,需要使用线程同步机制class WithoutSync implements Runnablepublic static void main(String args)WithoutSync w1 = new WithoutSync();Threa
133、d t1 = new Thread(w1);Thread t2 = new Thread(w1);t1.start(); t2.start();public void run()int tmp;for(int i = 0,tmp = value+1; i 5; i+, tmp = value + 1)tryThread.sleep(1000); /线程休眠1000毫秒catch(Exception e)System.out.println(e.toString();value = tmp;System.out.println(Thread.currentThread().getName() +
134、 value is + value);private int value;Thread-0 value is 1Thread-1 value is 1Thread-1 value is 2Thread-0 value is 2Thread-1 value is 3Thread-0 value is 3Thread-1 value is 4Thread-0 value is 4Thread-0 value is 5Thread-1 value is 5268线程同步p关键字synchronized synchronized(syncObject) p所有对象都有且仅有一个锁,当线程需要访问共享资
135、源时必须先获得syncObject的锁(上锁),成功后方可进入synchronized代码块访问资源,否则进入阻塞状态。class WithSync implements Runnablepublic static void main(String args)public void run() int tmp; for(int i = 0; i 5; i+)synchronized(this) /将当前对象作为同步访问的锁 tmp = value + 1; /将value的访问语句放置在同步块中 try Thread.sleep(1000); catch(Exception e) System
136、.out.println(e.toString(); value = tmp; System.out.println(Thread.currentThread().getName() + value is + value); public int value;public static void main(String args)WithSync w1 = new WithSync();Thread t1 = new Thread(w1);Thread t2 = new Thread(w1);t1.start();t2.start();Thread-0 value is 1Thread-1 v
137、alue is 2Thread-0 value is 3Thread-1 value is 4Thread-0 value is 5Thread-1 value is 6Thread-0 value is 7Thread-1 value is 8Thread-0 value is 9Thread-1 value is 10271线程同步psychronized方法 synchronized returnType methodName(parameter) p调用某个对象的任何一个synchronized方法,这个对象都会被锁定prun()方法不应该声明为synchronized方法p死锁272
138、等待与通知等待与通知p适用于“有条件”的同步问题pwaitpnotify方法wait与notify方法说明public final void wait() throws InterruptedException使线程进入阻塞状态当对应的 notify()方法被调用时,线程重新进入可执行状态public final void wait(long timeout) throws InterruptException使线程进入阻塞状态timeout毫秒是当对应的 notify() 被调用或者超出指定时间皆可恢复可运行状态public final void notify()唤醒等待当前对象的一个线程p
139、ublic final void notifyAll()唤醒等待当前对象的所有线程import java.util.*;class WaitTestclass Sender extends Thread public void run() for(int i =0; i 10; i+) synchronized(this) if(available) /同步访问变量available try this.wait(); /若新消息未接收,则发送线程等待 catch(Exception e) message = (int)(Math.random() * 100);/产生1-100的随机数 Sys
140、tem.out.println(Sending + message); synchronized(this) available = true; this.notify(); /新消息发送完成,通知接收线程 int message; /待发送的消息boolean available; /是否有新消息;class Receiver extends ThreadSender s;Receiver(Sender tmp) s = tmp;public void run() for(int i =0; i 10; i+) synchronized(s) if(!s.available) try s.w
141、ait(); /若无新消息可接收,则进入等待状态 catch(Exception e) System.out.println(Receiving + s.message); synchronized(s) s.available = false; s.notify(); /接收消息结束,通知发送线程 class WaitTestpublic static void main(String args)Sender s = new Sender();Receiver r = new Receiver(s);/s作为参数构造一个Receiver对象s.start();r.start();Sendin
142、g 27Receiving 27Sending 13Receiving 13Sending 31Receiving 31Sending 59Receiving 59Sending 99Receiving 99Sending 0Receiving 0Sending 36Receiving 36Sending 66Receiving 66Sending 73Receiving 73Sending 4Receiving 427711.4、优先级与线程组、优先级与线程组278优先级p线程的优先级用于表示线程的重要性pJava中提供了10个的优先级p方法getPriorityp取得线程的优先级p方法se
143、tPriorityp设置线程的优先级p实际开发中一般不更改线程的优先级279线程组pJava采用“线程组”来管理线程p所有的线程都属于某个线程组p线程组也隶属于某个线程组pThreadGroup类 ThreadGroup类常用构造方法构造方法说明ThreadGroup(String name)创建一个线程组对象,并初始化它的名称ThreadGroup(ThreadGroup parent, String name)创建一个线程组对象,其隶属于线程组parent,名称为nameThreadGroup类常用方法方法说明int activeCount()返回线程组中活动线程的估计数int activ
144、eGroupCount()返回线程组中活动线程组的估计数int enumerate(Thread list,boolean r)将线程组中活动的线程复制到数组list中,并返回线程数目int enumerate(ThreadGroup list,boolean r)将线程组中活动的线程组复制到数组list,并返回线程组数目int getMaxPriority()返回线程组中最高的优先级String getName()返回线程的名称ThreadGroup getParent()返回该线程组的父线程组class ThreadInfo public static void main(String a
145、rgs) public static void printThreadGroupInfo(ThreadGroup group)public static void printThreadInfo(Thread t)public static void printThreadGroupInfo(ThreadGroup group)if( group = null)return;System.out.println(线程组: + group.getName()+ 最大优先级: + group.getMaxPriority();int num_of_threads = group.activeCou
146、nt();Thread threads = new Threadnum_of_threads;num_of_threads = group.enumerate(threads,false);/枚举线程for(int i = 0; i num_of_threads; i+)printThreadInfo(threadsi);int num_of_groups = group.activeGroupCount();ThreadGroup groups = new ThreadGroupnum_of_groups;num_of_groups = group.enumerate(groups,fals
147、e);/枚举线程组for( int i = 0; i num_of_groups; i+)printThreadGroupInfo(groupsi);/递归调用,打印子线程组中的信息public static void printThreadInfo(Thread t)System.out.println(线程: + t.getName() + 优先级: + t.getPriority();/打印线程名及它的优先级public static void main(String args) ThreadGroup group = new ThreadGroup(程序线程组);ThreadGroup
148、 parent,root;root = parent = Thread.currentThread().getThreadGroup();while(parent = parent.getParent() != null)root = parent;printThreadGroupInfo(root);线程组:system 最大优先级:10线程: Reference Handler 优先级: 10线程: Finalizer 优先级: 8线程: Signal Dispatcher 优先级: 9线程: Attach Listener 优先级: 5线程组:main 最大优先级:10线程: main
149、优先级: 5线程组:程序线程组 最大优先级:10第12章 多媒体、网络、数据库应用编程如何利用Java开发多媒体应用程序?如何利用Java开发网络应用程序?如何利用Java开发数据库应用程序?本章要点显示图片绘制图片要利用Graphics2D的drawImage()方法将图片显示。drawImage(Image img,int x,int y,ImageObserver observer)该方法将img显示在x、y指定的位置上显示图片实例import java.awt.*;import .URL;import javax.swing.*;public class DrawImage exten
150、ds JFrameImage img;public DrawImage()URL imgUrl=DrawImage.class.getResource(mimg.jpg); /获取图片资源img=Toolkit.getDefaultToolkit().getImage(imgUrl); this.setSize(500,300);/设置窗体大小setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); add(new CanvasPanel();/设置窗体面板为绘图面板对象this.setTitle(显示图片程序);/设置窗体标题public static
151、void main(String args)new DrawImage().setVisible(true);class CanvasPanel extends Canvaspublic void paint(Graphics g) super.paint(g); Graphics2D g2=(Graphics2D)g; g2.drawImage(img,0,0,this);/显示图片上例使用Graphics2D的drawImage()方法将图片原样显示在窗体中,如果需要对图片进行放大或缩小则需要使用它的重载方法。 drawImage(Image img,int x,int y,int wid
152、th,int height,Imageobserver observer),各参数意义如下:img 要显示的图片对象x 水平位置y 垂直位置width 图片的新宽度height 图片的新高度observer 图片观察者图片放大Javax.sound提供了捕获、处理和回放取样的音频数据的接口和类。可以在构造方法中通过AudioSystem类获得一个AudioInputStream。然后,利用AudioInputStream的getFormat()获知音频数据的格式。在此基础上,通过getLine()方法获得一个支持该种格式的SourceDataLine。播放本地avi文件TCP Socket 通
153、信过程UDP Socket 通信过程URL 读取器public class URLReader public static void main(String args) throws Exception /声明抛出所有例外 URL tirc = new URL(http:/ /构建一URL对象 BufferedReader in = new BufferedReader(new InputStreamReader(tirc.openStream(); /使用openStream得到一输入流并由此构造一个BufferedReader对象 String inputLine; while (inpu
154、tLine = in.readLine() != null) /从输入流不断的读数据,直到读完为止 System.out.println(inputLine); /把读入的数据打印到屏幕上 in.close(); /关闭输入流 (1)创建Socket;(2) 打开连接到Socket的输入/出流;(3) 按照一定的协议对Socket进行读/写操作;(4) 关闭Socket. java在包中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类,使用很方便。我们可以用如下方法创建Socket。Socket client = new Soc
155、ket(127.0.0.1, 80);/127.0.0.1为对方IP地址或主机名,80为对方端口号ServerSocket server = new ServerSocket(80);/80为本机端口号基于Socket编程步骤利用Socket实现客户和服务器交互import java.io.*;import .*;public class TalkClient public static void main(String args) trySocket socket=new Socket(127.0.0.1,4700); BufferedReader sin=new BufferedReade
156、r(new InputStreamReader(System.in);PrintWriter os=new PrintWriter (socket.getOutputStream();BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream();String readline;readline=sin.readLine(); /从系统标准输入读入一字符串while(!readline.equals(bye) os.println(readline); os.flush(); System.o
157、ut.println(Client:+readline); System.out.println(Server:+is.readLine(); readline=sin.readLine(); /从系统标准输入读入一字符串 /继续循环os.close(); /关闭Socket输出流is.close(); /关闭Socket输入流socket.close(); /关闭Socketcatch(Exception e) System.out.println(Error+e); /出错,则打印出错信息 利用Socket实现客户和服务器交互import java.io.*;import .*;impor
158、t java.applet.Applet;public class TalkServerpublic static void main(String args) tryServerSocket server=null;try server=new ServerSocket(4700); catch(Exception e) System.out.println(can not listen to:+e); Socket socket=null;trysocket=server.accept(); catch(Exception e) System.out.println(Error.+e);
159、String line;BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream(); PrintWriter os=new PrintWriter(socket.getOutputStream(); BufferedReader sin=new BufferedReader(new InputStreamReader(System.in); System.out.println(Client:+is.readLine(); line=sin.readLine(); while(!line.
160、equals(bye) os.println(line); os.flush(); System.out.println(Server:+line);System.out.println(Client:+is.readLine();line=sin.readLine(); /继续循环 os.close(); /关闭Socket输出流 is.close(); /关闭Socket输入流 socket.close(); /关闭Socket server.close(); /关闭ServerSocketcatch(Exception e)System.out.println(Error:+e); *j
161、ava.sql.DriverMagnager:管理驱动器,支持驱动器与数据连接的创建。*java.sql.Connection:代表与某一数据库的连接,支持SQL声明的创建。*java.sql.Statement:在连接中执行一静态的SQL声明并取得执行结果。*java.sql.PreparedStatement:Statement的子类,代表预编译的SQL声明。*java.sql.CallableStatement:Statement的子类,代表SQL的存储过程。java.sql.ResultSet:代表执行SQL声明后产生的数据结果。JDBC部分抽象接口简单的JDBC程序import ja
162、va.io.*;import .*;import java.applet.Applet;public class TalkServerpublic static void main(String args) tryServerSocket server=null;try server=new ServerSocket(4700); catch(Exception e) System.out.println(can not listen to:+e); Socket socket=null;trysocket=server.accept(); catch(Exception e) System.
163、out.println(Error.+e); String line;BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream(); PrintWriter os=new PrintWriter(socket.getOutputStream(); BufferedReader sin=new BufferedReader(new InputStreamReader(System.in); System.out.println(Client:+is.readLine(); line=sin.r
164、eadLine(); while(!line.equals(bye) os.println(line); os.flush(); System.out.println(Server:+line);System.out.println(Client:+is.readLine();line=sin.readLine(); /继续循环 os.close(); /关闭Socket输出流 is.close(); /关闭Socket输入流 socket.close(); /关闭Socket server.close(); /关闭ServerSocketcatch(Exception e)System.out.println(Error:+e);