JAVA自学教程全面讲解_第1页
JAVA自学教程全面讲解_第2页
JAVA自学教程全面讲解_第3页
JAVA自学教程全面讲解_第4页
JAVA自学教程全面讲解_第5页
已阅读5页,还剩961页未读 继续免费阅读

下载本文档

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

文档简介

NIIT全球IT教育领先者Java

实用教程

JavaNIITJAVA自学教程全面讲解目录第1章 Java环境及配置第2章Java基本语法第3章类和接口第4章JavaApplet第5章Java图形处理第6章Java用户界面技术第7章异常、事件和多线程机制第8章输入输出技术第9章Java数据库技术第10章Java安全技术第11章Java网络技术(一)第12章Java网络技术(二)第13章Servlet技术第14章Java读写XML技术JAVA自学教程全面讲解第1章Java环境及配置1.1Java概述1.2Java语言的特点1.3Java应用分类1.4JDK包的下载与安装1.5Java环境配置1.6例子程序习题JAVA自学教程全面讲解1.1Java概述Java是一种编程语言,它提供了一个同时用于程序开发、应用和部署的环境。Java语言主要定位于网络编程,使得程序可以最大限度地利用网络资源。JAVA自学教程全面讲解1.2Java语言的特点1.跨平台性所谓的跨平台性,是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行。这是软件发展的趋势和编程人员追求的目标。之所以这样说,是因为计算机硬件的种类繁多,操作系统也各不相同,不同的用户和公司有自己不同的计算机环境偏好,而软件为了能在这些不同的环境里正常运行,就需要独立于这些平台。JAVA自学教程全面讲解

而在Java语言中,Java自带的虚拟机很好地实现了跨平台性。Java源程序代码经过编译后生成二进制的字节码是与平台无关的,但是可被Java虚拟机识别的一种机器码指令。Java虚拟机提供了一个字节码到底层硬件平台及操作系统的屏障,使得Java语言具备跨平台性。JAVA自学教程全面讲解2.面向对象面向对象是指以对象为基本粒度,其下包含属性和方法。对象的说明用属性表达,而通过使用方法来操作这个对象。面向对象技术使得应用程序的开发变得简单易用,节省代码。Java是一种面向对象的语言,也继承了面向对象的诸多好处,如代码扩展、代码复用等。JAVA自学教程全面讲解

3.安全性安全性可以分为四个层面,即语言级安全性、编译时安全性、运行时安全性、可执行代码安全性。语言级安全性指Java的数据结构是完整的对象,这些封装过的数据类型具有安全性。编译时要进行Java语言和语义的检查,保证每个变量对应一个相应的值,编译后生成Java类。运行时Java类需要类加载器载入,并经由字节码校验器校验之后才可以运行。Java类在网络上使用时,对它的权限进行了设置,保证了被访问用户的安全性。JAVA自学教程全面讲解

4.多线程多线程在操作系统中已得到了最成功的应用。多线程是指允许一个应用程序同时存在两个或两个以上的线程,用于支持事务并发和多任务处理。Java除了内置的多线程技术之外,还定义了一些类、方法等来建立和管理用户定义的多线程。JAVA自学教程全面讲解

5.简单易用

Java源代码的书写不拘泥于特定的环境,可以用记事本、文本编辑器等编辑软件来实现,然后将源文件进行编译,编译通过后可直接运行,通过调试则可得到想要的结果。JAVA自学教程全面讲解1.3Java应用分类

1.应用程序典型的通用程序可以在具备Java运行环境的设备中独立运行,它又分为:

GUI应用程序:即图形用户界面程序,可实现丰富的输入界面和输出显示。命令行程序:无需界面,只需在命令行下运行,运行结果只在后台发生变化,可以将输出存放到文件中。嵌入式应用程序:Java语言的平台独立性决定了它可以嵌入到不同的设备中,且只需具备必要的运行环境即可。JAVA自学教程全面讲解

2.Servlets服务器端应用程序服务器端的应用程序用来收集客户端的数据输入,对数据进行处理之后,返回相应的响应给客户。它主要用来实现与客户端的交互。JAVA自学教程全面讲解

3.Applets小应用程序

Applets应用于网络上,嵌入在HTML网页中,支持Java的浏览器都可以对它进行解释并运行。通常通过一个HTML标签<APPLET></APPLET>来识别并运行Applets。小应用程序的类在服务器端,当浏览器显示网页时,它随之下载到本地,由本地的浏览器载入运行。JAVA自学教程全面讲解1.4JDK包的下载与安装JavaDevelopKit简称为JDK,是Sun公司免费发行的软件包,可以从Sun网站免费下载,也可以从其它国内地址下载。JDK版本从1.02开始,目前版本发展到1.4,其中高级版本对低级版本实现向下兼容。运用这个软件包,就可以对Java源程序进行编译和运行。本书中下载使用的JDK包为j2sdk-1_4_0_012-windows-i586.exe。下载后双击图标,即可进行安装,默认的安装目录为C:\j2sdk1.4.0_01。本书作者将安装目录改为D:\j2sdk1.4.0_01。JAVA自学教程全面讲解1.5Java环境配置JDK包安装完成后,需要设置环境变量。用鼠标右键单击桌面上的图标“我的电脑”,选择“属性”项,出现标题为“系统特性”的对话框,点击“高级”标签,可以看见有一个“环境变量”按钮,如图1.1所示。JAVA自学教程全面讲解图1.1“系统特性”对话框JAVA自学教程全面讲解

单击“环境变量”按钮,可以看见本机环境变量,如图1.2所示。上面为用户变量,下面为系统变量,随着操作系统或用户环境的不同,变量名、值有所不同。这里需要修改三个用户变量:include、lib和path,分别将JDK包安装之后的相应路径包含到这三个用户变量中。JAVA自学教程全面讲解图1.2“环境变量”对话框JAVA自学教程全面讲解

选中include变量,单击“编辑”按钮,弹出标题为“编辑用户变量”的对话框,如图1.3所示。在变量值一栏的最后添加“;D:\j2sdk1.4.0_01\include”,“;”表示与前面的各项隔开,后面的路径是JDK包的安装路径下的include目录。图1.3为作者修改include变量的情况,注意你的安装路径可能与作者的有所不同,要以你的安装路径为基准进行修改。JAVA自学教程全面讲解图1.3编辑include变量JAVA自学教程全面讲解

选中lib变量,单击“编辑”按钮,弹出标题为“编辑用户变量”的对话框,如图1.4所示。在变量值一栏的最后添加“;D:\j2sdk1.4.0_01\lib”,“;”表示与前面的各项隔开,后面的路径是JDK包的安装路径下的lib目录。图1.4为作者修改lib变量的情况,注意你的安装路径可能与作者的有所不同,要以你的安装路径为基准进行修改。JAVA自学教程全面讲解图1.4编辑lib变量JAVA自学教程全面讲解

选中path变量,单击“编辑”按钮,弹出标题为“编辑用户变量”的对话框,如图1.5所示。在变量值一栏的最后添加“;D:\j2sdk1.4.0_01\bin”,“;”表示与前面的各项隔开,后面的路径是JDK包的安装路径下的bin目录。图1.5为作者修改path变量的情况,注意你的安装路径可能与作者的有所不同,同样要以你的安装路径为基准进行修改。JAVA自学教程全面讲解图1.5编辑path变量JAVA自学教程全面讲解1.6例子程序【例1.1】源程序名称为HelloWorld.java,命令行提示符下输出字符串“HelloWorld”。源代码如下://程序文件名称为HelloWorld.javapublicclassHelloWorld{ publicstaticvoidmain(Stringargs[]) { System.out.println("HelloWorld"); }}JAVA自学教程全面讲解

用记事本或者专用的编辑工具如EditPlus等进行编辑,并将文件存为HelloWorld.java。建议使用像EditPlus这样的编辑软件,可使得代码更加清晰且风格良好。运行“开始”菜单→程序→附件→命令提示符,载入命令行程序,在命令行状态下,进入源程序所在的目录,图1.6所示的例子程序的目录在“E:\_Work\Java\sample”下,然后键入命令“javacHelloWorld.java”。若编译不通过,会产生错误提示。若编译通过,则没有任何提示,同时进入命令行等待状态,如图1.6所示。这时,命令行虽然没有提示,但在源程序的路径下生成一个新的文件为HelloWorld.class。这个.class文件就是编译后生成的类文件,运行此文件,需在命令行状态中键入命令“javaHelloWorld”,然后按回车键,此时程序就会运行并输出“HelloWorld”。输出完毕,立即退出程序,进入命令行等待状态,如图1.7所示。JAVA自学教程全面讲解图1.6编译源程序HelloWorldJAVA自学教程全面讲解图1.7运行HelloWorld应用程序JAVA自学教程全面讲解

这里用到的命令Javac和Java都是JDK软件包自带的。从JDK安装路径的bin目录下可以看到javac.exe,这是编译程序,源程序编译通过后就生成.class文件;而Java.exe就是载入类的运行程序,运行时根据源程序的指令要求产生正确的输出或结果。如果没有进行环境配置,直接编译或者运行Java源程序,系统会提示找不到这些命令,所以必须进行环境配置后再使用。JAVA自学教程全面讲解【例1.2】小应用程序的例子。输出“HelloWorld!”,如图1.8所示。源程序代码如下://程序文件名称为HelloApplet.javaimportjava.awt.Graphics;importjava.applet.Applet;publicclassHelloAppletextendsApplet{ publicvoidpaint(Graphicsg) { g.drawString("HelloWorld!",50,25); }}JAVA自学教程全面讲解

小应用程序代码书写和编译完成后,无法独立运行,需要一个载体或者容器。下面的HTML网页代码就是小应用程序载入的容器。<!--程序文件名称为HelloApplet.html--><HTML><HEAD><TITLE>HTMLTestPage</TITLE></HEAD>JAVA自学教程全面讲解<BODY>HelloAppletwillappearbelowinaJavaenabledbrowser.<BR><APPLETCODEBASE="."CODE="HelloApplet.class"NAME="TestApplet"WIDTH=400HEIGHT=300HSPACE=0VSPACE=0ALIGN=middle></APPLET></BODY></HTML>JAVA自学教程全面讲解图1.8Applet显示“HelloWorld!”JAVA自学教程全面讲解习题1.简述Java的特点。2.简述Java的分类情况。3.进行Java环境的安装和配置。4.编写应用程序,屏幕上输出“欢迎来到Java世界!”。5.编写Applet,输出“欢迎来到Java世界!”。JAVA自学教程全面讲解第2章Java基本语法2.1Java程序的构成2.2数据类型、变量和常量2.3运算符和表达式2.4流程控制2.5数组的使用习题JAVA自学教程全面讲解2.1Java程序的构成2.1.1逻辑构成

Java源程序逻辑构成分为两大部分:程序头包的引用和类的定义。

1.程序头包的引用主要是指引用JDK软件包自带的包,也可以是自己定义的类。引用之后程序体中就可以自由应用包中的类的方法和属性等。JAVA自学教程全面讲解2.类的定义

Java源程序中可以有多个类的定义,但必须有一个主类,这个主类是Java程序运行的入口点。在应用程序中,主类为包含main方法的类;在Applet中,主类为用户自定义的系统Applet类的扩展类。在Java源程序中,主类的名字同文件名一致。类的定义又包括类头声明和类体定义。类体中包括属性声明和方法描述。下面来看一个例子,其中斜体表示的语句行为主类类头,主类类头下面从大括号“{”开始到“}”结束的部分称为主类类体。JAVA自学教程全面讲解【例2.1】下面是一个应用程序,也是一个Applet,既可以在命令行下运行,也可以嵌入到HTML网页中用appletviewer命令运行。运行时在界面上的第一个文本框中输入你的名字,按回车键后,在第二个文本框中会显示“XXX,欢迎你来到Java世界!”,运行结果如图2.1所示。//程序文件名称为WelcomeApplet.java注释语句引入包publicclassWelcomeAppletextendsAppletimplementsActionListener主类类头

{JAVA自学教程全面讲解属性init方法JAVA自学教程全面讲解actionPerformed方法JAVA自学教程全面讲解main主方法JAVA自学教程全面讲解图2.1程序界面JAVA自学教程全面讲解2.1.2物理构成

Java源程序物理上由三部分构成,分别为语句、块和空白。

(1)语句指一行以分号“;”结束的语句。

(2)块指用括号对{}界定的语句序列,块可以嵌套使用。

(3)空白指语句之间、块内部或者块之间的空白行。空白不影响Java源程序的编译和运行,适当地运用空白,可以形成良好的代码风格。JAVA自学教程全面讲解在例1.1中, LabellblName;TextFieldtxtName;TextFieldtxtDisp;都是语句,而

{ lblName=newLabel("请输入您的名字:"); txtName=newTextField(8); txtDisp=newTextField(20); add(lblName); add(txtName); add(txtDisp); txtName.addActionListener(this); }是块,语句之间、块之间或块内部的空行都为空白。JAVA自学教程全面讲解2.1.3注释语句注释语句主要用来进行一些说明,或者标记一些无用的程序语句。有两种注释方法,行注释为以//开始的行;块注释以/*开始和*/结束,Java编译器忽略注释后的程序语句或说明。例如,下面的语句就是注释语句用来说明程序文件名称的。//程序文件名称为WelcomeApplet.java上述的语句注释可以更改为:/*程序文件名称为WelcomeApplet.java*/或/*程序文件名称为WelcomeApplet.java*/JAVA自学教程全面讲解2.1.4标识符、关键字和转义符在Java语言中,标识符是赋予变量、类和方法等的名称。标识符由编程者自己指定,但需要遵循一定的语法规范:

(1)标识符由字母、数字、下划线(_)、美元符号($)组成,但美元符号用得较少。

(2)标识符从一个字母、下划线或美元符号开始。

(3)Java语言中,标识符大小写敏感,必须区别对待。

(4)标识符没有最大长度的限制,但最好表达特定的意思。

(5)标识符定义不能是关键字。JAVA自学教程全面讲解

关键字又称保留字,是指Java语言中自带的用于标志数据类型名或者程序构造名等的标识符,如public、double等。转义符是指一些有特殊含义的、很难用一般方式表达的字符,如回车、换行等。所有的转义符以反斜线(\)开头,后面跟着一个字符来表示某个特定的转义符,如表2.1所示。JAVA自学教程全面讲解表2.1转义符JAVA自学教程全面讲解2.2数据类型、变量和常量2.2.1数据类型

Java编程语言定义了八种基本的数据类型(见表2.2),共分为四类:整数类(byte、short、int、long)、文本类(char)、浮点类(double、float)和逻辑类(boolean)。JAVA自学教程全面讲解表2.2Java的数据类型JAVA自学教程全面讲解1.整数类(1)采用三种进制——十进制、八进制和十六进制。2——十进制值是2;077——首位的0表示这是一个八进制的数值;0xBAAC——首位的0x表示这是一个十六进制的数值。(2)具有缺省int。(3)用字母“L”和“l”定义long。(4)所有Java编程语言中的整数类型都是带符号的数字。JAVA自学教程全面讲解

2.文本类

(1)代表一个16bitUnicode字符。

(2)必须包含用单引号('')引用的文字。

(3)使用下列符号:

'a'——一个字符。

'\t'--一个制表符。

'\u????'--一个特殊的Unicode字符,????应严格使用四个十六进制数进行替换。JAVA自学教程全面讲解

3.浮点类默认为double类型,如果一个数字包括小数点或指数部分,或者在数字后带有字母F或f(float)、D或d(double),则该数字为浮点数。JAVA自学教程全面讲解4.逻辑类boolean数据类型有两种值:true和false。例如:booleanflag=true;上述语句声明变量flag为boolean类型,它被赋予的值为true。JAVA自学教程全面讲解2.2.2变量与常量常量是指整个运行过程中不再发生变化的量,例如数学中的π=3.1415……,在程序中需要设置成常量。而变量是指程序的运行过程中发生变化的量,通常用来存储中间结果,或者输出临时值。变量的声明也指变量的创建。执行变量声明语句时,系统根据变量的数据类型在内存中开辟相应的存储空间并赋予初始值。变量有一个作用范围,超出它声明语句所在的块就无效。JAVA自学教程全面讲解

下面看一个使用各种类型变量声明并改变的示例。程序中pi为常量,s1、i1、l1、ch1、f1、d1、b1为全局变量,可以在方法change中发生改变,然后在方法main中输出。而s2、i2、l2、ch2、f2、d2、b2是方法main的局部变量,它们的作用范围只局限于方法main中。

【例2.2】测试不同数据类型的变量,程序输出如图2.2所示。源程序代码如下://程序文件名称为SetVariable.javapublicclassSetVariable{ //全局变量JAVA自学教程全面讲解 staticdoublepi=3.141592654;//数学常量 staticshorts1; staticinti1; staticlongl1; staticcharch1; staticfloatf1; staticdoubled1; staticbooleanb1; publicstaticvoidmain(Stringargs[]) {JAVA自学教程全面讲解 //局部变量

shorts2=35; inti2=-32; longl2=34555L; charch2='A'; floatf2=897.89F; doubled2=34.345; booleanb2=false; //输出常量

System.out.println("数学常量pi="+pi); //输出局部变量JAVA自学教程全面讲解System.out.println("******局部变量******");System.out.println("短整型变量s2="+s2);System.out.println("整型变量i2="+i2);System.out.println("长整型变量l2="+l2);System.out.println("字符变量ch2="+ch2);System.out.println("浮点数类型f2="+f2);System.out.println("双精度型变量d2="+d2);System.out.println("布尔型变量b2="+b2);//调用方法修改全局变量的值JAVA自学教程全面讲解change();//输出全局变量的值System.out.println("******全局变量******");System.out.println("短整型变量s1="+s1);System.out.println("整型变量i1="+i1);System.out.println("长整型变量l1="+l1);System.out.println("字符变量ch1="+ch1);System.out.println("浮点数类型f1="+f1);System.out.println("双精度型变量d1="+d1);System.out.println("布尔型变量b1="+b1);}JAVA自学教程全面讲解//方法:修改全局变量的值

publicstaticvoidchange(){ s1=125; i1=88; l1=987654321L; ch1='B'; f1=3.2590F; d1=-1.04E-5; b1=true;}}JAVA自学教程全面讲解图2.2变量输出结果JAVA自学教程全面讲解2.3运算符和表达式Java常用的运算符分为五类:算术运算符、赋值运算符、关系运算符、布尔逻辑运算符、位运算符。位运算符除了简单的按位操作外,还有移位操作。按位操作返回布尔值。表达式是由常量、变量、对象、方法调用和操作符组成的式子。表达式必须符合一定的规范,才可被系统理解、编译和运行。表达式的值就是对表达式自身运算后得到的结果。根据运算符的不同,表达式相应地分为以下几类:算术表达式、关系表达式、逻辑表达式、赋值表达式,这些都属于数值表达式。JAVA自学教程全面讲解2.3.1算术运算符及算术表达式

Java中常用的算术运算符如下:

+ 加运算符

- 减运算符 * 乘运算符

/ 除运算符

% 取模运算(除运算的余数) ++ 增量运算符

-- 减量运算符JAVA自学教程全面讲解【例2.3】测试运算符及表达式,程序输出如图2.3所示。源程序代码如下://程序文件名称为NumberOper.javapublicclassNumberOper{ publicstaticvoidmain(Stringargs[]) { //变量初始化

inta=30; intb=20; //定义结果变量

intr1,r2,r3,r4,r5,r6,r7,r8,r9; //计算结果

r1=a+b;JAVA自学教程全面讲解 r2=a-b; r3=a*b; r4=a/b; r5=a%b; r6=a++; r7=b--; r8=++a; r9=--b; //输出结果

System.out.println("a="+a+"b="+b);//a,b的值

System.out.println("a+b="+r1); System.out.println("a-b="+r2);JAVA自学教程全面讲解 System.out.println("a*b="+r3); System.out.println("a/b="+r4); System.out.println("a%b="+r5); System.out.println("a++="+r6); System.out.println("b--="+r7); System.out.println("++a="+r8); System.out.println("--b="+r9);}}JAVA自学教程全面讲解图2.3程序输出结果JAVA自学教程全面讲解2.3.2关系运算符关系运算符用于比较两个数据之间的大小关系,关系运算表达式返回布尔值,即“真”或“假”。Java中的常用关系运算符如下:== 等于!= 不等于> 大于< 小于>= 大于等于<= 小于等于JAVA自学教程全面讲解【例2.4】编写程序,测试关系运算符及其表达式,程序输出如图2.4所示。源程序代码如下://程序文件名称为TestRelation.javapublicclassTestRelation{ publicstaticvoidmain(Stringargs[]) { //变量初始化

inta=30; intb=20; //定义结果变量

booleanr1,r2,r3,r4,r5,r6; //计算结果JAVA自学教程全面讲解 r1=a==b; r2=a!=b; r3=a>b; r4=a<b; r5=a>=b; r6=a<=b; //输出结果

System.out.println("a="+a+"b="+b); System.out.println("a==b="+r1); System.out.println("a!=b="+r2); System.out.println("a>b="+r3); System.out.println("a<b="+r4); System.out.println("a>=b="+r5); System.out.println("a<=b="+r6);}}JAVA自学教程全面讲解图2.4程序输出结果JAVA自学教程全面讲解2.3.3布尔逻辑运算符表2.3布尔运算符及规则JAVA自学教程全面讲解

图2.3为布尔逻辑运算符及其规则示例等。其中简洁与和简洁或的执行结果分别与非简洁与和非简洁或的执行结果是一致的,不同在于简洁与检测出符号左端的值为假时,不再判断符号右端的值,直接将运算结果置为假;而简洁或与非简洁或的不同在于简洁或检测出符号左端为真时,不再判断符号右端的值,直接将运算结果置为真。例如:Booleana=false;Booleanb=true;a&&b检测到a为假,则无需判断b的值,直接将值置为假;而b||a时检测到b为真,则无需判断a的值,直接将值置为真。JAVA自学教程全面讲解【例2.5】测试布尔表达式,程序输出结果如图2.5所示。源程序代码如下://程序文件名称为TestLogic.javapublicclassTestLogic{ publicstaticvoidmain(Stringargs[]) { //变量初始化

booleana=false; booleanb=true; //定义结果变量

booleanr1,r2,r3,r4,r5,r6; //计算结果JAVA自学教程全面讲解 r1=!a; r2=a&b; r3=a|b; r4=a^b; r5=a&&b; r6=a||b; //输出结果

System.out.println("a="+a+"b="+b); System.out.println("!a="+r1); System.out.println("a&b="+r2); System.out.println("a|b="+r3); System.out.println("a^b="+r4); System.out.println("a&&b="+r5); System.out.println("a||b="+r6); }}JAVA自学教程全面讲解图2.5程序输出结果JAVA自学教程全面讲解2.3.4位运算符Java中的常用位运算符如下:~ 位求反& 按位与| 按位或^ 按位异或<< 左移>> 右移>>> 不带符号右移右移运算符对应的表达式为x>>a,运算的结果是操作数x被2的a次方来除,左移运算符对应的表达式为x<<a,运算的结果是操作数x乘以2的a次方。JAVA自学教程全面讲解【例2.6】测试位运算符<<和>>,程序输出结果如图2.6所示。源程序代码如下://程序文件名称为TestBit.javapublicclassTestBit{ publicstaticvoidmain(Stringargs[]) { //变量初始化

inta=36; intb=2; //定义结果变量

intr1,r2;JAVA自学教程全面讲解 //计算结果

r1=a>>b; r2=a<<b; //输出结果

System.out.println("a="+a+"b="+b); System.out.println("a>>b="+r1); System.out.println("a<<b="+r2);}}JAVA自学教程全面讲解图2.6程序输出结果JAVA自学教程全面讲解2.3.5赋值运算符赋值运算符分为简单运算符和复杂运算符。简单运算符指“=”,而复杂运算符是指算术运算符、逻辑运算符、位运算符中的双目运算符后面再加上“=”。表2.4列出Java常用的赋值运算符及其等价表达式。 JAVA自学教程全面讲解表2.4赋值运算符及其等价表达式JAVA自学教程全面讲解2.3.6其它操作符及其表达式三目运算符(?:)相当于条件判断,表达式x?y:z用于判断x是否为真,如果为真,表达式的值为y,否则表达式的值为z。例如:intx=5;inta=(x>3)?5:3;则a的值为5。如果x=2,则a的值为3。JAVA自学教程全面讲解

对象运算符(instanceof)用来判断一个对象是否属于某个指定的类或其子类的实例,如果是,返回真(true),否则返回假(false)。例如:

booleanb=userObjectinstanceofApplet用来判断userObject类是否是Applet类的实例。JAVA自学教程全面讲解2.3.7优先级表2.5运算符优先级JAVA自学教程全面讲解2.4流程控制

流程控制分为三种基本结构:顺序结构、分支结构和循环结构。顺序结构是指命令行顺序执行,这是最常见的一个格式;分支结构是一种选择结构,根据条件的值选择不同的执行流程,可以得到不同的结果。分支结构包括单分支语句(if-else语句)和多分支语句(switch语句);循环结构是指对于一些重复执行的语句,用户指定条件或次数,由机器自动识别执行。循环结构包括次数循环语句(for语句)和条件循环语句(while语句)。JAVA自学教程全面讲解2.4.1分支语句分支语句分为两类:单分支语句和多选语句。1.if-else语句if-else语句的基本格式为:if(布尔表达式){

语句或块1;}else{

语句或块2;}JAVA自学教程全面讲解

其中:

(1)布尔表达式返回值为true或false。

(2)如果为true,则执行语句或块1,执行完毕跳出if-else语句。

(3)如果为false,则跳过语句或块1,然后执行else下的语句或块2。JAVA自学教程全面讲解【例2.7】测试if-else语句,如果x>10,则输出x的值,并提示结果正确,否则输出x=10,提示结果不正确。程序输出结果如图2.7所示。源程序代码如下://程序文件名称为TestIf.javapublicclassTestIf{ //声明全局变量x staticintx; publicstaticvoidmain(Stringargs[]) { x=12; if(x>10) {JAVA自学教程全面讲解 System.out.println("x="+x+"结果正确"); } else System.out.println("x=10"+"结果不正确"); change(); System.out.println("修改x的值之后"); if(x>10) { System.out.println("x="+x+"结果正确"); } else System.out.println("x=10"+"结果不正确");}JAVA自学教程全面讲解//change方法:修改x的值publicstaticvoidchange(){ x=5;}}JAVA自学教程全面讲解图2.7程序输出结果JAVA自学教程全面讲解2.switch语句switch语句的基本格式为:switch(表达式1){case表达式2:

语句或块2; break;case表达式3:

语句或块3; break;case表达式4:

语句或块4; break;default:

语句或块5; break;}JAVA自学教程全面讲解其中:(1)表达式1的值必须与整型兼容。(2) case分支要执行的程序语句。(3)表达式2、3、4是可能出现的值。(4)不同的case分支对应着不同的语句或块序列。

(5) break表示跳出这一分支。JAVA自学教程全面讲解【例2.8】测试switch语句,当x=1、2、3时,分别打印1、2、3,x不为这三个值时,打印x的值。程序输出结果如图2.8所示。源程序代码如下://程序文件名称为TestSwitch.javapublicclassTestSwitch{ publicstaticvoidmain(Stringargs[]) //声明变量x intx; x=12;JAVA自学教程全面讲解 System.out.println("x=12时打印的值"); choose(x); x=3; System.out.println("x=3时打印的值"); choose(x);}//choose方法:switch语句结构publicstaticvoidchoose(intx){ switch(x) {JAVA自学教程全面讲解 case1: System.out.println(1); break; case2: System.out.println(2); break; case3: System.out.println(3); break; default: System.out.println(x); } } }JAVA自学教程全面讲解图2.8程序输出结果JAVA自学教程全面讲解2.4.2for循环语句for循环语句实现已知次数的循环,其基本格式为:for(初始化表达式;测试表达式;步长){

语句或块;}JAVA自学教程全面讲解

其执行顺序如下:

(1)首先运行初始化表达式。

(2)然后计算测试表达式,如果表达式为true,执行语句或块;如果表达式为false,退出for循环。

(3)最后执行步长。JAVA自学教程全面讲解【例2.9】用for循环统计1~100(包括100)之间数的总和。程序输出结果如图2.9所示。源程序代码如下://程序文件名称为TestFor.javapublicclassTestFor{ publicstaticvoidmain(Stringargs[]) { intsum=0; for(inti=1;i<=100;i++) sum+=i; System.out.println("1到100(包括100)的数的总和为:"+sum); }}JAVA自学教程全面讲解图2.9程序输出结果JAVA自学教程全面讲解2.4.3while循环语句

while循环语句实现受条件控制的循环,其基本格式为:

while(布尔表达式){

语句或块;}

当布尔表达式为true时,执行语句或块,否则跳出while循环。JAVA自学教程全面讲解上面for循环语句的例子改为while语句后如下所示:

intsum=0; inti=1; while(i<=100) { sum+=i;i++;} System.out.println("1到100(包括100)的数的总和为:"+sum);JAVA自学教程全面讲解2.4.4do语句do语句实现受条件控制的循环,其基本格式为:do{

语句或块;}while(布尔表达式)JAVA自学教程全面讲解

先执行语句或块,然后再判断布尔表达式。与while语句不同,当布尔表达式一次都不为true时,while语句一开始判断就跳出循环,不执行语句或块,而在do语句中则要执行一次。上面那个例子改为do循环为:

intsum=0;inti=1;do{ sum+=i; i++;}while(i<=100);System.out.println("1到100(包括100)的数的总和为:"+sum);JAVA自学教程全面讲解2.5数组的使用2.5.1数组声明数组的定义如下:

(1)首先是一个对象。

(2)存放相同的数据类型,可以是原始数据类型或类类型。

(3)所有的数组下标默认从0开始,而且访问时不可超出定义的上限,否则会产生越界错误。JAVA自学教程全面讲解

数组声明时实际是创建一个引用,通过代表引用的这个名字来引用数组。数组声明格式如下:数据类型标识符[]

例如:

inta[];//声明一个数据类型为整型的数组apencilb[];//声明一个数据类型为pencil类的数组bJAVA自学教程全面讲解2.5.2创建数组由于数组是一个对象,所以可以使用关键字new来创建一个数组,例如:a=newint[10];//创建存储10个整型数据的数组ab=newpencil[20];//创建存储20个pencil类数据的数组b

数组创建时,每个元素都按它所存放数据类型的缺省值被初始化,如上面数组a的值被初始化为0,也可以进行显式初始化。在Java编程语言中,为了保证系统的安全,所有的变量在使用之前必须是初始化的,如果未初始化,编译时会提示出错。有两种初始化数组的方式,分别如下:JAVA自学教程全面讲解(1)创建数组后,对每个元素进行赋值。a[0]=5;a[1]=4;...a[9]=10;(2)直接在声明的时候就说明其值,例如:inta[]={4,5,1,3,4,20,2};说明了一个长度为7的一维数组。JAVA自学教程全面讲解【例2.10】编写程序测试数组,程序输出结果如图2.10所示。源程序代码如下://程序文件名称为TestArray.javapublicclassTestArray{ publicstaticvoidmain(Stringargs[]) { //声明数组

inta[]; charb[]; //创建数组JAVA自学教程全面讲解 a=newint[3]; b=newchar[2]; //数组初始化

for(inti=0;i<3;i++) { a[i]=i*3; } b[0]='a'; b[1]='b'; //快速初始化数组

intc[]={0,1*3,2*3}; //输出结果

System.out.print("数组a\n");JAVA自学教程全面讲解 for(inti=0;i<2;i++) { System.out.print(b[i]+""); } System.out.print("\n数组c\n"); for(inti=0;i<3;i++) { System.out.print(c[i]+""); }}}JAVA自学教程全面讲解图2.10程序输出结果JAVA自学教程全面讲解习题1.给出下列表达式的值。(1)3++4<<2^-8 (2)"abc"&123||8<<2(3)36>>2*4&&48<<8/4+2 (4)2*4&&0<2||4%22.编写程序,统计课程编号为1001、1002、2001和3001的平均成绩并输出。学生成绩表如图2.11所示。【每个课程编号的成绩用数组存储,读取时循环操作】JAVA自学教程全面讲解图2.11习题2.2的成绩表JAVA自学教程全面讲解3.根据上题得出的考生平均成绩进行判断,如果在90分以上,屏幕上输出“课程编号为XXXX的考生平均成绩为优”;在80~90分之间输出“课程编号为XXXX的考生平均成绩为良”;在70~80分之间输出“课程编号为XXXX的考生平均成绩为中”,在60~70分之间输出“课程编号为XXXX的考生平均成绩为及格”;60分以下输出“课程编号为XXXX的考生平均成绩为不及格”。

4.编写程序,用数组实现乘法小九九的存储和输出。【提示:采用多个一维数组。】JAVA自学教程全面讲解第3章类和接口3.1类3.2接口3.3常用数据结构及类习题JAVA自学教程全面讲解3.1类3.1.1类的定义和声明

Java编程语言是面向对象的,处理的最小的完整单元为对象。而现实生活中具有共同特性的对象的抽象就称之为类。类由类声明和类体构成,类体又由变量和方法构成。下面给出一个例子来看一下类的构成。

【例3.1】自定义一个apple类,在主类SetApple中创建实例并调用方法,输出结果如图3.1所示。源程序代码如下:JAVA自学教程全面讲解//程序文件名为SetApple.javapublicclassSetApple{ publicstaticvoidmain(String[]args) { applea=newapple();//创建apple类

a.appleweight=0.5;//实例变量赋值

System.out.println("苹果的重量为1两"); System.out.println(a.bite());//调用实例方法

a.appleweight=5; System.out.println("苹果的重量为5两"); System.out.println(a.bite()); }}JAVA自学教程全面讲解//自定义类classapple{ //属性

longapplecolor;//对应苹果的颜色

doubleappleweight;//苹果的重量

booleaneatup;//是否吃完

//类方法

publicbooleanbite() { if(appleweight<1) { System.out.println("苹果已经吃完了!哈哈"); eatup=true; }JAVA自学教程全面讲解 else { System.out.println("苹果吃不下了!:("); eatup=false; } returneatup;}}JAVA自学教程全面讲解图3.1自定义类的应用JAVA自学教程全面讲解

1.类声明的基本格式访问说明符class类名extends超类名implements接口名其中:

(1)访问说明符为public或者缺省。public用来声明该类为公有类,可以被别的对象访问。声明为公有的类存储的文件名为类名。

(2)类名:用户自定义的标识符,用来标志这个类的引用。

(3)超类名:是指已经存在的类,可以是用户已经定义的,也可以是系统类。

(4)接口名:即后面讲到的接口。JAVA自学教程全面讲解

例如:

publicclassHelloAppletextendsApplet

访问说明符为public,类名HelloApplet,扩展类为JDK包自带的java.applet.Applet类。由于public的存在,所以文件名必须存为HelloApplet.java,同类名保持一致。JAVA自学教程全面讲解

2.类体类体包括成员变量和方法。

(1)成员变量:指类的一些属性定义,标志类的静态特征,它的基本格式如下:访问说明符数据类型变量名其中:●访问说明符有public、private和protected三种:

public:省略时默认为公有类型,可以由外部对象进行访问。

private:私有类型,只允许在类内部的方法中使用,若从外部访问,必须通过构造函数间接进行。

Protected:受保护类型,子类访问受到限制。●数据类型包括基本类型以及用户自定义的扩展类型。JAVA自学教程全面讲解(2)方法:是类的操作定义,标志类的动态特征,它的基本格式如下:●访问说明符数据类型方法名(数据类型1变量名1,数据类型2变量名2)

其中:●访问说明符为public、private和protected,其使用方法与成员变量访问说明符的使用方法一致。●数据类型:包括基本数据类型和用户自定义的扩展类型。●数据类型为参数。JAVA自学教程全面讲解3.创建类的实例使用关键字new进行创建,例如:HelloApplethp=newHelloApplet();例3.1中,自定义类apple,访问标识符缺省,定义三个属性:longapplecolor;//对应苹果的颜色doubleappleweight;//苹果的重量

booleaneatup;//是否吃完JAVA自学教程全面讲解一个方法为:

publicbooleanbite()//类方法{...}公有类SetApplet中引用自定义类,首先创建类的实例:

applea=newapple();其次赋初值:

a.appleweight=0.5;//实例变量赋值最后调用它的方法:

System.out.println(a.bite());//调用实例方法JAVA自学教程全面讲解3.1.2类的单继承性

Java编程语言中允许用extends关键字从一个类扩展出一个新类,新类继承超类的成员变量和方法,并可以覆盖方法。

【例3.2】测试类的单继承性,程序输出结果如图3.2所示。源程序代码如下://程序文件名TestExtend.javapublicclassTestExtendextendsEmployee{ publicstaticvoidmain(String[]args) { System.out.println("覆盖的方法调用:"+getSalary("王一",500));JAVA自学教程全面讲解System.out.println("继承的方法调用:"+getSalary2("王一",500));System.out.println("覆盖的方法调用:"+getSalary("王飞",10000));System.out.println(“继承的方法调用:”+getSalary2(“王飞 ",10000));}publicstaticStringgetSalary(Stringname,intsalary){ Stringstr; if(salary>5000) str="名字:"+name+"Salary:"+salary; else str="名字:"+name+"Salary:低于5000";JAVA自学教程全面讲解 returnstr;}};classEmployee{publicStringname;//名字publicintsalary;//薪水publicstaticStringgetSalary(Stringname,intsalary){ Stringstr; str="名字:"+name+"Salary:"+salary; returnstr;}JAVA自学教程全面讲解publicstaticStringgetSalary2(Stringname,intsalary){ Stringstr; str="名字:"+name+"Salary:"+salary; returnstr;}};JAVA自学教程全面讲解

程序中定义了父类Employee类,它有两个方法getSalary和getSalary2,方法体的实现都是一致的,都为输出名字和薪水的值。在TextExtend主类中覆盖了getSalary方法,方法体重新定义为薪水低于5000时并不输出薪水的值而是输出“低于5000”,用于和继承的getSalary2方法进行比较。由图3.2可以看出覆盖的方法按主程序中重定义的方法调用,而继承的方法直接调用父类中的方法。JAVA自学教程全面讲解图3.2测试单继承性程序的输出结果JAVA自学教程全面讲解3.1.3特殊变量类中有两个特殊变量super和this。

1.super

类声明中用关键字extends扩展了其超类之后,super用在扩展类中引用其超类中的成员变量。

【例3.3】使用super变量,输出结果如图3.3所示。源程序代码如下://程序文件名为UseSuper.javapublicclassUseSuper{JAVA自学教程全面讲解 publicstaticvoidmain(String[]args) { Managerm=newManager(); ="王飞"; m.salary=10000; m.department="业务部"; System.out.println(m.getSalary()); }}classEmployee{JAVA自学教程全面讲解 publicStringname;//名字

publicintsalary;//薪水

//方法

publicStringgetSalary() { Stringstr; str="名字:"+name+"\nSalary:"+salary;returnstr; }}classManagerextendsEmployeeJAVA自学教程全面讲解{publicStringdepartment;//部门

//方法

publicStringgetSalary(){//使用super变量调用超类的方法

returnsuper.getSalary()+"\nDepartment:"+department;}}JAVA自学教程全面讲解图3.3测试super变量的输出JAVA自学教程全面讲解2.thisthis变量指向当前对象或实例。

str="名字:"+name+"\nSalary:"+salary;

上例中的语句可以换成下面的语句。

str="名字:"++"\nSalary:"+this.salary;

这两者是等同的,因为在Java编程语言中,系统自动将this关键字与当前对象的变量相关联。但有一种情况例外,就是当在某些完全分离的类中调用一个方法并将当前对象的一个引用作为参数传递时。例如:

Dayd=newDay(this);JAVA自学教程全面讲解3.1.4构造函数类中的构造函数用来初始化一个类。构造函数为公有类型,无返回值,用来从类实例中访问类时初始化此类的私有变量。

【例3.4】基于例3.3将公有变量改成私有变量之后,增加两个构造函数,访问通过外部调用构造函数实现初始化赋值,得到如图3.3所示的结果。//程序文件名为UseConstruct.javapublicclassUseConstruct{ publicstaticvoidmain(String[]args) {JAVA自学教程全面讲解Managerm=newManager("王飞",10000,"业务部");//初始化赋值System.out.println(m.getSalary());}}classEmployee{privateStringname;//名字

privateintsalary;//薪水

//构造函数

publicEmployee(String_name,int_salary){JAVA自学教程全面讲解 name=_name; salary=_salary;}publicStringgetSalary(){ Stringstr; str="名字:"+name+"\nSalary:"+salary; returnstr;}}classManagerextendsEmployee{ privateStringdepartment;JAVA自学教程全面讲解 //构造函数

publicManager(String_name,int_salary,String_department) { super(_name,_salary); department=_department; } publicStringgetSalary() { returnsuper.getSalary()+"\nDepartment:"+department; }}JAVA自学教程全面讲解3.1.5包计算机操作系统使用文件夹或者目录来存放相关或者同类的文档,在Java编程语言中,提供了一个包的概念来组织相关的类。包在物理上就是一个文件夹,逻辑上代表一个分类概念。包就是指一组类。例如一个名叫Company的包,可以包含一组类,如Employee(雇员)、Manager(管理者)和Department(部门)等。声明包的基本格式如下:

Package包名;JAVA自学教程全面讲解

其中:Package为关键字,包名为标识符。使用包时的注意事项如下:

(1)Package语句要作为程序非注释语句的第一行语句。

温馨提示

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

评论

0/150

提交评论