1、Java程序设计基础教程 Java程序设计基础教程 第一章 概述 本章技能目标 (1)了解Java语言的由来、特点、家族成员及实现机制。 (2)熟悉JDK开发环境的安装及配置。 (3)会使用Eclipse开发第一个Java应用程序。 重点和难点 开发环境的配置及使用。 1.1Java语言简洁 1.1.1Java语言的由来 Java是由SUN公司开发而成的新一代编程语言。 Oak。 咖啡(Java)。 Java大家庭: (1)J2ME—即Java2 Micro Edition。 (2)J2SE—即Java2(Software Development Kit)Sta
2、ndard Edition。 (3)J2EE—即Java2 Enterprise Edition(可扩展的企业应用Java2平台)。 1.1.2Java语言的特点 面向对象及面向过程。 高级语言程序必须转换为机器语言程序才能执行,但不同的计算机系统所使用的机器语言不同。 一次编译,随处运行。 任何系统只有安装了Java虚拟机(Java Virtual Machine,JVM)后,才可以执行Java程序。 当JVM解释执行Java程序时,Java实时编译器(Just-In-Time,JIT)会将字节码译成目标平台对应的机器语言的指令代码。 编译器会产生一种具备结构中立性的对象文件
3、格式,即Java字节码文件。 在Java中,这种供虚拟机理解的代码叫做字节码(ByteCode),它不面向任何特定的处理器,之面向虚拟机。 Java字节码可在任何安装了Java虚拟机的平台上运行。 每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码。字节码由虚拟解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后再特定的机器上运行。其执行过程如图1-1所示。 1.2开发环境配置及使用 1.2.1JDK的安装及配置 在开发Java应用程序前必须首先下载并安装JDK。目前JDK最新版本是1.6。
4、 2.认识JDK (1)bin目录。提供了工具程序,包括javac、java、javadoc、appletviewer等程序。 1)javac用于将Java源代码编译成字节码。其语法为: Javac [option] source 其中,[option]可包括以下几项: ①-classpath<路径>,指定将使用的类路径,以搜索.class文件。 ②-d<目录>,制定用于存放经过编译的.class文件的目录。“.”表示当前目录。 Source是以扩展名.java结尾的一个或多个文件名。 2)java用于执行java字节码。其语法为: Java [option] classna
5、me [arguments] 其中,[option]可包括以下几项: ①-classpath<路径>,指定将使用的备用类路径。 ②-version<版本>,显示编译源代码的JDK版本。 3)javadoc用于生成API文档。 4)appletviewer用于运行编译好的Applet。 (2)jre目录。提供JDK附带的JRE资源包(运行环境)。 (3)lib目录。提供了java工具所需的资源文件。 (4)demo目录。提供了Java编写的范例程序。 (5)src.zip文件。提供了API类的源代码压缩文件。如需查看API的某些功能实现方法,可以查看这个文件中的源代码内容。
6、3。设置Patch及Classpath环境变量(在Windows XP环境下) (1)设置Patch。具体方法是:用鼠标右键单击桌面上“我的电脑”图标,选择“属性”选项,再选择“高级标签”,系统显示如图1-3所示。 单击“环境变量”按钮,打开“环境变量”对话框。选择Path变量,单击“编辑”按钮,在“变量值”文本框中加入JDK的bin地址目录,如:C:\Program Files\Java\jdk1.6.0_21\bin,地址间采用“;”隔开,如图1-4所示。 设置完成后,单击“确定”按钮完成设置,并返回到“环境变量”对话框。 (2)设置Classpath。再“环境变量”对话框中单
7、击“新建”按钮,设置变量名为Classpath变量值为:.;C:\Program Files\Java\jdk1.6.0_21\lib,如图1-5所示。 提示:“.”表示当前目录。 (3)测试。具体方法是:单击“开始”菜单,选择“运行”命令,输入cmd命令,进入DPS界面,若输入java –version命令会出现如图1-6所示的信息,则表明设置正确。 1.2.2开发第一个Java程序 (1)Eclipse。登录下载。 (2)安装Eclipse。 Eclipse是一个绿色软件,无需安装即可执行。 覆盖下列文件到程序目录即可。 (3)运行Eclipse。进
8、入解压后的eclipse目录,双击eclipse.exe运行Eclipse集成开发环境。在运行时,Eclipse会提示选择工作空间,如图1-7所示(这里选择E:\黄伟林\第一章作为工作空间) 选择工作空间后,单击“确定”按钮,会出现一个欢迎界面,可以把欢迎界面关闭。 (4)用Eclipse编写程序。 1)新建项目(project):单击“文件”→“新建”→“项目”命令,在弹出的对话框中选择“Java项目”选项,单击“下一步”按钮,如图1-8所示。 输入项目名称:JavaStudy,单击“完成”按钮,如图1-9所示。 提示:项目又称“工程”。 2)新建Java程序:选中“
9、包资源管理器”中的JavaStudy项目节点,单击鼠标右键,选择“新建”→“文件”命令,新建文件,如图1-10所示。在“文件名”文本框中输入:FirstClass.Java,单击“完成”按钮,系统将自动弹出如图1-11所示的Eclipse主窗口。 3)编写代码:在Java编辑器中输入如图1-12所示的内容。 public class FirstClass { public static void main(String args[]) { System.out.println("Hello World!"); } } 4)保存:单击工具栏中的“保存”按钮或“文件
10、菜单中的“保存”命令。在保存的同时,Eclipse将自动将源程序编译成字节码文件。若程序有错误,将显示在“问题”视图中。 5)运行:在“包资源管理器”中,选中FirstClass类节点,单击鼠标右键,选择“运行方式”→“Java应用程序”选项。如果看到如图1-13所示的输出结果,表明第一个程序开发成功。 1.2.3 Java程序框架 (1)给程序起个名字,我们把它叫做类名,图1-12中的FirstClass就是类名。类名前腰用public(公共的)和class(类)两个词修饰,他们的顺序不能改变,中间要用用空格分隔。类名后跟一对大括号,所有属于这个类的代码都放在“{”和“}”之间。
11、2)写出main方法的框架 public static void main(String args[]){} main方法是所有Java应用程序执行的起点。一个程序孩子能有一个main方法。 (3)在main方法中填写代码。 println()和print ()都是向控制台输出消息,唯一不同的是,println()在输出消息后会自动换行,而print()不会自动换行。 注意: (1)public修饰的类名不能随便起,必须及Java文件同名。 (2)每条语句必须以“;”结尾。 (3)输出的字符串必须用双引号括起来,而且必须是英文的引号。 1.3案例:制作频道菜单 参考代码
12、 class PinDao { public static void main(String arg[]) { System.out.println("欢迎收看电视频道,请选择:"); System.out.println("\t1:少儿频道"); System.out.println("\t2:影视频道"); System.out.println("\t3:经济频道"); System.out.println("\t4:体育频道"); System.out.println("\t5:农村频道"); } } 1.4本章小结 源程序以.ja
13、va为后缀名,编译后生成的文件以.class为后缀名。 1.5实战训练 实战:开发简单的Java应用程序 参考方案 public class Practice1 { public static void main(String args[]) { System.out.println("姓名:张三"); System.out.println("年龄:21"); System.out.println("性别:男"); System.out.println("职业:学生"); System.out.println("住址:杭州市江干区139号");
14、 System.out.println("电话:5"); } } 第2章 Java语言基础 本章技能目标 (1)了解Java语言的基本符号,包括关键字、标识符、运算符和注释。 (2)了解Java语言的数据类型以及变量、常量的使用。 (3)会使用Java的运算符。 (4)掌握Java语言的控制语句,如分支语句、循环语句灯。 (5)掌握Java中数组的创建和使用。 重点和难点 (1)Java分支语句的使用。 (2)Java循环语句的使用。 (3)Java数组的声明、初始化和使用。 (4)数据类型转换。 2.1 Java符号 Java的符号可以分为:标识符、
15、关键字、运算符和注释符号。 2.1.1标识符 在Java语言中,任何一个变量方法、对象和类都需要事先用一个名字来对它命名,这个名字就是标识符。 Java中标识符的使用有如下规定: (1)标识符由字母、数字、美元符号“$”和下划线“_”组成,除此之外的任何其他符号是不能作为标识符使用的。 (2)标识符中的第一个字符不能为数字。 (3)标识符不能为Java的关键字,但Java的关键字可作为标识符的一部分。 (4)区分大小写,如Ad、ad、aD是不同的标识符。 (5)长度不限,但不宜过长,尽量做到知名达意。 (6)注意“_”和“-”的区别,减号是不能作为标识符的。 为了提高程序的
16、可读性,SUN公司推荐在Java编程时使用一下的习惯约定: (1)类名:可由一个或若干个名词组成,每个名词首字母大写,其他小写。如AccountBook、Complex Variable。 (2)接口:规则同类名。如Account。 (3)方法:由一个或多个动词组成,开头小写,动词间区分用大写,其他小写。如balanceAccount。 (4)变量:小写字母开头,单词间用大写字母讲个。如currentCustomer。 (5)常量:所有字母大写,单词间用下划线区分。如MAXIMUM_SIZE。 2.1.2关键字 关键字是Java语言本身使用的标识符,均采用小写形式。 2.1.3
17、注释符 注释内容在编译时会被编译器忽略。 Java的注释有三种形式:单行注释、多行注释和文档注释。 (1)单行注释。也叫双斜杠注释,即在注释内容前使用一个双斜杠(//),表示从斜杠开始到本行结束都是注释内容,编译器不需要编译这部分内容。 【例2-1】单行注释示例。 class Example1 { public static void main(String[] args) { System.out.println("单行注释示例"); //在屏幕上输出 } } (2)多行注释。这种注释以“/*”开始,以“*/
18、结束,两组符号必须成对出现。一般使用该注释来注销目前不再使用但仍想保留的代码行,或者像让它在调试过程中暂时失效。 【例2-2】多行注释示例。 class Example2 { public static void main(String[] args) { /* System.out.println("单行注释示例"); //在屏幕上输出 */ System.out.println("多行注释示例"); } } //程序结束 (3)文档注释。文档注释主要放在类、接口
19、方法和成员变量定义的前面,用于对这些对象的解释。除了便于阅读理解外,主要目的是为了用Javadoc工具生成API文档。这种注释以“/**”开始,以“*/”结束。 【例2-3】文档注释示例。 /** * 标题:文档注释 * 描述:距离说明文档注释的注释方法 * 版权:Copyright(c)2008 * 公司:XXX *@version version1.5 */ class Example3 { public static void main(String[] args) { System.out.println("文档注释示例"); }
20、} //程序结束 2.1.4运算符及分隔符 运算符,是用来执行某种运算(如加法+、减法-、乘法*)的符号。 Java中的运算符有很多,如算术运算符、逻辑运算符、关系运算符灯。 分隔符是为了将程序代码组织成编译器可以理解的形式,常见的分隔符有()、{}、[]、;和空格。 2.2 Java数据类型及使用 Java语言中包含两大类数据类型:基本数据类型和引用数据类型(如图2-1所示)。 Java的基本数据类型长度是固定的,可以跨平台自由移植。 在Java中,基本数据类型主要有4种。 1.整数型 Jav
21、a定义了4种整数类型:byte、short、int、long,见表2-2 2.浮点型 浮点数即实数,包括整数和小数两部分。 Java中有两种浮点数—float和double,分别代表单精度型和双精度型。 3.字符型 在Java中,用于存储字符的数据类型是char。 4.布尔值 在Java中,用于存储布尔值的数据类型是boolean,占1位,其布尔常量只有两个值:true和false。 引用数据类型是指由基本数据类型组合成的较复杂的数据类型。 不同类型的数据既可以以变量的形式出现,也可以以常量的形式出现。 变量的值在程序执行期间是可变的,而常量的值是不可改变的,它们都代表内存
22、中指定的存储单元。 将数据指定给变量,就是将数据存储至对应的内存空间;调用变量,就是将对应的内存空间的数据取出来使用。 在Java中要使用变量,必须先进行定义。 其语法为: 数据类型 变量名[=初值]; double javaScore=98.5;//定义一个双精度浮点型变量javaScore存储分数 String name=”jenny”;//定义一个字符串变量那么存储姓名 char sex=”女”;//定义一个字符型变量sex存储性别 变量必须经定义初始化后才能使用,否则编译器在编译时会报告这个错误。 variable var might not have been in
23、itiallzed. 在Java中写下“0.0”这么一个常数,其默认为double数据类型。 【例2-4】各种类型变量的使用。 class Example4 { public static void main(String[] args) { int ageOfStudent = 3; double scoreOfStudent = 90.0; char levelOfStudent = 'A'; System.out.println("年级,得分,等级"); System.out.println(ageOfStudent+","+scoreOfS
24、tudent+","+levelOfStudent+","); } } 2.2.3常量 常量是不可改变的数值,按其类型可以分为整型常量、浮点型常量、布尔型常量、字符常量和字符串常量。 (1)整型常量。可分为int型和long型,默认为int型,long型在数值后加L。 (2)浮点型常量。有单精度和双精度之分,缺省为双精度,单精度在数值后加f,双精度在数值后加d或者D。 (3)布尔型常量。布尔常量只包括true和false两个值,表示逻辑运算结果的真或假。 C语言中布尔值用1或者0来表示。 (4)字符常量。用单引号(’’)括起来的一个字符。如’a’,’H’。 Java语言可
25、使用转义字符转’\’来标记特殊字符。常用的转义字符见表2-4。 (5)字符串常量。用双引号(””)括起来的一串字符,如“Good monrning”。 但在Java中,字符串常量是作为String类的一个对象来处理的,而不是一个基本数据类型。 2.2.4类型转换 类型转换有3种情况:自动转换、强制转换和使用类的方法转换。 (1)自动转换。将低精度类型数据赋给高精度类型数据时能进行自动转换。如: byte b1 = 10, b2 = 20; int b3 = b1 + b2; //将byte类型数据转换为int型赋给int型变量。 (2)强制转换。高精度类型到低精度类型必须强制
26、转换,这是数据可能会丢失部分信息。如: char key = (char)(12+55); //变量key被赋值为Unicode值为67的字符’c’ (3)使用类的方法转换。如 String str = “123”; int a = Integer.parseInt(str); //使用Integer类的方法parseInt将String转换为对应的整数。 2.3运算符及表达式 运算符是指对操作数所进行的运算。按照操作数的数目,可分为一元运算符(如++、--)、二元运算符(如+、-)和三元运算符(如?:),分别操作一个、两个和三个操作数。 表达式是用运算符把操作对象连接起来的
27、符合一定规则的式子。 表达式只有两类:数值和逻辑值。 整数相除,其值为整数。如表达式3/5的值为0,而不是0.6。 2.3.1算术运算符和算术表达式 其用法见表2-5 先乘除后加减,必要时加上括号表示运算的先后顺序。 System.out.println((double)(1+2+3) / 4); 注意在上面的程序代码中使用了double限定类型转换,如果不加上这个限定,程序的输出会是1而不是1.5,这是因为在该程序中,1、2、3、4这4个数值都是整数,程序运行(1+2+3)后的结果还是整数类型,若此时处以整数4,会自动去除小数点之后的数字再进行输出,而加上double限定,表
28、示要将(1+2+3)运算的值转换为double数据类型,这样再除以4,小数点之后的数字才不会被去除。 int testNumber = 10; System.out.println(testNumber / 3.0); //第一种方法 System.out.println((double)testNumber / 3); //第二种方法 如果表达式中有一个浮点数,则程序就会先转换使用浮点数来运用。 当将精确度小的数据类型(如int)指定给精确度大的数据类型变量(如double)时,精确度并不会失去。 如果确定要转换数值为较小的精度,必须明确加上转换的限定符,编译器才不会报告错误
29、 2.3.2关系运算符和关系表达式 关系运算符用来对两个值进行比较,返回布尔类型的值true和false。 关系运算符都是二元运算符,其用法如表2-6所示。 在Java中,条件成立时以true表示,不成立时以false表示。 【例2-5】关系运算的使用。 import java.util.*; public class ComparisonOperator { public static void main(String[] args){ int jeny = 75; //jeny成绩为75 Scanner input = new Scanner(Syste
30、m.in); //输入的一种方法 System.out.println("请输入joe的成绩:"); int joe = input.nextInt(); boolean result = jeny > joe; System.out.println("jeny的成绩高于joe吗?" + result); } } String s1 = “hello”; String s2 = new String(“hello”); System.out.println(s1 == s2); //显示false System.out.println(s1.equa
31、ls.(s2)); //显示true 2.3.3逻辑运算符和逻辑表达式 表2-7列出了各种逻辑运算符的运算规则。 【例2-6】逻辑运算符示例。 public class LogicalOperator { public static void main(String args[]) { int number = 75; System.out.println((number > 70 && number < 80)); System.out.println((number > 80 || number < 75)); System.out.printl
32、n(!(number > 80 && number < 75)); } } 3.4 赋值运算符和赋值表达式 见表2-8。 可以提高运算的效率。 int i = 5; int a = --i; i的值是4,而对应的a也是4。 2.3.5条件运算符和条件表达式 其格式如下: 条件式 ? 成立返回值 :失败返回值 【例2-7】条件运算符示例。 import java.util.Scanner; public class ConditionalOperator { public static void main(String[] args){ Scanner
33、scanner = new Scanner(System.in); System.out.println("请输入学生分数:"); int scoreOfStudent = scanner.nextInt(); System.out.println("该生是否及格?" + (scoreOfStudent >= 60 ? '是' : '否')); } } 【例2-8】判断使用者输入的是否为奇数。 import java.util.Scanner; public class OddDecider1 { public static void main(Strin
34、g[] args){ Scanner scanner = new Scanner(System.in); System.out.println("请输入数字:"); int number = scanner.nextInt(); System.out.println("是否为奇数?" + (number % 2 != 0 ? '是' : '否')); } } 奇数表示不能被2整除,所以余数一定不是0。 2.3.6各类运算符的优先级和结核性 见表2-9。 2.4 Java语句及控制流语句 2.4.1 Java语句 2.4.2分支控制语句 1.Java
35、提供了if条件式语句 if、else if、else,必须是逻辑表达式,其结果必须返回false或true。 true执行完后将跳出整个条件选择语句,否则接着判断后面的条件。如果所有条件的值都是false,则执行else后面的语句。如果这个条件选择语句中没有使用else部分,则什么都不做,继续执行后面的代码。 条件选择语句中除了if必须有之外,其他部分都可以省略。 【例2-9】判断输入的数是否为奇数。 import java.util.Scanner; public class OddDecider2 { public static void main(String[] ar
36、gs){ Scanner scanner = new Scanner(System.in); System.out.println("请输入数字:"); int input = scanner.nextInt(); int remain = input % 2; if (remain == 1) System.out.println(input + "为奇数"); else System.out.println(input + "为偶数"); } } 【例2-10】按考试成绩划分等级。 import java.util.Scann
37、er; public class ScoreLevel1 { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); System.out.println("请输入考试成绩:"); int score = scanner.nextInt(); if (score >= 90) System.out.println("优秀"); else if (score >= 80 && score < 90) System.out.printl
38、n("良好"); else if (score >= 70 && score < 800) System.out.println("中等"); else if (score >= 60 && score < 70) System.out.println("及格"); else System.out.println("不及格"); } } if(条件式1) if(条件式2) 语句1; else 语句2; 执行情况? 2.switch多分支语句 switch只能比较数值或字符。 default不一定需要。 【例2-11】按
39、成绩排名jeny可出人不同的职务,第1名可出任班长,第2名可出任学习委员,第3-5名可出任副班长,其他名词不能担任班干部。请根据目前jeny的成绩,作出判定。 import java.util.Scanner; public class ScoreLevel2 { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); System.out.println("请输入jeny的名次:"); int level = scanner.nextInt(); s
40、witch (level) { case 5: case 4: case 3: System.out.println("可出任副班长"); break; case 2: System.out.println("可出任学习委员"); break; case 1: System.out.println("可出任班长"); break; default: System.out.println("不能担任班干部"); } } } case5、case4中没有任何语句,也没有使用break,所
41、以程序会继续往下执行,直到遇见break跳出switch为止。 2.4.3循环语句 循环的意思就是反复执行某一段代码,直到满足一定的结束条件为止。 Java提供了4种循环控制语句:while、do……while、for和for……each。 1.while语句 其语法如下: while(条件){ 语句; } 如果循环体只有一个语句,则while的{}可以省略;while循环一般适用于循环次数不确定的情况。 【例2-12】输入某班级的学员成绩,并计算平均值,输入-1时,结束。 import java.util.Scanner; public class S
42、coreAverage { public static void main(String[] args){ Scanner scanner = new Scanner(System.in); int score = 0; int sum = 0; int count = -1; while(score != -1) { count++; sum += score; System.out.println("请输入学员的成绩(-1结束)!"); score = scanner.nextInt(); } System
43、out.println("全班平均成绩为:" + (double)sum / count); } } 2.do……while语句 先执行循环体,然后再进行条件判断。 do……while的语法如下所示: do { 语法一; 语法二; …… } while(条件式); 【例2-13】重复判断输入数据的奇偶数。 import java.util.Scanner; public class OddDecider3 { public static void main(String[] args){ Scanner scanner = new Scanner(Sy
44、stem.in); int input = 0; int replay = 0; do { System.out.println("输入整数值"); input = scanner.nextInt(); System.out.println("输入数位奇数?" + ((input % 2 == 1) ? 'Y' : 'N')); System.out.println("继续(1:继续 0:结束)?"); replay = scanner.nextInt(); } while(replay == 1); } } 3.for语
45、句 for(初始表达式;循环条件;循环迭代) {语句组; } 【例2-14】定位输出’0’~’9’字符及ASCII码,每行5个。 public class ListCharacters { public static void main(String args[]) { int i = 0; for(char c = '0';c<= '9'; c++,i++){ if(i % 5 == 0){ System.out.println(""); } System.out.print("c: " + (int)c + "\t"); } } } 4.for^each循环 21 / 21






