1、 一、Java基础 1.1特点 * 面向对象、平台无关性、分布式、可靠和安全、多线程。 * Java是一种跨平台的语言,同时也是既编译又解释的语言。Java可以运行在网络不同的计算机上,但运行的计算机上必须装有相应的Java解释器。这种解释器被称为JVM(Java 虚拟机)。 1.2 Java运行流程 (1)先应该创建源程序,Java源程序一般用java作为扩展名,是一个文本文件,用Java语言写成,可以用任何文本编辑器创建与编辑;(2)源程序完成后,就可以进行编译,需要使用Java编译器“javac”,读取源程序并翻译成Java虚拟机能够明白的指令集合,且以字节码的形式保存在
2、文件中。通常,字节码文件以class作为扩展名;(3)Java解释器即“java”,读取字节码,取出指令并且翻译成计算机能执行的代码,完成运行过程;该字节码运行的平台是Java虚拟机。只要计算机上装有Java虚拟机,无论采用那种操作系统,硬件配置情况如何,运行的结果都是一样的 1.3 JVM Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用模式Java虚拟机屏蔽了与具体平台相
3、关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。 1.4 下载和安装JDK * Java不仅是编程语言,还是一个开发平台,Java技术给程序员提供了许多工具:编译器、解释器、文档生成器和文件打包工具等等。 * SUN公司网站,或者百度“JDK 下载”,很容易下载到安装文件(1.6和1.7均可)。 * 运行jdk-…….exe文件,即可安装。 * java环境变量配置: 以WIN7 为例 右键单击计算机,然后选择属性,然后->高级系统设置
4、>环境变量 (a)设置系统变量JAVA_HOME 系统变量->新建->变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.6.0 注意:填写的是JDK的安装路径,最好复制粘贴。如果安装时选择的默认设置,JDK的安装路径很可能是C:\Program Files (x86)\java\jdk1.6.0_10,此时JAVA_HOME 变量值为C:\Program Files (x86)\java\jdk1.6.0_10 (b)设置系统变量Path 找到系统变量Path,双击鼠标左键进入编辑状态,在变量值的最后面加上;%JAVA_HOME%\b
5、in (c)设置系统变量ClassPath 若原来已经有系统变量ClassPath,则直接编辑变量值,在变量值得最后面加上 ;%JAVA_HOME%\lib 若原来没有系统变量ClassPath,则选择新建系统变量,变量名为ClassPath,变量值为.;%JAVA_HOME%\lib(注意:不要少了分号前面的一点 .) 1.5 Java application和Java applet Java语言可以编写两种类型程序,一种是Java application应用程序,一种是Java applet小应用程序(只能在www浏览器环境下运行,因此还必须建立一个HTML文件来调用App
6、let程序)。 一个Java application由一个或者多个class文件组成。其中有一个class定义了main()方法,该类被称为主类,即该类可以独立运行。 1.6 一个简单的java程序实例 public class Hello { public static void main(String [] args) { System.out.println("欢迎学习Java"); } } * 可以使用记事本来编辑,也可以使用开发工具软件,如Eclipse、JBuilder等。 * 程序以类(class)的形式存在;一个类要能被解释器直接启动运行,
7、必须有main方法;通常把含有main方法的类称为主类。 * 源文件的名称一定要和主类的名称保持一致; * 源文件的扩展名为java; * Java语言区分大小写; * 运行:(1)在MS-DOS界面下,首先进入保存了文件Hello.java的目录(比如,Hello.java文件保存在e:\java文件夹中,则在进入MS-DOS状态后,先键入e: 后回车,然后再键入cd\java后回车;(2)javac Hello.java;(3) java Hello *System.out.println( ) 与System.out.print( )的区别。 1.7 注释 为了使编
8、写的程序便于阅读,常常在代码中插入注释。 * 文档注释,对整个程序的功能等进行说明 /**开头,*/结束,可以跨行 * 单行注释 // * 多行注释 /*开头,*/结束,可以跨行 例: 在上面的Hello.java程序代码中插入如下的注释,运行结果不变。 /** * 2008 itzcn * 版权所有 */ public class Hello //对类进行声明 { public static void main(String [] args) /*下面是方法的内容,注意花括号和分号的使用*/ { System.out.println
9、"欢迎学习Java"); System.out.println("这是我的第一个Java程序"); } } 注意:如果使用System.out.print,则在屏幕输出时不换行。 System.out.println("欢迎学习Java")等效于System.out.print("欢迎学习Java\n"); 二、语法基础 2.1 标识符与关键字 2.1.1标识符 标识符就是一个名字。规则如下: (1)可以是字母、下划线、美元符号或数字,长度没有限制; (2)第一个字符不能是数字; (3)不能是true、false、 null和被赋予特殊意义或用途的关键字(
10、详见教材P17)。 2.1.2 关键字 特殊用途、特殊含义的50个单词 2.1.3 Unicode字符集 各种字符的编码,最多可以识别65536个字符 2.2数据类型 数据包括常量和变量。变量只有定义之后才能使用! 2.2.1 基本数据类型 Java可将数据类型分为两类,一种是面向对象的类型,而另一种则是非面向对象的基本数据类型(共8种)。在本节将详细介绍Java的基本数据类型和类型转换。 类型 关键字 占用内存 取值范围 字节型 byte 一个字节 -128 ~ 127 短整型 short 两个字节 -32768 ~ 32767 整型
11、 int 四个字节 -2147483648 ~ 2147483647 长整型 long 八个字节 -9223372036854775808L ~ 9223372036854775807L 单精度浮点型 float 四个字节 1.4E-45 ~ 3.4028235E38 双精度浮点型 double 八个字节 4.9E-324 ~ 1.7975931348623157E308 字符型 char 两个字节 0 ~ 65535或\u0000到\uFFFF 布尔型 boolean 一个字节 true或false (注意有4种整型,2种浮点型) pu
12、blic class Type01 { public static void main(String[] args) { char a='A'; /* 字符型,用单引号括起来的一个字符,Unicode集;用双引号把字符串括起来,则为string类,但已经不属于基本数据类型,而是面向对象的数据类型*/ byte b=044; //8进制 short c=0x44; //16进制 long d=0x100ffL; //长整型,后面要加L float e=1.01f/0.3f; //含小数的数,后面加f为float型 double f=1.
13、0/3.0; //含小数的数,默认为double型;若把0取消呢? boolean g=true; System.out.println("a="+a); System.out.println("b="+b); System.out.println("c="+c); System.out.println("d="+d); System.out.println("e="+e); System.out.println("f="+f); System.out.println("g="+g); } } 2.2.2 类型转换 用常量、变量或表达式给另一个变量赋值时,两者的数据
14、类型必须一致,即所赋值的类型必须是能被变量接受的数据类型。如果不一致,则需要进行类型转换,即从一种数据类型转换到另一种数据类型。类型转换可以分为隐式转换(自动类型转换)和显式转换(强制类型转换)两种。 * 隐式转换:不同类型的数据混合运算时,自动按照低级类型数据转换成高级类型数据的规则进行。byte__short__int__long__float__double;char__int 例如:在double a=3.14*5中,Java会自动把5转换为double型的数据,然后和double型数据3.14进行运算;如果把3.14*5的结果保存为int型,即int a=3.14*5,则会出
15、现损失精度的问题,这种情况下需要用到强制转换。 * 强制转换: public class Type02 { public static void main(String[] args) { int a=(int)3.14*5; //用括号加数据类型来实现强制转换 System.out.println("a="+a); } } char型数据可以和65536以内的整数之间相互转化,详见教材P19例Example2_1.java 2.3变量和常量 * 变量:用字母命名(一般第一个单词的首字母为小写,第二个单词的首字母大写),必须定义之后才能使用;可以则
16、定义的同时赋初值。如: inta,b=3,c=4; double d=3.14; 变量的命名规则 *常量:若要将字母或者单词(一般全部用大写字母)定义为常量,需用final来声明。 例:从键盘输入r的值,然后以此为半径的圆的面积和球的体积。 import java.util.Scanner; //导入Scanner类 class DemoCircle { public static void main(String[] args) { final double PAI=3.14159; double r,mj,tj; System.ou
17、t.println("请从键盘上输入圆的半径:"); Scanner sc=new Scanner(System.in); //定义一个名叫sc的对象 r=sc.nextDouble(); //使用对象的方法 mj=PAI*r*r;tj=4*PAI*r*r*r/3; System.out.println("圆的面积为:"+mj); System.out.println("圆的体积为:"+tj); } } *关于输入和输出,见教材P22和P23 *关于转义符,见教材P19,只要求掌握 \n ,\b和\t. 如System.out.println(
18、"欢迎学习\tJava");的输入结果是Java之前空若干格。 2.4运算符 2.4.1 算术运算符 * 自加++和自减--,特别注意运算符号在数的前面和后面的区别。 public class Ys01 { public static void main(String args[]) { int x=1; int a=++x; //x先增加1,然后赋值给a int b=x++; //x先赋值给b,然后再增加1 System.out.println("a="+a); System.out.println("b="+b);
19、System.out.println("x="+x); } } 2.4.2关系运算符 * 返回true或false * 等于符号是==,不等于是!= 2.4.3逻辑运算符 ! && || 例如,(3==4)||(3<4) 的结果是true 2.4.4条件运算符(了解,不作要求) int a=10,b=23 int max=(a>b)?a:b; //满足条件为a,不满足条件为b 2.4.5 位运算符 整数型数据在计算机内存中以二进制的形式来表示。针对数据二进制表示时的位进行的运算。 位与:a&b,都是1,则结果为1,否则为0. 位或:a|b,都是0,
20、则结果为1,否则为0. 位异或:a^b,相同,则结果为0,否则为1. 例:教材P37 public class Ys02 { public static void main(String args[]) { char a1='十',a2='点',a3='进',a4='攻'; char secret='A'; a1=(char)(a1^secret); a2=(char)(a2^secret); a3=(char)(a3^secret); a4=(char)(a4^secret)
21、 System.out.println("密文:"+a1+a2+a3+a4); a1=(char)(a1^secret); a2=(char)(a2^secret); a3=(char)(a3^secret); a4=(char)(a4^secret); System.out.println("原文:"+a1+a2+a3+a4); } } 三、控制语句 程序控制语句分为三类:(1)条件语句(分支语句),包括if语句和switch语句;(2)迭代语句(循环语句),包括for循环语句、while循环语句和
22、do-while循环语句;(3)跳转语句,包括break语句、continue语句和return语句。 3.1条件语句 3.1.1 单向分支(if) import java.util.Scanner; public class Tj01 { public static void main(String[] args) { System.out.println("输入一个学生成绩:"); Scanner sc=new Scanner(System.in); //构造一个名为sc的对象,也可使用其他对象名 intiScore=sc.nextInt(); //
23、使用对象sc的方法 if(iScore<0 || iScore>100) { System.out.print("你的输入有错误!");} System.out.print("该学生得分为:"+iScore+"谢谢使用!"); } } 3.1.2 双向分支(if-else) import java.util.Scanner; public class DemoIfTj02 { public static void main(String[] args) { System.out.println("输入一个学生成绩:"); Scanne
24、r sc=new Scanner(System.in); intiScore=sc.nextInt(); if(iScore<60) {System.out.print("该学生得分为:"+iScore+"不及格!");} else {System.out.print("该学生得分为:"+iScore+"及格了!");} } } 3.1.3嵌套 import java.util.Scanner; public class Tj03 { public static void main(String[] args) { S
25、ystem.out.println("输入一个学生成绩:"); Scanner sc=new Scanner(System.in); intiScore=sc.nextInt(); if(iScore<60) {System.out.print("该学生得分为:"+iScore+"不及格!");} else{ if(iScore<75) {System.out.print("该学生得分为:"+iScore+"及格!");} else { if(iScore<90) {System.out.print("该学生得分为:"+iScore+"
26、良好!");} else {System.out.print("该学生得分为:"+iScore+"优秀!");} }} }} 注意:嵌套语句写起来和读起来都比较麻烦,如果条件清楚,初学的时候可以使用组合条件。比如上例可以写为: import java.util.Scanner; public class Tj03 { public static void main(String[] args) { System.out.println("输入一个学生成绩:"); Scanner sc=new Scanner(System.in);
27、 int iScore=sc.nextInt(); if(iScore>=0 && iScore<60) {System.out.print("该学生得分为:"+iScore+"不及格!");} if(iScore>=60 && iScore<75) {System.out.print("该学生得分为:"+iScore+"及格!");} if(iScore>=75 && iScore<90) {System.out.print("该学生得分为:"+iScore+"良好!");} if(iScore>=90 && iScore<=100){System
28、out.print("该学生得分为:"+iScore+"优秀!");} if(iScore<0 || iScore>100) {System.out.print("输入有误!");} }} 3.1.4开关语句(switch) 详见教材P42-43 例:从键盘任意输入一个正整数,判断是否中奖(9、131、12为三等奖,209、596、27为二等奖,875、316、59为一等奖,其余整数没有奖) import java.util.Scanner; public class Tj04{ public static void main(String args[]
29、) { int number=0; System.out.println("输入正整数(回车确定)"); Scanner reader=new Scanner(System.in); number = reader.nextInt(); switch(number) { case 9 : case 131 : case 12 : System.out.println(number+"是三等奖"); break; case 209 : case 596 : case 27
30、 : System.out.println(number+"是二等奖"); break; case 875 : case 316 : case 59 : System.out.println(number+"是一等奖"); break; default: System.out.println(number+"未中奖"); } }} *switch( )括号中的参数常用int型和char型的,不能使用long型数据;注意break语句的作用。 * 思考:输入一个百分
31、制的成绩,如何分级(优秀、良好、及格和不及格)?(提示:将成绩除以一个适当的数,可以缩小分支数量) 3.2 循环语句 3.2.1 for循环 例:输入一个正整数,计算出它的所有因子 import java.util.*; //调入util包中的所有类,包括了scanner类 public class Xh01 { public static void main(String[] args) { System.out.println("输入一个数:"); Scanner scan=new Scanner(System.in); int a=sca






