Java编程基础.docx
《Java编程基础.docx》由会员分享,可在线阅读,更多相关《Java编程基础.docx(78页珍藏版)》请在冰豆网上搜索。
Java编程基础
Java编程基础
第3章类和对象
教学要求:
v理解:
面向对象的开发方法;
类、对象、实体之间的关系;
对象的涵义
v掌握:
定义类、类的成员变量、类的成员方法、类的构造方法;对象的使用
3.1类和对象的基本概念
v浅述面向对象的软件开发方法----抽象
v抽象是科学研究中经常使用的一种方法,即去除掉被研究对象中与主旨无关的次要部分,或是暂时不予考虑的部分,而仅仅抽取出与研究工作有关的实质性的内容加以考察。
v在计算机技术的软件开发方法中所使用的抽象有两类:
一类是过程抽象,另一类是数据抽象。
3.1类和对象的基本概念(续)
v浅述面向对象的软件开发方法(续)
▪在早期面向过程的软件开发方法中,人们总是致力于用计算机能够理解的逻辑来描述和表达待解决的问题及其具体的解决过程。
▪数据结构、算法成为了面向过程问题求解的核心组成。
利用这种开发方法精确、完备地描述具体的操作过程。
3.1类和对象的基本概念(续)
v假定你有一张信用卡,卡上已经产生应还金额5000元,假定你一直不还款,那么在多少个月之后,这张卡的应还金额会超过10000元!
v例:
一个月之后,卡上的应还金额是5000加上5000元的2%,也就是5100。
两个月之后,卡上的应还金额为5100加上5100的2%,依此类推!
3.1类和对象的基本概念(续)
v浅述面向对象的软件开发方法(续)
▪缺点:
面向过程的问题很难描述一个包含了多个相互关联过程的复杂系统。
使用过程抽象有利于控制、降低整个程序的复杂性,但是这种方法本身自由度较大,难于规范化和标准化,操作起来有一定难度,在质量上不易保证。
3.1类和对象的基本概念(续)
v浅述面向对象的软件开发方法(续)
v力求符合人们日常的思维习惯,降低、分解问题的难度和复杂性,提高整个求解过程的可控制性、可监测性和可维护性
v面向对象问题求解,关心的不仅仅是孤立的单个过程,而是孕育所有这个过程的母体系统,它能够使计算机逻辑来模拟描述系统本身,包括系统的组成、系统的各种可能状态以及系统中可能产生的过程和过程引起的切换
3.1类和对象的基本概念(续)
v浅述面向对象的软件开发方法(续)
v数据抽象是与过程抽象不同的抽象方法,它把系统中需要处理的数据和这些数据上的操作结合在一起,根据功能、性质、作用等因素抽象成不同的抽象数据类型。
每个抽象数据类型既包含了数据,也包含了针对这些数据的授权操作,是相对于过程抽象更为严格、也更为合理的抽象方法。
v面向对象的软件开发方法的主要特点之一,就是采用了数据抽象的方法来构建程序的类、对象和方法。
3.1类和对象的基本概念(续)
v浅述面向对象的软件开发方法(续)
v比如,要处理一个有关银行日常业务的问题,最核心的问题就是所有的资金、帐目往来。
根据与此核心问题有关的操作,包括存款、取款、贷款、还款和这些操作所处理的数据,如金额、账号、日期等,就可以建立一个表示帐户的抽象数据类型,作为考察的重点。
而银行的其他业务和日常工作,如对内部员工的考勤、监督、安全警戒、方便储户的服务项目,则不在次列。
相反,如果面对的是一个旨在提高银行服务水平和工作效率的综合管理系统,那么上述几项被第一个系统忽略的工作就应该成为第二个系统的抽象数据类型中的一部分。
v浅述面向对象的软件开发方法(续)
v抽象数据类型是用¡°类¡±这种面向对象工具可理解和操纵的结构来代表的,每个类里都封装了相关的数据和操作。
3.1类和对象的基本概念(续)
v概念世界的实体与程序中的对象
▪什么是实体?
你手头这本书、你坐着的板凳、窗外飞过的小鸟、马路上行驶的汽车、车上的驾驶员等等都是实体。
▪实体不一定是现实世界中具有生命的生命体,没有生命的物体也可以是实体。
这些实体在面向对象的程序中都可以通过对象描述出来,也就是说概念世界中的实体对应着程序中的对象。
3.1类和对象的基本概念(续)
v初识类与对象
▪对象是面向对象程序的核心,那么什么是对象?
▪一个对象就是一个程序单元,它将一组数据和对这些数据的各种操作结合在一起。
▪对象中的数据通常称其为属性,用来描述对象的信息。
比如书的页数、价格、出版社,板凳的材质、颜色,汽车驾驶员的性别、年龄以及住址等等。
▪对象中的各种操作通常称其为方法,用来描述对象的功能。
比如汽车能够加速行驶或者刹车,小鸟能够飞翔或者鸣叫等等。
▪类是一个抽象的概念,表示对现实生活中一类具有共同特征的对象的抽象化。
在类中定义了这类对象所具备的属性和方法。
3.1类和对象的基本概念(续)
v初识类与对象(续)
3.2类的实现
v类的定义
▪类定义的完整格式如下,其中方括号内的内容表示可以省略。
斜体字表示该部分会在正式代码中根据实际情况发生变化。
粗体字表示该部分是关键字,如果出现必须那样写:
[modifiers]classclassname[extendssuperclassname][implementsinterfacename]
{
.......
}
▪modifiers:
是类修饰符,对所定义的类加以修饰。
类修饰符有如下几种:
▪访问权限修饰符:
public
▪最终类修饰符:
final
▪抽象类修饰符:
abstract
3.2类的实现(续)
v类的定义(续)
▪modifiers为上述修饰符中任一个或它们的某种组合,定义类时可以有也可以没有modifiers说明。
▪classclassname:
class是定义类用的关键字,要定义一个类必须用到class关键字。
classname:
是所定义的类的类名,为合法的标识符。
▪extendssuperclassname:
extends是表示继承关系的关键字。
说明所定义的类是继承名为superclassname类而得来的。
▪implementsinterfacenamelist:
implements是表示实现接口的关键字。
说明所定义的类要实现指定的接口。
3.2类的实现(续)
v定义成员变量:
体现类的属性
classPeople{
intage;
Stringname;
doubleheight;
}
3.2类的实现(续)
v定义成员变量:
体现类的属性(续)
▪属性的定义格式如下,其中方括号内的内容表示可以省略。
斜体字表示该部分会在正式代码中根据实际情况发生变化。
粗体字表示该部分是关键字,如果出现必须那样写:
▪[modifiers]typevariablename;
▪modifiers:
是变量修饰符,modifiers修饰符有如下几种:
▪访问权限修饰符:
public,protected,private三种。
▪静态变量(又称类变量)修饰符:
static,说明一个变量是共享变量即类变量。
没有用static修饰的属性又称为实例变量
▪常量说明符:
final,作用是将以变量说明为一个值不变的常量。
▪type是表示该成员变量的数据类型。
▪variablename表示属性的名字。
3.2类的实现(续)
v定义成员方法:
表现类的行为
▪定义一个方法,包括方法名说明和方法体的说明,这两部分组合起来就可以定义一个方法。
▪方法的定义格式如下,其中方括号内的内容表示可以省略。
斜体字表示该部分会在正式代码中根据实际情况发生变化。
粗体字表示该部分是关键字,如果出现必须那样写:
[modifiers]returntypemethodname([typevariable])
{
.......
}
3.2类的实现(续)
v定义成员方法:
表现类的行为(续)
▪modifiers:
方法修饰符,可以有以下几种:
▪访问权限修饰符:
public,private,protected
▪最终方法修饰符:
final
▪静态方法(类方法)修饰符:
static
▪modifiers为上述修饰符中任一个或它们的某种组合,定义方法时可以有也可以没有modifiers说明。
▪returntype:
方法的返回值类型。
▪methodname:
方法的名字,为合法的标识符。
▪():
其中的内容为方法的参数列表,方法可以有参数也可以没有参数,参数都有相应的类型。
参数可以是一个也可以是多个,多个参数之间以逗号“,”隔开。
▪typevariable:
是方法参数说明。
type是参数的类型,variable是参数名。
▪{}中的内容称为方法体,这个方法具体实现什么功能将由方法体中的代码决定
3.2类的实现(续)
v定义成员方法:
表现类的行为(续)
classPeople{
intage;
Stringname;
doubleheight;
Stringaddress;
voidlaugh(){
System.out.println("Haaha..");
}
}
3.2类的实现(续)
v定义成员方法:
表现类的行为(续)
v参数
▪一个方法的参数是指这个方法要正确执行时需要提供给方法的信息。
比如计算器有除这个方法,想让计算器运算1除以2,我们需要向它提供被除数和除数两个信息。
▪同一个方法中的参数名不能相同。
▪在一个方法中定义的参数只在该方法体内有效,即参数只在当前方法的{}内可以使用。
v返回值
▪一个方法的返回值是指这个方法执行完毕后的结果。
比如计算器有除这个方法,我们让计算器执行1除以2后,会返回0.5。
▪返回值类型是指方法返回的结果的类型。
比如计算器的除法返回的结果是个小数,我们可以用double表示。
如果一个方法执行完毕后不需要返回结果,返回值类型用void表示。
▪如果一个方法需要返回值,在方法体最后使用return。
3.2类的实现(续)
v特殊的方法:
构造方法
▪例题:
定义一个类Caculator,在类中定义一个构造方法,便当对象创建时整数能被自动地赋于初值0。
▪代码如下:
classCaculator{
inta;
intb;
Caculator(){
a=0;
b=0;
}
}
3.2类的实现(续)
v特殊的方法:
构造方法(续)
▪构造方法是一种特殊的方法,用于创建对象,具有以下特点:
▪构造方法名和所在类的类名相同。
▪构造方法没有返回值,方法名处的返回值类型为空(即返回值类型什么都不写)。
▪如果一个类没有显式的定义它自己的构造方法,那么Java将自动地提供一个默认的构造方法。
默认构造方法自动地将所有的成员变量初始化为零。
3.3对象的使用
v使用对象的程序实例
classPeople{
intage;
Stringname;
doubleheight;
voidlaugh(){
System.out.println("Haaha...");
}
publicstaticvoidmain(String[]args){
System.out.println("main方法执行");
Peoplep=newPeople();
p.laugh();
}
}
3.3对象的使用(续)
v分析:
对象与类,如何从类实例化对象
▪类创建一种新的数据类型,该种类型能被用来创建对象。
▪类创建了一个逻辑的框架,该框架定义了它的成员之间的关系。
▪类是一个逻辑构造,对象有物理的真实性。
▪要获得一个类的对象需要两步。
•第一步,你必须声明该类类型的一个变量,这个变量没有定义一个对象。
•第二步,该声明要创建一个对象的实际的物理拷贝,并把对于该对象的引用(即内存地址)赋给该变量。
这是通过使用new运算符实现的。
在Java中,所有的类的对象都必须动态分配。
3.3对象的使用(续)
v分析:
对象与类,如何从类实例化对象(续)
▪下面的语句来声明一个People类型的对象:
Peoplep=newPeople();
▪当这一句完成时,也就表述了现实世界的一个具体的实体对象,它是真实存在地。
同样,我们还可以继续声明一个对象,如:
Peoplep1=newPeople();
▪这里p、p1代表地是不同的两个人,两个实体。
它们的数据是完全分离的。
3.3对象的使用(续)
v分析:
对象与类,如何从类实例化对象(续)
Peoplep;
p=newPeople();
3.3对象的使用(续)
v分析:
对象与类,如何从类实例化对象(续)
Peoplep1=newPeople();
Peoplep=p1;
▪变量p被赋值为变量p1对象引用的一个拷贝。
▪p和p1指向同样的对象
3.3对象的使用(续)
v分析:
属性的get和set方法
v为了体现类的封装性,这里使用成员方法来获取成员变量,这种方法很特殊,功能很单一,我们可使用在被访问字段名的前面加上前缀get来表示获取成员变量的成员方法。
▪例如getFirstName(),getLastName()。
v同理,在被访问字段名的前面加上前缀set来表示获取设置成员变量的成员方法。
▪例如setFirstName(),setLastName()。
3.3对象的使用(续)
v分析:
属性的get和set方法(续)
v例题:
定义一个商品类Item,书写类的相关成员方法来设置及获取其商品的ID号、商品的简短描述、商品的详细描述、商品价格等属性。
v代码详见教材
3.4使用对象和类的OOP编程实例
vJava语言是怎么定义类的结构:
本章小结
v面向对象编程(OOP)将数据(属性)和方法(行为)封装在对象中;对象的数据与方法紧密地捆绑在一起。
基于对象编程(OBP)处理对象的创建和使用。
v对象具有信息隐藏的特性。
对象可能知道如何通过良好定义的接口与其他对象进行通信,但是它们通常不允许知道其他对象是如何实现的。
vJava程序员创建他们自己的数据类型,称为类。
v构造方法与类同名,在实例化该类对象时,它用于初始化该对象的实例变量。
构造方法可以有参数,但不能指定返回类型。
v在创建一个对象时,new运算符为该对象分配内存,然后调用类的构造方法以初始化该对象的成员变量。
v如果没有为一个类声明构造方法,编译器将创建一个默认的构造方法。
编程练习题
v1.编写一个Java程序片断定义一个表示学生的类student,包括域“学号”、“班号”、“姓名”、“性别”、“年龄”;方法“获得学号”、“获得班号”、“获得性别”、“获得姓名”、“获得年龄”(汉字或数字)、“修改年龄”。
并在此基础上编写JavaApplication程序创建student类的对象张一、王二。
v2.创建一个Rectangle类。
该类拥有属性length和width,每个属性的默认值均为1。
该类拥有方法perimeter和area,分别用于计算矩形的周长和面积。
该类还有设置和读取属性length和width的方法。
Java编程基础
第4章Java语言基础
教学要求:
v理解:
代码编写规范
Java的关键字
数据类型
v掌握:
各类运算符、数据类型、表达式、语句
4.1贯穿整个程序:
代码编写规范
v所有编码规范试图达到的目标是:
创建易理解、易维护、正确的程序代码。
v关于Java编码规范,请参考:
v其中关于Java文档的书写规范,参考
4.1贯穿整个程序:
代码编写规范
vJava程序在命名时应始终采用完整的英文描述符。
此外,一般应采用小写字母,但类名、接口名以及任何非初始单词的第一个字母要大写。
一般而言,我们须遵循以下一些约定:
v类(Class)应采用完整的英文描述符,所有单词的第一个字母大写。
例如Customer。
v类变量应采用完整的英文描述,第一个字母小写,任何中间单词的首字大写。
例如firstName,lastName。
v静态常量字段(staticfinal)全部采用大写字母,单词之间用下划线分隔。
例如MIN_BALANCE,DEFAULT_DATE。
v普通成员函数采用完整的英文描述说明成员函数功能,第一个单词尽可能采用一个生动的动词,第一个字母小写。
例如openFile(),addAccount()。
4.1贯穿整个程序:
代码编写规范(续)
v返回值是布尔型的获取成员函数,可用单词is做前缀。
例如isPersistent(),isString()。
v包(Package)应采用完整的英文描述符,由小写字母组成。
对于全局包,可将你的Internet域名反转并接上包名。
这样可保证此包名是世界惟一的。
例如net.yeah.glchengang。
v组件(Component)应使用完整的英文描述来说明组件的用途,后缀应接上组件类型。
例如customerList,fileMenu。
v另外,尽量采用适用于相关领域的术语;避免使用类似的名字,或者仅仅是大小写不同的名字;少用缩写,并且在整个工程中要统一;避免使用长的名字,最好少于15个字母;除了静态常量,尽量避免使用下划线。
v最后,代码的书写格式也需遵循一定的缩排规范、空白规范。
4.2标识符
v标识符命名规则
▪标识符是用来标识类名、变量名、方法名、类型名、数组名、文件名的有效字符序列。
▪Java语言规定标识符由字母、下划线、美元符号和数字组成,并且需遵循以下规则:
•区分大小写。
•不能以数字开头。
•以字母或下划线_或$符号开头。
•不能使用Java的关键字。
4.2标识符(续)
v标识符命名规则(续)
▪以下为合法的标识符:
•aIdentifier
•_Identifier
•$Identifier
•elseother
▪以下为不合法的标识符:
•2002WorldCup(数字开头)
•Identifier@Java(@为非法组成部分)
•else(关键字)
4.2标识符(续)
vJava关键字
▪关键字是Java语言中已经被赋予特定意义的单词,对Java的编译器有特殊的作用,一般用来表示一种数据类型,或者程序的结构等。
▪目前Java语言定义的关键字如下:
▪constgotoabstractfinallyintpublicthisbooleancontinuefloatinterfacereturnthrowbreakdefaultforlongshortthrowsbytedonativestatictransientcasedoubleifnewstrictfptrycatchelseimplementspackagesupervoidcharextendsimportprivateswitchvolatileclassfinalinstanceofprotectedsynchronizewhile
▪所有的关键字都是小写。
另外,不能将关键字当作标识符来使用。
4.3注释
v注释的优点
▪一方面,注释可以帮助自己或者他人能更好地理解源代码的用途,使用条件,使用方法,结果等;
▪另一方面,便于以后的系统维护和升级等。
vJava支持三种形式的注释。
▪//:
单行注释
行注释也称单行注释。
行注释使用//注释文字来对某行/某段代码加以说明。
▪/*……*/:
多行注释
段落注释也称多行注释。
为某段代码加以说明。
当说明文字比较长需要换行时使用段落注释方法。
4.3注释(续)
v/**……*/:
Java特有的文档注释
▪文档化注释也称Javadoc注释。
▪采用这种方法的注释,可以采用javadoc命令或工具抽取源文件里的Javadoc注释,生成组织有序的帮助文档(HTML格式的文件)。
▪有关Javadoc的详细说明请读者自行查阅相关文档。
4.3注释(续)
v/**……*/:
Java特有的文档注释(续)
/**
*Javadoc注释方法:
这是一个HelloJava!
的程序
*
*可以打印HelloJava!
*
*@author刘嵩
*@version1.0.1,2008-01-25
*
*/
publicclassHelloJava{
/*
*段落注释方法:
main()方法是程序执行的入口
*/
publicstaticvoidmain(String[]args){
//行注释方法:
//向命令行打印输出HelloJava!
System.out.println("HelloJava!
");
}
}
4.4常量与变量
v数据类型的概念
▪每一种数据类型定义了一个具有相同性质的数据集合。
各种数据类型的数据具有不同的性质。
程序中所用到的每一个数据,包括常量和变量都有一个和它相联系的类型。
由此决定了数据所具有的值,也决定了对该数据所能进行的操作。
4.4常量与变量(续)
v变量
▪在程序执行过程中其值可以改变的数据,称为变量。
▪每个变量都要有一个名称,这就是变量名。
▪变量名由用户自己定义,但必须符合标识符的规定。
▪在一个程序中,一个变量只能属于一种确定的数据类型。
▪程序中出现的每个变量都必须说明其数据类型,这样就规定了该变量的取值范围,也决定了对该变量所能执行的运算操作。
4.4常量与变量(续)
v变量(续)
▪intn;
•定义了一个变量,变量名为n,变量类型为int类型。
▪Stringname,password;
•定义了两个变量,变量名分别为name和password,变量类型都是String类型。
在Java中相同类型的变量定义可以在一起进行,变量名之间用逗号隔开。
•变量定义之后必须使用“=”赋值才能使用。
4.4常量与变量(续)
v变量(续)
publicclassVariable1{
publicstaticvoidmain(String[]args){
intn=1;//定义变量n,将n的值赋值为1
System.out.println(n);//输出当前变量n的值
n=2;//将n的值赋值为2,变量的"变"在这里体现
System.out.println(n);
}
}
4.4常量与变量(续)
v常量
▪在程序执行过程中其值不能改变的数据,称为常量。
▪Java中的常量值是用文字串表示的,它区分为不同的类型,例如:
•整型常量123,实型常量1.23,字符常量’a’,布尔常量true、