使用Java实现面向对象编程——第一章 对象和封装
1、软件出现的目的:
用计算机的语言描述现实世界 用计算机解决现实世界的问题 |
|
◆面向对象设计和开发程序的好处: 交流更加流畅 提高设计和开发效率 |
计算机语言的发展向接近人的思维方式演变:汇编语言 [面向机器]、c语言 [面向过程]、java语言 [面向对象] 类和对象的区别和联系 1、类是抽象的,概念的,代表一类事物,比如人类,猫类.. 2、对象是具体的,实际的,代表一个具体事物 3、类是对象的抽象,对象是类的实例 |
2、面向对象设计的过程就是抽象的过程,分以下三步:
第一步:发现类;
第二步:发现类的属性;
第三步:发现类的方法;
3、类图:使用类图描述类
用于分析和设计“类”;
直观、容易理解;
4、类名、属性名、方法名、常量名命名规范:
◆类名由一个或几个单词组成,每个单词的第一个字母大写,ru:Dog、StringBuffer;
◆属性名和方法名由一个或几个单词组成,第一个单词首字母小写,其他单词首字母大写,如:health、stuName、println()、getMessage();
◆常量名由一个或几个单词组成,所有字母大写,如:PI;
5、构造函数:
无参构造函数: 方法名与类名同名; 没有返回值; 与返回修饰符无关; ★作用:给成员属性默认赋予初始值 |
6、构造方法:
构造方法是类的一种特殊的方法, 它的主要作用是完成对新对象的初始化。(初始化你的成员属性(变量); 它有几个特点: 1、方法名和类名相同 2、没有返回值 3、在创建一个类的新对象时,系统会自动的调用该类的构造方法完成对新对象的初始化。 ★一个类可以定义多个不同的构造方法。 ★调用时: ★给予不同的初始值,调用的构造方法不同,构造方法虽同名,但系统会根据初始值来选定构造方法。
示例:系统提供默认构造函数 public Pnguin() { } F5单步跳入 F6单步跳过
类的构造方法小结: 1、构造方法名和类名相同; 2、构造方法没有返回值; 3、主要作用是完成对新对象的初始化; 4、在创建新对象时,系统自动的调用该类的构造方法; 5、一个类可以有多个构造方法; 6、每个类都有一个默认的构造方法。 7、构造方法一般使用public修饰,但在单例模式中,也可以使用private修饰 |
7、构造方法重载:
自定义构造方法:系统不再提供默认无参构造方法
|
构造方法重载的调用:
|
Eg:说出运行结果:
|
Eg:错误示例 |
8、方法重载的判断依据:
●必须在同一个类里
●方法名相同
●参数列表(方法参数的个数或参数类型)不同
●与方法返回值和方法修饰符没有任何关系。
▲在使用this调用自身的其他构造方法时,只能作为第一条语句;
9、static修饰符:static可以用来修饰属性、方法和代码块
●static代码块://静态代码块只能给static属性赋初始值;永远都比构造方法先执行一步;
语法: static
{
}
eg:static {
name=“小明”;
System.out.print(“我是静态代码块”);
}
●static修饰的变量属于这个类所有,即由这个类创建的所有对象公用一个static变量;
●把static修饰的属性和方法成为类属性(类变量)和类方法,
●不用static修饰的属性和方法属于单个对象,通常称为实例属性(实例变量)和实例方法;
类变量是该类的所有对象共享的变量, 任何一个该类的对象去访问它时,取到的都是相同的值, 同样任何一个该类的对象去修改它时,修改的也是同一个变量。
定义语法: 访问修饰符 static 数据类型 变量名; 访问类变量: 类名.类变量名 或者 对象名.类变量名 |
类方法是属于所有对象实例的 语法: 访问修饰符 static 数据返回类型 方法名(){} 注意:类方法中不能访问非静态变量(类变量)。 使用: 类名.类方法名 或者 对象名.类方法名 ★static静态的方法可以访问static静态变量,不能访问非静态变量(类变量) ★非静态方法可以访问非静态变量(类变量),同时也可以访问static静态变量。 ▲java中规则:类变量原则上用类方法去访问或操作 |
类变量与实例变量区别: 加上static称为类变量或静态变量,否则称为实例变量 类变量是与类相关的,公共的属性 实例变量属于每个对象个体的属性 类变量可以通过 [类名.类变量名] 直接访问 |
类方法小结 类方法属于与类相关的,公共的方法 实例方法属于每个对象个体的方法 类方法可以通过 [类名.类方法名] 直接访问 |
类的成员方法(函数) 1、方法的参数列表可以是多个,参数列表可以是多个,并且数据类型可以是任意的类型int float double char.. 访问修饰符 返回数据类型 函数名(参数列表){ 语句; //函数主体 } 2、方法可以没有返回值,返回类型可以是任意的数据类型(int,float,double,char..)也可以没有返回值void表示没有返回值 访问修饰符 返回数据类型 函数名(形参列表){ 语句; //函数主体 } |
static修饰与非static修饰的区别 |
||
static、非private修饰 |
非static、private修饰 |
|
属性 |
类属性、类变量 |
实例属性、实例变量 |
方法 |
类方法 |
实例方法 |
调用方式 |
类名.属性 类名.方法() 对象.属性 对象.方法() |
对象.属性 对象.方法() |
归属 |
类 |
单个对象 |
◆在加载类的过程中,先完成静态变量的分配,在执行静态块两者在创建对象之前执行;
◆类属性和类方法可以通过类名和对象名访问,实例属性和实例方法只能通过对象名访问
◆类属性只能访问类属性和其他类方法;
◆静态方法中不能使用this和super关键字;
◆在类中可以定义static变量,在方法里不可以定义static变量,也就是说,类变量不能是局部变量;
◆构造方法没有返回值类型,,如果有,则不是构造方法,而是和构造方法同名的成员方法
10、封装:封装的实质就是将类的状态信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
步骤: 1.修改属性的可见性, 2.设置setter和getter方法, 3.设置属性的存取限制。 ●好处:隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据,可以方便的加入存取控制语句,限制不合理操作。 |
|||||||||||||||||||||||||||||||
◆封装是面向对象的三大特性之一,就是将类的状态信息隐藏在内部, 不允许外部程序直接访问, 而是通过该类提供的方法来实现对隐藏信息的操作和访问; ◆封装的好处: 只能通过规定方法访问数据 隐藏类的实现细节 方便加入控制语句 方便修改实现
|
|||||||||||||||||||||||||||||||
java提供四种访问控制修饰符号控制方法和变量的访问权限: 1、公开级别:用public修饰,对外公开,可以被同一个项目中的所有类访问具有项目可见性,这是最大的访问权限; 2、受保护级别:用protected修饰,对子类和同一个包中的类公开,可以被同一个包中的类访问,被同一个项目中不同包中的子类访问; 3、默认级别:没有修饰符号,向同一个包的类公开,成员变量和方法只能被同一个包里的类访问,具有包可见性; 4、私有级别:用private修饰,只有类本身可以访问,不对外公开,成员变量和方法只能在某定义的类中被访问,具有类可见性; |
|||||||||||||||||||||||||||||||
四种访问级别的访问范围:
|
11、this关键字:
|
|
this的用法: 1、表示对当前对象的引用; 2、表示用类的成员变量,而非函数参数,注意在函数参数和成员变量同名是进行区分,其实这是第一种用法的特例,比较常用; 3、用于在构造方法中引用满足指定参数类型的构造器(其实也就是构造方法)。注:只能引用一个构造方法且必须位于开始!
注:类方法指的静态方法,不能使用this。 在构造方法内调用其他构造方法,this(),super()都要放在第一位。 |
|
this关键字属于调用(即调用具体方法、属性)的发起者,当类实例化时,调用者就是指的具体的实例对象,当没有实例化对象时,则是类本身调用 |
12、附加:
●一个Java文件(.java)中可以包含多个类,但是只能包含一个公共类(public),这个公共类名与Java文件名要保持一致; |
||
●创建对象不一定非要通过new关键字;(见下面详解) ◆java中实例化对象是为了更好的调用,类是为了定义,而对象是实体,正确的是把类实例化为对象并调用方法, ★java中就有创建实例化对象的五种方式 1、用new语句创建对象,这是最常见的创建对象的方法。 2、通过工厂方法返回对象,如:String str = String.valueOf(23); 3、运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。 如:Object obj = Class.forName("java.lang.Object").newInstance(); 4、调用对象的clone()方法。 5、通过I/O流(包括反序列化),如运用反序列化手段,调用java.io.ObjectInputStream对象的 readObject()方法。 |
||
●属性可以是简单变量,也可以是一个对象。对象中并非必须有属性和方法,可以只有属性,也可以只有方法; |
||
●对象被赋值后,只与当前对象有关系。和其他对象没有关联。 |
||
●JAVA是一种强语言类型; |
||
●类的属性可以被赋值,方法也可以有具体实现; |
||
●面向对象优点:增加代码复用性、有利于信息隐藏、便于在程序中模拟现实中的实体、与人类思维习惯一致、提高程序的可维护性和安全性;
|
||
●封装的优点:可增强数据的访问限制,降低各模块之间的依赖程度,也可以提高代码的复用程度,增强程序的可维护性;
|
||
●封装的作用:在面向对象中封装是指隐藏对象的属性和实现的细节,仅对外提供公共访问方式。 在类定义中用private关键字来隐藏属性。 一是用private把类的细节与外界隔离起来,从而实现数据项和方法的隐藏,而要访问这些数据项和方法唯一的途径就是通过类本身, 类才有资格调用它所拥有的资源(方法,数据项属性等等)。所以第一个好处就是数据的安全性提高了。 二是通过隐藏隔离,只允许外部对类做有限的访问,开发者可以自由的改变类的内部实现,而无需修改使用该类的那些程序。 只要那些在类外部就能被调用的方法保持其外部特征不变,内部代码就可以自由改变,各取所需,利于分工。 三就是提高了代码的重用性,封装成工具类以后能够减少很多繁琐的步骤 |
||
●类是对象的抽象,类是对象的模板,对象是类的具体,是类的实例。 类中可以定义属性(类的属性描述了类所具有的特征)和方法, 在建立对象时,即是对类的实例化,对象的行为和属性由类来决定,即对象的行为和属性被封装在类中 。
|
||
●在Java中,定义一个类使用关键字class,而创建类的对象则使用new关键字。 function一般是用在Java Script中去定义函数。 #define 关键字是C语言中宏定义关键字, dim则是VB语言中定义变量的关键字。 |
||
●Java中类的创建方式是: 访问修饰符 class 类名{ } |
||
●实例方法可以调用本类的方法,不能调用其他类的实例方法, 但不一定可以调用父类或其他类的方法,因为在其他的方法中可能是私有的,访问修饰符是private或protected,static方法等,不可以直接调用; |
||
●枚举指由一组固定的常数组成的类型。枚举也可以像一般的类一样添加方法和属性,可以为它添加静态和非静态的属性或方法。 |
||
●创建类的步骤:创建类时必须有类名,使用class关键字,使用.访问对象的属性和方法 |
||
● |
||
●非静态的可以访问静态的,静态的不可以访问非静态的; 输出静态变量的值,可以通过类名调用,也可以通过对象调用; 在构造方法和普通方法中能使用 this.静态变量但是在静态变量中不能使用; |
||
●能够在方法中使用的也可以是局部变量也可以是成员变量。 修饰实例变量要用public,成员变量会有默认的初始值,可以不用给; |
||
●构造方法名必须和类名一致,并且没有返回值,构造方法是在创建对象时调用,对其进行初始化工作, 构造方法一般使用public修饰,但在单例模式中,也可以使用private修饰 |
||
●使用对象的属性形式是:对象.属性, 使用对象的方法形式是对象.方法名(), 用来描述对象动态特征(行为)的一个动作序列是对象的方法。 |
||
● |
||
●使用JAVA封装的步骤:
|
封装的步骤:
|