奥鹏易百

 找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

帮助中心知识拓展客服QQ 515224986
查看: 492|回复: 0

大工20秋《java程序设计》辅导资料四

[复制链接]

1万

主题

4

回帖

2万

积分

论坛元老

积分
29078
发表于 2021-3-7 15:15:57 | 显示全部楼层 |阅读模式
扫码加微信
Java程序设计辅导资料四主    题:第三章 Java概述(课件)
学习时间:2020年10月19日—10月25日       
“不忘初心、牢记使命”主题理论学习:
每周文摘:坚持党的领导,最根本的是坚持党中央权威和集中统一领导。党章规定“四个服从”,最根本的是全党各个组织和全体党员服从党的全国代表大会和中央委员会;党中央强调“四个意识”,最根本的是坚决维护党中央权威和集中统一领导。这都不是空洞的口号,不能只停留在表态上,要落实到行动上。
            摘选自《在十九届中央纪律检查委员会第二次全体会议上的讲话》
内    容:
我们这周主要学习《Java程序设计》这门课程的第3章前半部分类和对象的介绍以及类的封装性的相关内容。希望通过下面的内容能使同学们对面向对象的概念有进一步的了解。
知识要点:
面向对象程序设计语言的特点
类的结构和特点
对象的定义
类的封装性
构造方法
构造方法重载
this引用
重点难点:
类的结构和特点
对象的定义
类的封装性
构造方法
构造方法重载
this引用
面向对象
面向对象程序设计是基于对象概念的软件设计方法。在面向对象概念中,类是数据和对数据操作的封装体,类具有封装性、继承性、多态性和抽象性,这些特性提供软件复用机制,增强软件的扩充能力,提高软件的可维护性。
Java的面向对象机制从C++发展而来,它完善了C++类的封装、继承、多态和抽象等基本概念,放弃了C++的多重继承、友元类和运算符重载等易产生歧义且安全性差的诸多特性,Java采用单重继承+接口的方式实现多重继承功能,提供内存自动管理和异常处理机制,这些措施使Java更健壮、更安全、更高效。类和对象
面向对象设计中,把具有属性和行为能力的实体称为对象。对象参与软件运行,多种对象合作完成预定任务。类是一组对象的数据类型,是创建对象的模板。
面向对象程序设计,就是把现实对象及其关系抽象为问题域的类及其关系,用程序设计语言设计类,再创建对象实现指定功能。

类是数据以及对数据的一组操作的封装体。类中的数据称为成员变量,类中对数据的操作称为成员方法,成员变量和成员方法统称为类的成员。
在Java程序中所实现的任何概念都必须封装在类中,类定义是Java的核心,每一个Java程序都是一个类定义。Java不支持C/C++中的struct,一个类就是一个struct。
Java类的结构由类声明和类体组成,语法格式如下:
类声明
{
    成员变量的声明;
    成员方法的声明及实现;
}
类声明使用关键字class定义了一个类名标识符,同时说明该类的访问权限、与其他类的关系等属性。类声明格式如下:
[修饰符] class 类<泛型> [extends 父类] [implements 接口列表]
其中,<类>、<泛型>、<父类>、<接口>都是标识符,Java约定类名标识符首字母大写;<修饰符>是一些说明类属性的关键字,如public访问权限、abstract抽象类、final最终类等。例如:public class MyDate
<泛型>是类的参数,带参数的类称为泛型类,就像C++中的模板类。
成员变量声明格式如下:
    [修饰符] 数据类型 变量 [=表达式] {, 变量[=表达式]}
成员方法用来描述对成员变量进行的操作。成员方法声明格式如下:
    [修饰符] 返回值类型 方法([参数列表])[throws 异常类]
    {
        语句序列;
        [return[返回值]];
}
其中,<修饰符>是一些说明成员属性的关键字,包括访问权限public、protected、private以及静态成员static、最终方法和最终变量final等。
一个类中的成员不能有二义性,成员变量不能同名,但成员方法可以同名。
一个类中可以有多个同名的成员方法,前提是参数列表必须不同,称为类的成员方法重载,重载的多个方法为一种功能提供多种实现。重载方法之间必须以不同的参数类型、参数个数、参数的次序来区别。例如,在MyDate类可以声明多个重载的set()方法如下:
void set(int y,int m,int d)
void set(int m,int d)
void set(int d)
void set(MyDate d)
注意,如果参数列表只是次序不同,类型、个数完全相同的话,函数不能重载;同样,两个方法参数列表相同,返回值不同,则两个方法也不能重载。
对象
类是用于定义数据及数据操作的构造数据类型,类本身不能参与程序运行,实际参与程序运行的是类的对象。对象是类的实例,即类的取值。一个对象能够获得并保存类的一个实例,就像一个int变量i能够保存int类型的一个常数。
对象是动态的,每个对象都有自己的生存周期,都会经历一个从创建、运行到消亡的多种状态变化过程。任何一个对象都有其所属的类。使用对象首先需要声明对象属性的类,再使对象获得一个类的实例,引用对象的成员变量和调用对象的方法,使用完后释放对象。
与声明变量的语法格式相同,声明对象的格式如下:
    类  对象
例如:
    MyDate d;
声明对象仅仅说明了对象所属的类,必须通过赋值才能使对象获得实例。
使用new运算符可调用类的一个构造方法,创建该类的一个实例,为实例分配内存空间并初始化,再将该实例赋值给一个对象,语法格式如下:
对象=new 类的构造方法([参数列表])
例如:
d=new MyDate();
MyDate d= new MyDate();
对象获得一个实例后,就可以使用点运算符“.”引用对象中的成员变量和调用成员方法,语法格式如下:
对象.成员变量
对象.成员方法([参数列表])
例如:
d.year = 2008;
d.set(2009,7,28);
Java的内存自动管理机制,能够跟踪存储单元的使用情况,自动收回不再被使用的资源。所以,程序中不需要释放对象占用的空间资源。
Java的类是引用数据类型,两个对象之间的赋值是引用赋值,对象赋值过程中没有创建新的实例。例如:
MyDate d1=new MyDate();
d1.set(2009,7,16);
MyDate d2=d1;
d2.year=2008;
注意,上面的例子最后修改了d2实例的成员变量值,也会影响d1对象。
使用关系运算符==、!=可比较两个对象是否引用同一个实例。
一般情况下,两个对象相等,是指它们引用的两个实例的各成员变量值分别对应。Java约定一个类的equals()方法用于比较该类的两个对象是否相等,此方法是比较实例值是否相等。例如:
MyDate d2=d1;  
/*两个对象引用一个实例,d1==d2结果是true,d1.equals(d2)结果是true*/
MyDate d2=new MyDate(); d2.set(d1);
/*设置d2对象值同d1实例,d1==d2结果是false,d1.equals(d2)结果是true*/
d2.set(2008,8,8);
/*改变d2对象,不影响d1对象*/类的封装性
封装是面向对象的重要概念之一,它是面向对象程序设计中信息隐藏思想的具体实现技术。类的封装包含两层含义:第一,将数据和对数据的操作组合起来构成类,对象是一个不可分割的独立单位;第二,实现信息隐藏,类既要提供与外部联系的方法,又要尽可能地隐藏实现细节。
封装提供软件模块化的设计机制。一个类声明具有特定功能,其中包括多个实现特定功能的软件模块;一个软件系统,根据实际需求选择多个类中的功能模块进行组装,各模块之间通过参数传递进行配合,协同工作。Java程序设计的基本单位是类,类给出了对象的结构;程序设计的任务就是设计类,由类组装程序。
Java提供构造方法、析构方法、方法重载、设置访问控制权限等措施对类进行封装。
构造方法
类的构造方法用于创建类的一个实例并对实例的成员变量进行初始化。构造方法与类中成员方法的不同之处是:构造方法与类同名;构造方法通过new运算符调用。
一个类可声明多个构造方法对成员变量进行不同需求的初始化,构造方法不需要写返回值类型,因为它返回的就是该类的一个实例。例如:
public class MyDate
{
        public MyDate(int y,int m,int d)
        {
                year=y;
                month=m;
                day=d;
        }
}
使用new运算符调用指定类的构造方法,参数列表必须符合构造方法声明。例如:MyDate d=new MyDate(2009,7,18);
默认构造方法。
当一个类没有声明构造方法时,Java自动为该类提供一个无参数的默认构造方法,对各成员变量按其数据类型进行初始化,整数、浮点数、字符、布尔和引用数据类型的初值分别为0、0.0、'\u0000'、false和null。当一个类声明了构造方法,Java不再提供默认构造方法。
拷贝构造方法
一个类的构造方法,如果其参数是该类的对象,称为拷贝构造方法,它将创建的新对象初始化为形式参数的实例,实现对象复制功能。Java不提供默认拷贝构造方法。
构造方法重载
Java支持构造方法重载,重载的构造方法提供创建实例时的多种初始化方案,如指定若干参数的构造方法、默认构造方法、拷贝构造方法等,由于Java不会持会产生歧义的参数默认值,这些构造方法必须重载,参数列表必须不同。
this引用
Java类的成员方法与C语言中函数有一个重要区别就是,Java的每个成员方法都可以使用代词this引用调用该方法的当前对象,this引用有以下3种用法。
指代对象本身
this用于指代调用成员方法的当前对象自身。语法格式如下:
this
访问本类的成员变量和成员方法
使用this引用当前对象的成员变量,调用当前对象的成员方法。语法格式如下:
this.成员变量
this.成员方法([成员变量])
调用本类重载的构造方法
this引用还可以在重载的构造方法中,调用本类已定义的构造方法。语法格式如下:
this([参数列表])
注意:在构造方法中,this()必须是第一行语句。不能使用this调用当前的构造方法。
instanceof对象运算符
对象运算符instanceof判断了一个对象所引用的实例是否属于指定类及其子类,运算结果是boolean类型。
访问控制
访问控制是为了限制一个对象的成员变量和成员方法被其他类随意访问,以免造成程序的不稳定性。
类的访问控制权限
类有两种访问控制权限:公有和缺省,公有权限使用public修饰符,可被所有类访问;缺省权限没有修饰符,可被当前包(文件夹)中的类访问。
一个源程序文件中可以声明多个类,但用public修饰的类只能有一个,且该类名必须与文件名相同。
类中成员的访问控制权限
一个类的所有成员都可被本类的代码访问。为了控制其他类的访问,类的成员有4种访问控制权限,说明如下:
·private声明私有成员,该成员仅能被当前类的成员访问。
·没有修饰符表示缺省权限,说明该成员能被当前类以及当前包中的其他类访问,也称在当前包中可见。
·protected声明保护成员,该成员能被当前类及其子类,或当前包中的其他类访问,也称在子类中可见。
·public声明公有成员,该成员可被所有类访问
注意:public等权限修饰符不能用于修饰方法体中的局部变量。因为局部变量的作用域仅限于当前方法,对其他类不可见,不存在其他类对它的访问。
声明set()和get()方法存取对象的属性
存取对象属性的方法分别是set()和get()方法。
静态成员
Java类中的成员分为两种:实例成员和静态成员。使用关键字static声明的成员成为静态成员,否则为实例成员。
实例成员属于对象,只有创建了实例,才能通过对象访问实例成员变量和调用实例成员方法。
静态成员属于类,即使没有创建实例,也可以通过类名直接访问静态成员变量和调用静态成员方法。
在类内部,可直接访问实例成员,省略类名。静态成员也可以通过对象引用。在静态成员方法中,不能访问实例成员,不能使用this引用。
注意:在Java中,不能声明方法的局部变量为static。
在声明时,可对静态成员变量赋初值,也可使用static声明静态初始化块,对静态成员变量进行初始化,格式如下,其中只能访问类中的静态成员,且不能引发检测性异常,并在类加载时执行。
static                       //静态初始化块
{
        静态成员变量初始化;
}
析构方法
类的析构方法用于释放实例并执行特定操作。Java析构方法声明如下:
    public void finalize()
Java的内存自动管理机制能够自动释放不再被使用的对象。所以,通常类不需要设计析构方法。如果需要在释放对象时执行特定操作,则类可以声明析构方法。一个类只能有一个finalize()方法。
通常,当对象超出它的作用域时,Java将执行对象的析构方法。一个对象也可以调用析构方法释放对象自己。例如:
d.finalize();                //调用对象的析构方法
不能使用已被析构方法释放的对象,否则将产生运行错误。
浅拷贝与深拷贝
一个类的拷贝构造方法,使用一个已知实例对新创建实例的成员变量逐个赋值,这种方法称为浅拷贝。当对象的成员变量是基本数据类型时,两个对象的成员变量已有存储空间,赋值运算传递值,所以浅拷贝能够复制实例。当对象的成员变量是引用数据类型时,浅拷贝不能实现对象复制功能,需要深拷贝。
当一个类包含引用类型的成员变量时,该类的拷贝构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并初始化为形式参数实例值,这种复制方式称为深拷贝。
例题
1、Java类具有()、()、()和()4项特征。
2、Java不支持结构和联合,类的功能就类似于结构和联合。()
3、参数列表和返回值的不同都可以独立决定方法重载。()
4、无论何时,Java都会为类提供默认构造函数。()
5、拷贝构造函数就是指一个类中参数是该类对象的构造方法。()
6、一个类中只能由一个析构方法。()
7、下列关于类和对象的说法,正确的是:()。
A.对象是动态的  B.对象是类的实例  C.类是一组操作的封装体  D.类的成员就是指类的成员变量
8、简述什么是浅拷贝和深拷贝。
9、根据下列程序语句,写出结果。
⑴  MyDate d1=new MyDate();
d1.set(2009,10,24);
MyDate d2=d1;
d2.year=2007;
d1.year=?
10、创建一个类,并在类中声明一个构造方法,并调用构造方法初始化对象的值。
例题答案
封装性、继承性、多态性、抽象性
正确
错误
错误
正确
正确
ABC       
一个类的拷贝构造方法,使用一个已知实例对新创建实例的成员变量逐个赋值,这种方式称为浅拷贝;当一个类包含引用类型的成员变量时,该类的拷贝构造方法,不仅要复制对象的所有非引用成员变量值,还要为引用类型的成员变量创建新的实例,并初始化为形式参数实例值,这种复制方式称为深拷贝。
2007
10、public class MyDate
{
        public MyDate(int y,int m,int d)
        {
                year=y;
                month=m;
                day=d;
        }
}MyDate d=new MyDate(2008.10.8)本内容由易百教育整理发布
网址www.openhelp100.com
QQ 515224986
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|www.openhelp100.com ( 冀ICP备19026749号-1 )

GMT+8, 2024-7-1 22:44

Powered by openhelp100 X3.5

Copyright © 2001-2024 5u.studio.

快速回复 返回顶部 返回列表