本章的学习目标
- 了解面向对象的基本概念
- 理解类和包
- 学习对象创建,初始化,使用和删除
1.面向对象的基本概念
面向对象是Java的核心,面向对象的核心是用人类解决问题的方法对复杂的客观问题进行分析,组织和解答,对于程序员而言,难点在于尽可能正确描述问题的抽象。面向对象的编程语言是利用类和对象将问题的数据和操作封装起来,并利用标准接口和外界交互,是代表客观世界实体的各种类在程序中能独立和继承。其特点要求程序具有封装性、继承性、多态性。面向对象的一些基本概念:抽象,封装,继承和多态. 接下来,重点分析一下他们四个的特点
抽象 面向对象强调的是按照人类的思维方式中去模拟现实世界的物理存在,将客观的事物,抽象成各种对象的组合,管理抽象的一个有效办法就是层次分类,允许程序将一个复杂的系统分解成多个简单的部件进行处理,如何分解?通过抽象,分类,封装,和组合来更有效的处理问题. 抽象的好处有哪些? 1.面想对象的设计方式,以类为基本单元,封装成包,是软件能够适应软件在声明周期的每一个阶段 2.编程阶段,通过抽象找出各种类,再对各种类之间的消息进行收集和处理,把问题分解成多个标准接口的组件,当问题有变化,就能很从容的解除或更换软件的某些构建代码来适应变化。 3.抽象导致面向对象编程的方法和封装,形成不同层次上的构建,是软件构件化,实现不同层次上的重用。
封装 封装是面向对象技术中屏蔽信息的一种机制, 它在程序中将对象的状态和行为封装成为一个完整的,结构高度集中的整体,对外有明确的功能,接口单一通过,可在各种环境下独立运行的单元,目的是只通过一个公用接口和消息的其他对象进行通讯.封装是程序的设计者和使用者分开。 封装的好处有哪些? 1.源代码可独自编写和维护 2.既保证不受外界干扰,也有利于代码的重用 3.提高生产效率和开发周期
继承 继承是描述两个类之间的关系。继承允许一个新类包含一个已有的类的行为和状态,子类派生的过程叫做继承。继承有单继承和多继承两种,单继承的类层次是树状结构,多继承是网状结构,因为他有多个父类,在java中,除了object类外,其它类都有父类,在java中只支持单继承,继承要通过接口实现。
多态 多态允许一个类中有多个同名方法,单方法的具体实现却不同的机制. 可利用子类对父类的方法覆盖来具体实现方法。多态可以让类的对象响应同名消息去完成某种特定的功能。
2.类与包
- 类
类是对具有相同特性对象的封装的组合,是java最基本的单元. 类的声明: 【类修饰符】class 类名[extends 父类名][implements 接口名列表]{类体} 【】是可选的,也就是说可以没有。 先说类的修饰符,如下表
|修饰符|作用| |---| |public|访问控制符指明该类为公众类,可以被其他类进行访问或者引用其成员变量的名称和成员方法| |abstract|抽象类,指明不能实例化的类| |final|终结类,指明该类不能有子类| |class|关键字后是由编程人员定义的一个合法标识符的类名| |extends|声明类是从某个父类派生的| |implements|声明类要实现某些接口| 先看一段简单的类定义代码:
代码语言:javascript复制public class Date{
// 成员变量
private int day;
private int month;
private int year;
// 成员方法
public void setDate(d,m,y){
day = d;
month = m;
year = y;
}
}
<p></p> 成员变量的声明 [变量修饰符] 类型 变量名 【=初值】【,变量名【=初值】】,... 变量修饰符看下表
|变量修饰符|作用| |---| |public|允许所有的类进行访问| |protected|允许相同的包得类进行访问和该类的子类进行访问| |private|仅仅允许本类进行访问| |static|表示该变量是类变量,是该类全部对象共享的变量,它独立于该类的任何对象,可直接进行访问。对一些类的对象具有相同的属性值,可利用static来声明,没有被static 修饰的变量是实例变量| 访问类变量: 类名.类变量名 访问成员变量 对象名.成员变量名 <p></p> 成员方法 [方法修饰符] 返回值的类型 方法名(参数表){方法体} 方法修饰符
|名称|作用| |---| |public,protected,private|与变量的修饰符含义相同| |static|表示类方法| |abstract|没有定义方法体,static和final方法都不允许是abstract方法| |native|表示和其他语言代码的方法,用它与java集成| |synchronized|表示多个并发线程对共享手机访问的控制| |final|表示是最终的方法,不允许子类覆盖| 返回值和参数都和c语言类似,不再多说.
- 包 包是java对一组相关的类,接口和子类进行封装的机制。 声明一个包 package packageName(全名) 注意: 1.声明必须放在java文件的起始位置 2.如果编译单元没有包含包语句,编译器默认为该单元在主机当前工作的目录下,报名使用小写字母开头,为了使用包中的类,需要用import 语句引入 import package[.package].类名|* 后面可以使用类名或者号,号代表全部类
举个例子
代码语言:javascript复制package school.rooms;// 包的声明
import school.techers; // 引入子包
基本类库的包,由核心java包,javax和org扩展包组成,如下表
|名称|作用| |---| |java.lang|封装基本的类如:object.Class,String,System.Interger,thread等| |java.awt包|是封装抽象窗口工具包| |java.applet 包|为applet 提供执行所需的所有类| |java.io 包|提供程序输入/输出文件操作的类| |java.net|提供程序执行网络通信应用以及URL处理的类| |java.rmi|提供程序远程方法调用所需要的类| |java.math|提供程序常用的整数算术以及十进制算术的基本方法类| |java.util|提供实用程序类和集合类,如系统特性定义和实用,日期函数类,集合collection,map,list,Arrays等常用工具类| |java.sql|提供访问和处理标准数据源数据的类| |java.security包|提供网络安全操作类| |java.text|提供处理文本,日期和数字以及非自然语言的消息操作类| |java.bean|提供开发者编写java bean所需的类| |java.naming包|提供命名服务所需的类和接口| |java.swing|提供构建和管理应用程序图形界面的轻量级的构建| |java.rmi|提供远程方法调用的应用程序接口| |java.transaction|提供事物处理所需的类| |javax.sound|提供多mentioned声音要求的MIDI输入和输出以及合成操作基本类| |javax.accessibility|提供用户界面构建之间相互访问机制的基本类|
3.对象的创建、初始化、使用和删除
对象的创建 声明对象: TYPE ObjectName
代码语言:javascript复制OSCar myCar;
对象的创建
代码语言:javascript复制myCar = new OSCar(int 3);
new 的作用,程序在new 实例化对象后,才给对象分配内存并调用对象的构造方法。返回对象的引用地址 java 规定成员变量在使用之前必须赋值,可以赋值为null
对象的构造方法 构造方法名要求和类名相同,没有返回值,一个类可以创建多个构造方法,但是这些构造方法的参数相同.
[类修饰符]类名 ([形参列表])[throws 子句]{方法体}
代码语言:javascript复制class Point{
int x,y;
Point(){
x =0; y =0;
}
Point(int x, int y){
this.x = x;
this.y = y;
}
}
提示:如果定义的类没有构造函数,系统会自动提供一个构造函数
对象的使用 格式: 对象引用.调用方法名或者变量名
对象清除 对象的清除指释放对象所占的内存, 由于Java语言自动收集垃圾功能,会周期性的回收一些长期不用对象的内存,程序员不用担心内存的操作,但是,自动收集垃圾操作优先级比较低,允许有其它一些办法释放对象所占用的内存,清除内存的途径:
- 依靠java 的垃圾回收机制回收内存
- 调用系统System.gc() 请求垃圾回收 -java 系统开始运行时,自动调用java.lang.objact.finalize() 释放内存 在程序调用重写finalize()释放内存 protected void finalize() throws throwable{ ... super.finalize(); }