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 args)/Display He
4、llo 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 World!”显示*/public clas
5、s 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!);方法的参数,main方法的参数是字符串数组13/*本程序实现一个应用,将“H
6、ello 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.println(Hello java!);System的一个成员,用以处理标
7、准输出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)/Display Hello java!System.out.println(Hello java
8、!);实际参数,显示一个字符串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 main(String args)/Display Hello java!System.out.println
9、(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.*;public class Hello extends JAppletpublic void paint(Graphics g)g.dr
10、awString(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 class Hello extends JAppletpublic void paint(Graphics g)g.drawString(Hello w
11、orld,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.awt.*;public class Hello extends JAppletpublic void paint(Graphics g)g.drawS
12、tring(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 Development Kit,JDK)JAVA平台的三个版本JavaSE-标准版 JavaEE-企业版 JavaME-微型版 Java语言开发环境28集成开发环境集成开发
13、环境是指将程序设计需要的很多功能,例如程序编辑、程序编译、程序调试等等一系列功能都集成到一个软件系统中JcreatorEclipesJava语言开发环境第2章 基本数据类型与表达式 2.1数据类型、常量与变量 p程序中的数据有类型之分,数据类型规定了数据的存储格式、取值范围以及运算方式。p基本类型数据在程序中体现为常量和变量 31public class circlepublic static void main(String args)int r=12;double area;area=3.14*r*r;System.out.println(area);常量32public class ci
14、rclepublic 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 average;声明语句中赋初值int i=0;double x=3.5,y=1.2;34整型(byte、short、int、long)字节型(byte),1个字节,范围-2727-1 短整型(short),
15、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=9223372036854775808L35基本数据类型整型常量0-1000+3213210770132-054(八进制整数)0 x68-0 xFB(十六进制整数)非法整型常量举例:3.03,323,211$2107836浮点型(
16、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-3或7.3e-3 非法浮点常量7.31E-3.21.625E3.0E3e-538字符型(char)如字符a、A、$、#等 在内存中以相应的Unicode代码存放 转移(转义)字符 n char ch;ch=A;ch=;39
17、基本数据类型逻辑型(boolean)有两个值:true(真),false(假)boolean f;f=true;40字符串 字符串不是Java基本数据类型用String类来表示字符串System.out.println(这里有个双引号);System.out.println(welcome!n to HDU);2.2 输入与输出处理 p程序一般需要接收键盘输入的数据,而运算的结果也往往需要输出到屏幕上。pJava提供了一组方法来实现输入和输出处理。System.out.print()方法System.out.println()方法前者将光标停留在输出内容后,而后者将光标移到下一行上。使用pri
18、nt()时,下一个输出会出现在同一行紧跟在前一个输出之后,使用println()时,下一个输出则被放到下一行上。class testpublic static void main(String args)int a=2,b=3;System.out.print(a=);/输出a=,光标停止在=后System.out.println(a);/输出2,光标移到下一行System.out.print(b=);/输出b=,光标停止在=后System.out.println(b);/输出3,光标移到下一行System.out.println(a=+a+,b=+b);/输出a=2,b=3System.ou
19、t.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.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.141593Sys
20、tem.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.142l字符型数据的格式控制 char ch=a;System.out.printf(%c,%c,ch,ch-32);a,Al布尔型数据的格式控制 boolean flag=true;System.out.printf(%b,flag);true System.in.read()方法 Scanner类的方法 从J2SE 5.0版本开始,Java提供
21、了Scanner类,为数据输入程序的编写带来了很大的方便。调用Scanner类的相应方法,可从键盘输入各种基本类型和字符串类型的数据。import java.io.*;class test public static void main(String args)throws IOException 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
22、b;Scanner kb=new Scanner(System.in);/创建Scanner对象a=kb.nextInt();/输入一个整数,并赋值给ab=kb.nextDouble();/输入一个实数,并赋值给bSystem.out.printf(%d+%.2f=%.2f,a,b,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
23、-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+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/1
24、0%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,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;/先
25、a的值再自增1,将a的值送给import java.util.Scanner;class ex2_6 public static void main(String args)Scanner kb=new Scanner(System.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的值再自减
26、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.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”或“fa
27、lse”大于 大于等于=小于 小于等于 b;a+bb-c ba;返回结果为一个布尔类型的值优先级低于算术运算符63关系运算与逻辑运算逻辑运算符逻辑与&操作数都为true,结果为true;否则结果为false逻辑或|有一个操作数为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(S
28、ystem.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算术运算优先级-*/%+-=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 e
29、x2_10 public static void main(String args)int a=81;int b=4;double c,d;c=a/b;d=(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
30、();c=kb.nextInt();max=a;if(maxb)max=b;if(maxc)max=c;System.out.printf(最大值为%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)Sys
31、tem.out.printf(对了!);else System.out.printf(错了!);72import java.util.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.print
32、ln(“很遗憾,这个成绩没有及格。“);elseSystem.out.println(“祝贺你,这个成绩及格了。“);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(“你输入的成绩是
33、“+score);if(score 60)if(count 60)if(count 80)System.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 sca
34、n=new Scanner(System.in);System.out.print(请输入一个整数:);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;pu
35、blic class testswitchpublic static 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(啊,什
36、么啊?);import java.util.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.print
37、ln(C);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.println(
38、2);break;default:System.out.println(e);图 3-9 Java的三种循环语句流程3.3、循环语句、循环语句 while循环while(布尔表达式)循环体;例3 8 输出使下列不等式成立的n的最小值。101.31211nclass 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 循环体;while
39、(布尔表达式);循环体布尔表达式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);例3 11 输入一个自然数,统计该数的位数。for循环 for(int count=10;count0;count-)System.out
40、.println(“count”);for(表达式1;表达式2;表达式3)循环体;表达式1:初始化部分表达式2:条件判断表达式3:调整控制循环变量 表达式1表达式2true循环结束循环体表达式3false90例3 13输入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.out.printf(%
41、.1f,max);循环的嵌套一个循环的循环体中包含另一个循环时,就构成循环嵌套 p输入n,输出n层用字符*构成的塔。*break和continue语句break语句-用于终止循环语句的执行p输入一个正整数,判断它是否为素数。素数指只能被1和自身整除的自然数。importimport java.util.*;classclass ex3_15publicpublic staticstatic voidvoid main(String args)Scanner kb=newnew Scanner(System.in);intint i,n;n=kb.nextInt();forfor(i=2;in/
42、2)System.out.printf(Yes!);elseelse System.out.printf(No!);break和continue语句带标号的break语句在嵌套循环结构中,跳出标号所指定的循环。p 输入正整数n,输出方程的一对正整数解。importimport java.util.*;classclass aaapublicpublic staticstatic voidvoid main(String args)intint n,a,b;Scanner kb=newnew Scanner(System.in);n=kb.nextInt();outer:forfor(a=1;a
43、Math.sqrt(n);a+)forfor(b=1;bMath.sqrt(n);b+)if if(a*a+b*b=n)System.out.printf(%d,%dn,a,b);break break outer;break和continue语句continue语句跳过本轮循环的剩余语句 importimport java.util.*;publicpublic classclass ex3_17publicpublic staticstatic voidvoid main(String args)Scanner sc=newnew Scanner(System.in);intint a,i
44、,m,k;m=1;k=0;forfor(i=1;i=10;i+)a=sc.nextInt();if if(a=0)continuecontinue;m=m*a;k+;System.out.printf(“m=%d,k=%d”,m,k);break和continue语句带标号的continue语句 执行标号所指向的循环结构的下一次循环classclass ex3_18 publicpublic staticstatic voidvoid main(String args)Loop:forfor(intint i=2;i50;i+)forfor(intint j=2;ji;j+)if if(i%j
45、=0)continuecontinue Loop;System.out.printf(%3d,i);3.53.5、方法的使用方法的使用 方法的定义方法的定义 方法的返回值类型方法的参数 classclass ex3_19staticstatic intint fac(intint n)intint m=1;forfor(intint i=1;i=n;i+)m*=i;returnreturn m;staticstatic voidvoid printstar(intint k)forfor(intint i=0;ik;i+)System.out.print(*);System.out.print
46、ln();staticstatic voidvoid hello()System.out.println(Hello!);publicpublic staticstatic voidvoid main(String args)intint s;s=fac(4);System.out.printf(%dn,s);printstar(5);hello();方法的调用与返回方法的调用与返回 调用与返回的流程调用与返回的流程 参数传递参数传递 classclass ex3_19staticstatic intint fac(intint n)intint m=1;forfor(intint i=1;i
47、=n;i+)m*=i;returnreturn m;staticstatic voidvoid printstar(intint k)forfor(intint i=0;ik;i+)System.out.print(*);System.out.println();staticstatic voidvoid hello()System.out.println(Hello!);publicpublic staticstatic voidvoid main(String args)intint s;s=fac(4);System.out.printf(%dn,s);printstar(5);hell
48、o();p输入两个数,输入两个数,判断它们是否是亲和数判断它们是否是亲和数 如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。importimport java.util.*;classclass ex3_20staticstatic intint divsum(intint n)intint s=0;forfor(intint i=1;in;i+)if if(n%i=0)s+=i;returnreturn s;publicpublic staticstatic voidvoid main(String args)Scanner sc=newnew Scanner(Syst
49、em.in);intint a,b;a=sc.nextInt();b=sc.nextInt();if if(a=divsum(b)&b=divsum(a)System.out.print(Yes);elseelse System.out.print(No);p参数的按值传递 classclass ex3_21publicpublic staticstatic voidvoid main(String args)intint b=0;modify(b);System.out.println(b=+b);publicpublic staticstatic voidvoid modify(intin
50、t a)a+;p变量的作用范围 classclass ex3_22staticstatic doubledouble round(doubledouble r)doubledouble s;s=3.1416*r*r;returnreturn s;publicpublic staticstatic voidvoid main(String args)doubledouble x=1;round(x);System.out.printf(%.2f,s);/有语法错误p方法的嵌套调用 publicpublic classclass ex3_23 staticstatic intint fact(in