一、面向对象的程序设计思想
1.面向对象的思想:将客观事物看作具有状态和行为的对象,通过抽象找出同一类对象的共同状态和行为,构成类。
2.面向对象技术给软件发展带来的益处:可重用性、可靠性
3.面向对象语言的基本特征:抽象和封装、继承性、多态性
(1)抽象:忽略问题中与当前目标无关的方面,以便更充分地注意与当前目标有关的方面
a、过程抽象:将整个系统的功能划分为若干部分,强调功能完成的过程和步骤,而隐藏其具体的实现
(过程分解、递归技术 )
b、数据抽象:将需要处理的数据和这些数据上的操作结合在一起,抽象成不同的抽象数据类型
(2)封装:一种信息隐蔽技术。将对象的使用者和设计者分开,使用者不必知道行为实现的细节,只需使用设计者提供的消息来访问对象
a.清楚的边界
b.接口
c.受保护的内部实现
(3)继承:是指新的类可以获得已有类(称为超类、基类或父类)的属性和行为,称新类为已有类的派生类(也称为子类)
a.单继承
任何一个派生类都只有单一的直接父类
类层次结构为树状结构
b.多继承
一个类可以有一个以上的直接父类
类层次结构为网状结构,设计及实现比较复杂
(Java语言仅支持单继承)
(4)多态:一个程序中同名的不同方法共存;主要通过子类对父类方法的覆盖来实现;使语言具有灵活、抽象、行为共享、代码共享的优势,很好地解决了应用程序方法同名问题
二、java基本结构
1.类:在程序中,对象是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(Class)
[public] [abstract | final] class 类名称
[extends 父类名称]
[implements 接口名称列表]
{
变量成员声明及初始化;
方法声明及方法体;
}
class
表明其后声明的是一个类
extends
如果所声明的类是从某一父类派生而来,那么,父类的名字应写在extends之后
implements
如果所声明的类要实现某些接口,那么,接口的名字应写在implements之后
public:表明此类为公有类final:指明此类为终结类
2.变量和对象
变量除了存储基本数据类型的数据,还能存储对象的引用,用来存储对象引用的变量称为引用变量
声明一个引用变量时并没有对象生成
引用变量可以被赋以空值
对象:对象是类的具体实例
[public | protected | private]
[static][ final][transient] [volatile]
变量数据类型 变量名1[=变量初值],
变量名2[=变量初值], … ;
static指明这是一个静态成员变量
final指明变量的值不能被修改
transient指明变量是临时状态
volatile指明变量是一个共享变量
实例变量:没有static修饰的变量称为实例变量(Instance Variables)
用来存储所有实例都需要的属性信息,不同实例的属性值可能会不同
可通过下面的表达式访问实例属性的值:<实例名>.<实例变量名>
类变量:也称为静态变量,声明时需加static修饰符
不管类的对象有多少,类变量只存在一份,在整个类中只有一个值
类初始化的同时就被赋值
适用情况:类中所有对象都相同的属性;经常需要共享的数据;系统中用到的一些常量值
引用格式:<类名 | 实例名>.<类变量名>
final修饰符:实例变量和类变量都可被声明为final
final实例变量必须在每个构造方法结束之前赋初值,以保证使用之前会被初始化
final类变量必须在声明的同时初始化
3.方法
[public | protected | private]
[static][ final][abstract] [native] [synchronized]
返回类型 方法名([参数列表]) [throws exceptionList]
{
方法体
}
static指明方法是一个类方法类方法:也称为静态方法,表示类中对象的共有行为;声明时前面需加static修饰符;不能被声明为抽象的;类方法可以在不建立对象的情况下用类名直接调用,也可用类实例调用
构造方法
一种和类同名的特殊方法
用来初始化对象
Java中的每个类都有构造方法,用来初始化该类的一个新的对象
没有定义构造方法的类,系统自动提供默认的构造方法
4.包:是一组类的集合
(1)编译单元与类空间
a.一个Java源代码文件称为一个编译单元,由三部分组成
所属包的声明(省略,则属于默认包)
Import (引入)包的声明,用于导入外部的类
类和接口的声明
b.一个编译单元中只能有一个public类,该类名与文件名相同,编译单元中的其他类往往是public类的辅助类,经过编译,每个类都会产一个class文件
(2)包与目录
a.Java使用文件系统来存储包和类
b.包名就是文件夹名,即目录名
c.目录名并不一定是包名
d.用javac编译源程序时,如遇到当前目录(包)中没有声明的类,就会以环境变量classpath为相对查找路径,按照包名的结构来查找。因此,要指定搜寻包的路径,需设置环境变量classpath
(3)引入包
a.为了使用其它包中所提供的类,需要使用import语句引入所需要的类
b.Java编译器为所有程序自动引入包java.lang
c.import语句的格式:
import package1[.package2…]. (classname |*);
其中package1[.package2…]表明包的层次,它对应于文件目录
classname则指明所要引入的类名
如果要引入一个包中的所有类,则可以使用星号(*)来代替类名
5.内存回收技术
(1)垃圾收集器
自动扫描对象的动态内存区,对不再使用的对象做上标记以进行垃圾回收
作为一个线程运行
(2)finalize()方法
在类java.lang.Object中声明,因此 Java中的每一个类都有该方法
用于释放系统资源,如关闭打开的文件或socket等
声明格式:protected void finalize() throws throwable
如果一个类需要释放除内存以外的资源,则需在类中重写finalize()方法
对象初始化
系统在生成对象时,会为对象分配内存空间,并自动调用构造方法对实例变量进行初始化
对象回收
对象不再使用时,系统会调用垃圾回收程序将其占用的内存回收