Java程序设计教程Word文档格式.docx
《Java程序设计教程Word文档格式.docx》由会员分享,可在线阅读,更多相关《Java程序设计教程Word文档格式.docx(106页珍藏版)》请在冰豆网上搜索。
C/C++语言中用goto语句实现无条件跳转,而Java语言没有goto语言,通过例外处理语句try、catch、finally来取代之,提高了程序的可读性,也增强了程序的鲁棒性。
c.指针
指针是C/C++语言中最灵活,但也是最容易出错的数据类型。
Java中通过“引用”操作内存。
d.内存管理
在C语言中,程序员使用库函数malloc()和free()来分配和释放内存,
C++语言中则是运算符new和delete。
在Java中,通过运算符new分配内存并得到对象的使用权。
垃圾回收机制负责回收无用内存。
e.数据类型的一致性
在C/C++语言中,不同的平台上,编译器对简单的数据类型如int、float等分别分配不同的字节数。
例如:
int在IBMPC上为16位,在VAX-11上就为32位,导致了代码数据的不可移植。
在Java中,对数据类型的位数分配总是固定的,而不管是在任何的计算机平台上。
因此就保证了Java数据的平台无关性和可移植性。
f.类型转换
在C/C++语言中,可以通过指针进行任意的类型转换,不安全因素大大增加。
而在Java语言中系统要对对象的处理进行严格的相容性检查,防止不安全的转换。
Java与C/C++语言的比较
g.头文件
在C/C++语言中使用头文件声明函数(类)的原型和全局变量及库函数等,在大的系统中,维护这些头文件是非常困难的。
Java不支持头文件,类成员的类型和访问权限都封装在一个类中,运行时系统对访问进行控制,防止非法的访问。
同时,Java中用import语句与其它类进行通信,以便访问其它类的对象。
h.结构和联合
C/C++语言中用结构和联合来表示一定的数据结构,但是由于其成员均为公有的,安全性上存在问题。
Java不支持结构和联合,通过类把数据结构及对该数据的操作都封装在类里面。
i.预处理
C/C++语言中有宏定义,而用宏定义实现的代码往往影响程序的可读性,而Java不支持宏定义。
Java程序的分类
在Java中可以编写两类程序:
应用程序(applications)和JavaApplet(小应用程序)。
应用程序是可以在控制台上直接运行的程序,在创建应用程序时,Java与其他高级编程语言没有太大区别,而Java的特色就在于它具有编制小应用程序的功能。
小应用程序是可以在Internet中传输并在兼容Java的Web浏览器中运行的应用程序。
小应用程序实际上就是小型的Java程序,能像图像文件、声音文件和视频片段那样通过网络动态下载,它与其他文件的重要差别是,小应用程序是一个智能的程序,能对用户的输入作出反应,并且能动态变化,而不是一遍又一遍地播放同一动画或声音。
搭建Java开发环境
下载JDK(也就是J2SE),成功安装。
(2)设置环境变量
我的电脑->
属性->
高级->
环境变量添加以下环境变量(假定你的Java安装在c:
\jdk1.6)
Java_HOME=c:
\jdk1.6
CLASSPATH=.;
c:
\jdk1.6\lib\dt.jar;
\jdk1.6\lib\tools.jar(.;
已经不能少,因为它代表当前路径)
PATH=%Java_HOME%\bin
PATH变量是让系统找到.exe执行程序的所在
(3)编写Java程序
目前常用的JavaIDE包括Borland公司的JBuilder,IBM的Eclipse,微软的visualJ++和Sun的NeatBeans,Xinox的JCreator等。
建议初学者使用记事本编写Java程序,可以对基础知识掌握牢固些。
注:
将文本文件的扩展名改为.Java。
三种平台
J2SE:
Java2StandardEdition,主要目的是为台式机和工作站提供一个开发和运行的平台。
J2EE:
Java2EnterpriseEdition,主要目的是为企业计算提供一个应用服务器的运行和开发平台。
J2EE本身是一个开放的标准,任何软件厂商都可以推出自己的符合J2EE标准的产品,使用户可以有多种选择。
IBM、Oracle、BEA、HP等29家已经推出了自己的产品,其中尤以BEA公司的weglogic产品和IBM公司的websphare最为著名。
J2EE将逐步发展成为可以与微软的.NET战略相对抗的网络计算平台。
J2ME:
Java2MicroEdition,主要是面向消费电子产品。
JDK常用命令
1、javac.exe:
编译器
用来编译源文件,生成字节码文件。
例如:
javacMyFile.java
Javac可以使用参数-d指定生成的字节码文件所在的目录,否则Javac在当前目录生成字节码文件。
javac–dF:
\Tom\MyFileHello.java
2、java.exe:
解释器
将字节码翻译成本地机器码,运行程序。
javaHello
3、appletviewer:
小应用程序浏览器
用来运行Applet程序
appletviewerHello.html
4、javadoc:
API文档生成器
5、javap:
类文件反汇编器
用来分析字节码文件javapAAA
也可以使用参数-private显示类中的所有成员变量和方法
javap–privateAAA
Java源程序结构
一个完整的Java源程序应该包括下列部分:
(1)package语句;
//该部分至多只有一句,必须放在源程序的第一句
(2)import语句;
/*该部分可以有若干import语句或者没有,必须放在所有的类定义之前*/
(3)publicclassDefinition;
//公共类定义部分,至多只有一个公共类的定义,Java语言规定该Java源程序的文件名必须与该公共类名完全一致
(4)classDefinition;
//类定义部分,可以有0个或者多个类定义
(5)interfaceDefinition;
//接口定义部分,可以有0个或者多个接口定义
Java源程序结构
例如一个Java源程序可以是如下结构,该源程序命名为HelloWorldApp.Java:
packagejavawork.helloworld;
/*把编译生成的所有.class文件放到包javawork.helloworld中*/
importjava.awt.*;
//告诉编译器本程序中用到系统的AWT包
importjavawork.newcentury;
/*告诉编译器本程序中用到用户自定义的包javawork.newcentury*/
publicclassHelloWorldApp{......}/*公共类HelloWorldApp的定义,名字与文件名相同*/
classTheFirstClass{......}//第一个普通类TheFirstClass的定义
classTheSecondClass{......}//第二个普通类TheSecondClass的定义
......//其它普通类的定义
interfaceTheFirstInterface{......}/*第一个接口TheFirstInterface的定义*/
......//其它接口定义
Java编程命名规范
包名:
包名是全小写的名词,中间可以由点分隔开,例如:
java.awt.event
类名:
首字母大写,通常由多个单词合成一个类名,要求每个单词的首字母也要大写,例如classHelloWorldApp;
接口名:
命名规则与类名相同,例如interfaceCollection;
方法名:
往往由多个单词合成,第一个单词通常为动词,首字母小写,中间的每个单词的首字母都要大写,例如:
balanceAccount, isButtonPressed;
变量名:
全小写,一般为名词,例如:
length;
常量名:
基本数据类型的常量名为全大写,如果是由多个单词构成,可以用下划线隔开,例如:
intYEAR,intWEEK_OF_MONTH;
如果是对象类型的常量,则是大小写混合,由大写字母把单词隔开。
Java语言中的注释
单行注释:
从"
//"
开始到本行结束的内容都是注释,
多行注释:
在"
/*"
和"
*/"
之间的所有内容都是注释,
文档注释:
在注释方面Java提供一种C/C++所不具有的文档注释方式。
其核心思想是当程序员编完程序以后,可以通过JDK提供的Javadoc命令,生成所编程序的API文档,而该文档中的内容主要就是从文档注释中提取的。
该API文档以HTML文件的形式出现,与Java帮助文档的风格与形式完全一致。
凡是在“/**”和“*/”之间的内容都是文档注释。
例如下面的DocTest.Java文件:
/**这是一个文档注释的例子,主要介绍下面这个类*/
publicclassDocTest{
/**变量注释,下面这个变量主要是充当整数计数*/
publicinti;
/**方法注释,下面这个方法的主要功能是计数*/
publicvoidcount(){}
}
Java语言中的注释
运行"
Javadoc-d.\doc
DocTest.Java"
,就在当前目下的doc目录中生成了介绍类DocTest的index.html等文件。
注意:
生成的doc文档包括一系列的.html文件和资源文件,Javadoc仅生成public和protected标识的属性和方法,private标识的不显示在index.html文件中。
如果在该.Java文件中包含其他类声明(如classsubclass1等),Javadoc不为其包含的其他类生成任何说明文档,因为没有public关键字。
第二章面向对象技术
面向对象的基本特征
1.封装性
(1)把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象)。
(2)信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系。
要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的"
交叉感染"
,使软件错误能够局部化,大大减少查错和排错
的难度。
(1)private
类中限定为private的属性和方法,只能在这个类中进行访问。
不能在这个类以外访问。
见源文件private限定词练习
(2)default
类中不加任何访问权限限定的成员属于缺省的(default)访问状态:
也称为友元(friendly),可以在这个类本身和同一个包中的其他类中使用。
同一个包中的其他类是指:
A与B在同一个包中,在B中创建了A的一个对象a,A定义了protected类型的成员,那么a可以访问自己的protected类型的成员。
见default限定词练习
(3)protected
类中限定为protected的成员,可以在这个类本身、同一个包中的其他类和子类中访问。
(4)public
类中用public定义的属性和方法,可以在任何类中使用(无论是否在一个包中,是否是父子关系)。
见public限定词练习
2.继承性
子类拥有父类的属性和方法,无需在子类中重新定义。
一个类可以从多个父类那里继承属性和方法。
继承性的最大优点是:
解决代码重复编写
3.多态性
父类中定义的属性或方法被特殊类继承之后,可以具有不同的值或表现出不同的行为。
这使得同一个属性或方法在一般类及其各个特殊类中具有不同的语义。
成员方法的修饰符
static:
类方法,可通过类名直接调用
abstract:
抽象方法,没有方法体
final:
方法不能被重写
native:
一般用来声明用其它语言书写的方法。
以非Java字节码的二进制代码形式嵌入Java程序的,影响跨平台性。
synchronized:
控制多个并发线程的访问
throwsexceptionList:
该方法可能抛出的异常列表
方法体
方法体是该方法所要完成的功能体现,它包括局部变量的声明以及所有合法的Java指令。
方法体中声明的局部变量的作用域在该方法内部。
若局部变量与类的成员变量同名,则类的成员变量被隐藏。
构造方法
(1)构造方法是一个特殊的方法。
Java中的每个类都有构造方法,用来初始化该类的一个对象。
如果一个类没有显示定义构造函数,都有一个空参数的构造函数。
(2)构造方法具有和类名相同的名称,而且不返回任何数据类型。
(3)构造方法常用来对成员变量进行赋值;
(4)构造方法前面不能加静态的,同步的修饰符。
(5)构造方法只能由new运算符调用。
构造方法举例
publicclassPerson
{
privateStringname;
privateintage;
publicPerson(Stringname,intage)
{
this.name=name;
this.age=age;
}
publicstaticvoidmain(Stringargs[])
Personp=newPerson(“张三”,30);
}
创建对象
Personp1=newPerson(“张三”,23);
这行语句包含了三个部分:
(1)声明
(2)实例化
(3)初始化
new操作符为新的对象分配内存,并且返回对这段内存的引用,从而实例化类。
使用对象
创建好对象之后,我们希望将对象用于某种操作,通常情况包括两种关于对象的操作:
(1)使用对象的某些字段(属性)(访问、修改)。
(2)调用对象的方法执行一个操作。
引用对象的字段
在某个类中引用该类字段的简单名称
publicclassPoint
publicintx=0;
publicinty=0;
publicPoint(inta,intb)
x=a;
y=b;
System.out.println(x);
//
System.out.println(y);
//通过简单名称引用类的字段
Pointp=newPoint(12,34);
(2)在类之外引用对象的字段
对象的类之外的代码必须使用对象引用或者表达式,后面接.操作符,再跟简单字段名称。
publicclassComputePoint
Pointp1=newPoint(12,34);
Pointp2=newPoint(13,25);
intx=p1.x+p2.x;
//加.号操作符引用字段的方式
inty=p1.y+p2.y;
System.out.println("
x="
+x);
y="
+y);
}}
classPoint
intx=0;
inty=0;
publicclassPerson{
Stringname;
intage;
publicvoidsetName(Stringname){
}
publicvoidsetAge(intage){
publicintgetAge(){
returnage;
publicStringgetName(){
returnname;
Personp1=newPerson();
p1.setName("
张三"
);
p1.setAge(23);
姓名:
"
+p1.getName());
年龄:
+p1.getAge());
方法调用等同于发送消息给对象,通过调用方法实现各个对象之间的“通信”。
匿名对象
只使用一次的对象称之为匿名对象,匿名对象没有名称,不需要在栈内存中存放对象的引用。
newPerson(“张三”,30).show()
对象的生命周期
垃圾回收机制
在Java平台中,可以创建任意数量的对象而不必为销毁它们而担心。
Java运行环境中有一个垃圾收集器,它定期释放已经不再被引用的对象所占用的内存。
(1)当一个对象已经没有引用指向它时,这个对象就符合垃圾收集的条件了。
(2)手工可以将变量的值设置为null来显示地销毁对象的引用。
(3)如果程序中有多个引用指向相同的对象,当这个对象的所有引用都被销毁后,这个对象才符合垃圾收集的条件。
Java中的数据类型
java语言的数据类型有简单类型和复合类型:
简单数据类型包括:
整数类型(Integer):
byte,short,int,long
浮点类型(Floating):
float,double
字符类型(Textual):
char
布尔类型(Logical):
boolean
复合数据类型包括:
class
interface
数组
参数传递
Java中的参数传递包括:
值传递和引用传递。
(1)简单数据类型:
值传递,形参值的变化不影响实参。
(2)复合数据类型:
地址传递。
形参值的变化会影响实参。
见源文件:
参数传递/ParamTransferTest.java
限定词的作用范围比较
继承性
任何一个类都直接或间接继承自java.lang.Object
通过extends关键字实现继承,只支持单重继承,不支持多重继承,支持多层继承
见源文件:
继承原则/ExtendsTest1.java
继承原则
子类继承父类的属性和方法(构造方法除外),包括实例属性和类属性。
方法包括实例方法和类方法。
说明:
父、子类在同一个包中,子类可以继承父类除private修饰外的属性和方法;
父、子类不在同一个包中,子类可以继承父类除private和default修饰的属性和方法。
见源文件:
继承原则-不同包的继承原则
this关键字
(1)访问成员变量
this.成员变量名
当成员方法的参数列表中存在与成员变量同名的参数,引用成员变量时前面要加this。
(2)访问成员方法
this.成员方法名(paramlist)
(3)访问构造方法
this(paramlist)
通过this调用本类中具有不同参数列表的构造方法。
(只能出现在构造方法的第一句位置处,且不能形成构造方法的递归调用)
this关键字/ThisDemo.java
(4)表示当前类的对象
this关键字/ThisDemo1.java
Super关键字
在子类中可以声明与父类中同名的属性或方法,子类在引用与父类同名的属性或方法时,默认是引用子类自己定义的属性或方法,而将从父类那里继承而来的成员变量“隐藏”起来;
为了指明是引用父类中的同名属性或方法使用super关键字。
(1)访问父类被隐藏的成员变量,如:
super.variable;
(2)调用父类中被重写的方法,如:
super.Method([paramlist]);
(3)调用父类的构造方法,如:
super([paramlist]);
注意:
super()和this()不能同时出现在构造方法体中。
多态性
多态性指同一名字的方法有不同的方法体。
在java语言中,多态性体