Java程序设计系列讲座-1_第1页
Java程序设计系列讲座-1_第2页
Java程序设计系列讲座-1_第3页
Java程序设计系列讲座-1_第4页
Java程序设计系列讲座-1_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

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

文档简介

1、Java程序设计系列讲座1关于Java黄绍辉hsh推荐参考书Thinking in Java,Bruce Eckel中文译名:Java编程思想网上很容易搜到电子书,中英文都有。The JavaTM Tutorial,SUNSUN公司自己维护的Java入门,不过好像没有中文版。Introduction To Java Programming (core/comprehensive version),Y. Daniel Liang中文译名:Java程序设计导论推荐网络资源http:/SUN公司Java语言官方支持站点。Java的个人简历从Oak到Java,无心插柳的典范1995年,美国Sun Mi

2、crosystems公司正式向IT业界推出了Java语言,同年Java入选PC Magazine当年十大优秀科技产品Java?What is Java?因为它活泼,有生气,快速,交互这个名字不是一个缩写,但它是一个暗示,许多程序员都喜欢喝很多这种热的,芬芳的东西。Java的设计目标创建一种面向对象的程序设计语言,而不是面向过程的语言;提供一个解释执行的程序运行环境,使程序代码独立于平台;吸收C和C的优点,使程序员容易掌握;去掉C和C中影响程序健壮性的部分,使程序更安全,例如指针、内存申请和释放;实现多线程,使得程序能够同时执行多个任务提供动态下载程序代码的机制;提供代码校验机制以保证安全性;J

3、ava语言的执行原理Java只能被编译成字节码文件(.class),然后由Java虚拟机负责解释执行。换句话说,Java不能直接生成可执行文件(例如exe)。 Java不直接生成exe的原因,在于不同平台的exe是不兼容的。为了移植性,只好牺牲一下执行速度了(exe执行方式比解释执行方式快)。 显然,不同的平台,对应的JVM是不同的。Java的工作原理(I)Java虚拟机(Java Virtual Machine)Java虚拟机是软件模拟的计算机,可以在任何处理器上安全并且兼容地执行保存在.class文件中的字节码。Java Development KitJava Runtime Enviro

4、nmentJava的工作原理(II)无用内存自动回收机制在C语言中是由程序员进行内存回收的,程序员需要在编写程序的时候把不再使用的对象内存释放掉。在Java运行环境中,始终存在着一个系统级的线程,专门跟踪内存的使用情况,定期检测出不再使用的内存,并进行自动回收,避免了内存的泄露,也减轻了程序员的工作量。Java的工作原理(III)代码安全性检查机制字节码的执行需要经过三个步骤类装载器(class loader)负责把类文件(.class文件)加载到Java虚拟机中,在此过程需要检验该类文件是否符合类文件规范;字节码校验器(bytecodeverifier)检查该类文件的代码中是否存在着某些非法

5、操作;Java解释器负责把该类文件解释成为机器码进行执行。Java虚拟机采用的是“沙箱”运行模式,即把Java程序的代码和数据都限制在一定内存空间里执行,不允许程序访问该内存空间外的内存;如果是applet程序,还不允许访问客户端机器的文件系统。认识几个名字application program interface (API) 应用程序接口。用于Java开发的一大堆预定义的类和接口,由sun公司发布,不同版本的Java,API略有不同Java Development Toolkit (JDK)Java开发包,目前最新版本是6(也称为1.6版);此外每一次的小升级,都会有一个子版本号出来。比如j

6、dk-6u14-windows-i586.exe的JDK,主版本号是6,u14表示update 14,即第14次的小升级版integrated development environment (IDE)集成开发环境,用于开发Java程序的著名IDE有NetBeans、Eclipse等等JDK的一家J2EE:Java2 Enterprise EditionJ2SE:Java2 Standard EditionJ2ME:Java2 Micro EditionJava开发环境的安装1. 下载JDK,下载地址:/2. 安装JDK(没啥技术含量,一直next就可以了 )3. 设置三个环境变量(在我的电脑

7、点右键属性高级环境变量,最好设置在系统变量中)变量名:JAVA_HOME(一般不存在,要自己添加)变量值:JDK的实际安装目录,如C:jdk1.6.0_02变量名:path(一般已存在,请修改原值)变量值:在原值的最前面加%JAVA_HOME%bin;变量名:classpath(一般已存在,请修改原值)变量值:在原值的最前面加.;%JAVA_HOME%lib;友情提醒:这是个英文句号,表示当前目录Java的开发工具身出名门的IDE正派netBeans(推荐指数:)JBuilder(推荐指数:)VisualAge(推荐指数:)旁门Visual J+ (推荐指数:)开源的IDE(http:/)Ec

8、lipse (推荐指数:)命令行开发方式UltraEdit/EditPlus + JDK(推荐指数:)Java的注释/* 第一种格式注释,块注释*/public class HelloJava public static void main(String args ) System.out.println(Hello Java!); / 第二种格式注释,行注释/* 第三种格式注释,块注释,用于自动生成程序的帮助文档*/一个简单的Java程序下面程序是在屏幕上输出一行文字。小结:1. 一个Java程序至少有一个类class2. 一个类可以拥有一个main函数,这个main函数是程序运行的入口Ja

9、va开发步骤(3步) 编辑源文件(.java) 编译成字节码文件(.class) 启动虚拟机运行.class文件一个例题用Java很容易在对话框上显示文字: import javax.swing.JOptionPane; public class Welcome public static void main(String args) System.out.println(dos output); System.out.print(123t456t789n你好,Java!); JOptionPane.showMessageDialog(null, Welcome to Java!, Displ

10、ay Message, JOptionPane.INFORMATION_MESSAGE); 运行一下上面那个程序打开记事本,贴上那些代码,然后,千万千万,要把源文件命名为: Welcome.java进入DOS,爬到Welcome所在目录,然后编译它(javac表示java compile):javac Welcome.java然后运行它:java Welcome关于Java的源文件命名规则Java源文件不能随便取名,它一定要取这个文件中public class的那个class名,包括大小写也必须是一样的!例如上面的例子,源文件名一定要叫Welcome.java。所以每一个Java源文件至少有一

11、个class,可以有很多个class,但是只能有一个public class。为什么有这么奇怪的规定?因为每一个class都可以有自己的main函数,而main函数就是程序的入口,因此JVM只会进入public class所拥有的那个main函数开始运行。开始学习Java语法学写简单程序我们用下面的算法来完成一个面积计算的程序: 读入半径radius 利用公式计算面积area: area = radius * radius * pi3. 输出面积第一步搭一个框架public class ComputeArea / Data and methods to be given later细化一下pu

12、blic class ComputeArea public static void main(String args) / Step 1: Read in radius / Step 2: Compute area / Step 3: Display the area 第二步我们需要存储半径和面积,所以引入两个变量:public class ComputeArea public static void main(String args) double radius; double area; / Step 1: Assign a radius / Step 2: Compute area /

13、Step 3: Display the area 完整版程序标识符命名规则 字符集:字母、数字、下划线_、美元符$ 不能以数字开头 不能用关键字 不能用 true、false和null 可以是任意长度注意:Java是大小写敏感的, 因此X和x是不同的变量名。变量变量是用来存储数据的,声明方式如下:变量类型 变量名1, 变量名2, . ,变量名n;例如:int x; / 声明 x是整型变量 double radius; / 声明radius是浮点型变量 char a; / 声明a是字符型变量可以同时声明几个变量,例如:int i, j, k; / 声明i, j,k都是整型变量赋值语句和赋值表达式

14、Java用等号表示赋值,赋值的语法如下:变量名=表达式;例如:int x = 1;double radius = 1.0;x = 5 * (3 / 2) + 3 * 2; x = x + 1; area = radius * radius * 3.14159; 常量如果在程序运行期间,都需要保持某一个值不变,可以将其定义为常量。定义常量的语法如下:final 数据类型 常量名=常量值;例如:final double PI = 3.14159;常量名的命名规则和变量名是一样的,只不过为了醒目,常量名一般是全大写,例如:PI, MAX_INTEGER, STU_NAME数值类型和运算Java里表示

15、一个数有多种类型可选,如:byte 1字节整数short 2字节整数int 4字节整数long 8字节整数float 4字节IEEE 754标准浮点数double 8字节IEEE 754标准浮点数算术运算符共有5种,如下: +加法 减法 *乘法 /除法 %取余取余在某些地方很好用,例如今天是星期六,那么过10天后是星期几?这个问题可以用取余运算来实现:数值常量-1整型默认的数值类型是int型,如 int a=100;如果类型不同,Java会自动转换,但是要注意越界问题,如 byte b=1000; 就有问题。可以让数值变成long型的,只要加一个L或者l,如 long c=123456L; 可

16、以让数值以16进制的形式书写,如:short d=0XFF;数值常量-2浮点数普通写法,默认类型是double,如 float f=12.3;可以用F来指定类型为float,如 float f=12.3F;科学记数法,如 double g=1.23E2;E表示10的次方,可以大写也可以小写E前面必须有一个数,带不带小数点无所谓E后面必须有一个整数,可正可负算术表达式算术表达式的书写只要注意:当不清楚优先级的时候,多用()一定不能省略乘号,如3y这种数学写法,要写成3*y例如:写成Java表达式是:(3 + 4 * x) / 5 10 * (y - 5) * (a + b + c) / x +9

17、 * (4 / x + (9 + x) / y)复合运算符+= 如 i += 8 相当于 i = i + 8 -= 如 f -= 8.0 相当于 f = f - 8.0 *= 如 i*= 8 相当于 i = i * 8 /= 如 i /= 8 相当于 i = i / 8 %= 如 i %= 8 相当于 i = i % 8 + 如 i+和+i 都相当于 i = i + 1- 如 i-和-i 都相当于 i = i - 1前置+与后置+后置+:先用旧值,然后自增前置+:先自增,然后用新值一个例子:int x = 1;int y = 5;int z = x- + (+y); /z=?类型转化不同的数值

18、类型可以混合运算;Java会对不同类型进行自动类型转化,以便运算符两边的类型相同,然后才开始计算。例如:double d = 6 * 3.0 + 7 / 2; /d=31.0低级到高级的转化是自动的:反之要强制转化,如:float f = (float)10.1;int i = (int)f;强制类型转换的应用假设商品税率是6%,价格是197.55,计算应缴的税款(截留两位小数)。 1 public class SalesTax 2 public static void main(String args) 3 double purchaseAmount = 197.55; 4 double t

19、ax = purchaseAmount * 0.06; 5 System.out.println(int)(tax * 100) / 100.0); 6 7 字符类型和运算Java用的是Uniode字符集,需要两个字节才能表示一个字符,所以它可以用一个char存储一个汉字。字符必须用单引号 修饰;字符串用 。例如:char letter = A;char numChar = 4;char huan=u6B22;/汉字“欢”单个字符可以用来拼成一个字符串输出,例如:上面的例子用汉字直接写在 中也是可以的,但是当你的机器没有安装汉字库的时候,你也只能写成如例子那样才行。Unicode字符的例子转义

20、字符转义字符是由引导的特殊字符,它和后续的一个字符合起来表示一个新的含义,例如:b Backspacet Tab n Linefeed f Formfeedr Carriage Return Backslash Single Quote Double Quote例如要输出He said Java is fun,必须写成:System.out.println(He said Java is fun); char和数值类型char的存储形式和整数(byte,short,int,long)是一样的,所以它可以跟整数混合运算。char实质上相当于unsigned short,即无符号双字节整数。几个例

21、子:char c = (char)0XAB0041; char c = (char)65.25;int i = (int)A; byte b = (byte)uFFF4;布尔类型和运算布尔运算取值只有两个:true和false,记住要全小写,例如:boolean lightsOn = true;比较运算符都能够得到布尔类型的结果,例如:, , =, =, !=布尔值之间可以进行布尔运算,例如:! 逻辑非,& 逻辑与,|逻辑或,逻辑异或一个例子 1 import javax.swin ptionPane; 2 3 public class TestBoolean 4 public static

22、void main(String args) 5 int number = 18; 6 7 JOptionPane.showMessageDialog(null, 8 Is + number + 9 n divisible by 2 and 3? +10 (number % 2 = 0 & number % 3 = 0)11 + n divisible by 2 or 3? +12 (number % 2 = 0 | number % 3 = 0) +13 n divisible by 2 or 3, but not both? 14 + (number % 2 = 0 number % 3

23、= 0);15 16 运算优先级和结合性优先级指的是不同的运算符在一起的时候,哪个先算的问题。例如:a+b/c,由于/的优先级比+高,先算b/c结合性指的是运算符的级别相同时(运算符本身可能不同),从哪个方向算起的问题。例如:a*b/c,由于*和/优先级相同,按照结合性是从左到右,所以先算a*b记不住优先级和结合性没有关系,因为括号()的优先级最高,你随时可以用()来决定运算的顺序。字符串类型 String并不是一种基本类型,它是一个引用类型。严格说来,String只是一个类,不是类型。String用来表示字符串,支持+和+=运算符。例如:String message = Welcome +

24、to + Java;String s = Chapter + 2; / s=Chapter2String s = Suppl + B; / s= SupplBSystem.out.println( + 1 + 2); /输出12System.out.println( + (1 + 2); /输出3从输入对话框中获取输入上图是Java常见的输入手段,这时用户所有的输入会通过input这个字符串传回来。如果用户直接关闭或者取消,input会得到null,表示空串。换句话说,这种方式下,无论用户输入何内容,最后你都将得到一个String的返回值。字符串类型转成数值类型可以把String转成int,这

25、样就可以把用户的输入当作整数使用了,例如:int intValue = Integer.parseInt(input); 当然这里要求input是形如整数的字符串,例如123,否则后果很严重。也可以把String转成double。例如:double doubleValue = Double.parseDouble(input); 当然这里要求input是形如浮点数的字符串,例如123.345,否则后果同样严重。再来一个例子 1 import javax.swing.JOptionPane; 2 3 public class LeapYear 4 public static void main(

26、String args) 5 / Prompt the user to enter a year 6 String yearString = JOptionPane.showInputDialog(“输入年份); 7 8 / Convert the string into an int value 9 int year = Integer.parseInt(yearString);1011 / Check if the year is a leap year12 boolean isLeapYear =13 (year % 4 = 0 & year % 100 != 0) | (year %

27、400 = 0);1415 / Display the result in a message dialog box16 JOptionPane.showMessageDialog(null,17 year + “ 是闰年吗? + isLeapYear);18 19 从控制台(DOS)输入从JDK1.5开始,控制台输入终于简化了,以前输入一个int要这样:BufferedReader in=new BufferedReader(new InputStreamReader(System.in);try int i = Integer.parseInt(in.readLine();catch (I

28、OException e) 现在是这样:Scanner scanner = new Scanner(System.in);int i = scanner.nextInt();一个例子 1 import java.util.Scanner; / Scanner is in java.util 2 3 public class TestScanner 4 public static void main(String args) 5 / Create a Scanner 6 Scanner scanner = new Scanner(System.in); 7 8 / Prompt the user

29、 to enter an integer 9 System.out.print(“给个整数int? );10 int intValue = scanner.nextInt();11 System.out.println(“你输入了 + intValue);1213 / Prompt the user to enter a double value14 System.out.print(“给个浮点数double? );15 double doubleValue = scanner.nextDouble();16 System.out.println(“你输入了 17 + doubleValue)

30、;1819 / Prompt the user to enter a string20 System.out.print(“给个字符串?别带空格: );21 String string = scanner.next();22 System.out.println(“你输入了 + string);23 24 开始学习控制结构选择语句11. 简单的if语句if (booleanExpression) statement(s);例如:if (radius = 0) area = radius * radius * PI; System.out.println(The area for the cir

31、cle of radius + radius + is + area);选择语句22. if.else语句if (booleanExpression) statement(s)-for-the-true-case;else statement(s)-for-the-false-case;选择语句33. 嵌套的if语句嵌套if语句的原则是“就近匹配”,也就是先从第一个else找起(因为else总是和if成对出现,但是if可以单独出现,所以从else找起),向上找离它最近的if,这个if就是跟它匹配的if一个例子10以内减法自测器,运行结果如图:解题思路:1. 随机生成两个10以内整数2. 如果第

32、一个数比较小,交换两个数3. 提示用户输入结果4. 判断结果,并输出 1 import javax.swing.JOptionPane; 2 3 public class SubtractionTutor 4 public static void main(String args) 5 / 1. Generate two random single-digit integers 6 int number1 = (int)(Math.random() * 10); 7 int number2 = (int)(Math.random() * 10); 8 9 / 2. If number1 num

33、ber2, swap number1 with number210 if (number1 0) y = 1else y = -1;它有一个等价写法:y = (x 0) ? 1 : -1;条件表达式语法:booleanExpression ? expression1 : expression2;循环语句11. while循环while (loop-continuation-condition) / Loop body Statement(s);例如:int count = 0;while (count 100) System.out.println(Welcome to Java!); cou

34、nt+;整数求和工具执行效果如图: 1 import javax.swing.JOptionPane; 2 3 public class SentinelValue 4 /* Main method */ 5 public static void main(String args) 6 / Read an initial data 7 String dataString = JOptionPane.showInputDialog( 8 Enter an int value:n(the program exits if the input is 0); 9 int data = Integer.

35、parseInt(dataString);1011 / Keep reading data until the input is 012 int sum = 0;13 while (data != 0) 14 sum += data;1516 / Read the next data17 dataString = JOptionPane.showInputDialog(18 Enter an int value:n(the program exits if the input is 0);19 data = Integer.parseInt(dataString);20 2122 JOptio

36、nPane.showMessageDialog(null, The sum is + sum);23 24 循环语句22. do.while循环do / Loop body; Statement(s); while (loop-continuation-condition);例题:用do.while改写上一个例子 1 import javax.swing.JOptionPane; 2 3 public class TestDoWhile 4 /* Main method */ 5 public static void main(String args) 6 int data; 7 int su

37、m = 0; 8 9 / Keep reading data until the input is 010 do 11 / Read the next data12 String dataString = JOptionPane.showInputDialog(null,13 Enter an int value:n(the program exits if the input is 0),14 TestDo, JOptionPane.QUESTION_MESSAGE);1516 data = Integer.parseInt(dataString);1718 sum += data;19 w

38、hile (data != 0);2021 JOptionPane.showMessageDialog(null, The sum is + sum,22 TestDo, JOptionPane.INFORMATION_MESSAGE);23 24 循环语句33. for循环for (initial-action; loop-continuation-condition;action-after-each-iteration) / Loop body; Statement(s);int i;for (i = 0; i 100; i+) System.out.println(Welcome to

39、 Java!);for循环的例子 1 import javax.swing.JOptionPane; 2 3 public class TestSum 4 public static void main(String args) / Initialize sum 6 float sum = 0; 7 8 / Add 0.01, 0.02, ., 0.99, 1 to sum 9 for (float i = 0.01f; i = 1.0f; i = i + 0.01f)10 sum += i;1112 / Display result13 JOptionPane.showMessageDial

40、og(null, The sum is + sum);14 15 循环语句44. 嵌套循环做一个9*9乘法表 1 import javax.swing.JOptionPane; 2 3 public class MultiplicationTable 4 /* Main method */ 5 public static void main(String args) 6 / Display the table heading 7 String output = Multiplication Tablen; 8 output += -n; 910 / Display the number tit

41、le11 output += | ;12 for (int j = 1; j = 9; j+)13 output += + j;1415 output += n;1617 / Print table body18 for (int i = 1; i = 9; i+) 19 output += i + | ;20 for (int j = 1 j = 9; j+) 21 / Display the product and align properly22 if (i * j 10)23 output += + i * j;24 else25 output += + i * j;26 27 out

42、put += n;28 2930 / Display result31 JOptionPane.showMessageDialog(null, output);32 33 使用哪种循环 其实循环都是等价的,具体使用哪种循环纯属个人爱好break和continuebreak:结束包含此break的这个循环continue:结束本次循环(注意整个循环还没有结束)break的例子 1 public class TestBreak 2 /* Main method */ 3 public static void main(String args) 4 int sum = 0; 5 int number

43、 = 0; 6 7 while (number = 100) break;11 1213 System.out.println(The number is + number);14 System.out.println(The sum is + sum);15 16 continue的例子 1 public class TestContinue 2 /* Main method */ 3 public static void main(String args) 4 int sum = 0; 5 int number = 0; 6 7 while (number 20) 8 number+; 9

44、 if (number = 10 | number = 11) continue;10 sum += number;11 1213 System.out.println(The sum is + sum);14 15 几个例子11. 求最大公约数的例子,关键代码:int gcd = 1;int k = 1;while (k = n1 & k = n2) if (n1 % k = 0 & n2 % k = 0) gcd = k; k+;几个例子22. 显示一个数字金字塔算法思想:for (int row = 1; row = numberOfLines; row+) Print (numberO

45、fLines - row) * 3 leading spaces; Print leading numbers row, row - 1, ., 1; Print ending numbers 2, 3, ., row - 1, row; Start a new line;关键代码 for (int row = 1; row = numberOfLines; row+) / Print NUMBER OF LINES row) leading spaces for (int column = 1; column = 1; num-) System.out.print(num = 10) ? +

46、 num : + num); / Print ending numbers 2, 3, ., row - 1, row for (int num = 2; num = 10) ? + num : + num); / Start a new line System.out.println(); 几个例子3求素数判断一个数是否素数,关键代码: / Assume the number is prime boolean isPrime = true; / Is the current number prime? / Test if number is prime for (int divisor = 2; divisor num2)16 result = num1;17 else18 result = num2;1920 return result; 21 22 函

温馨提示

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

评论

0/150

提交评论