面向对象编程思想
从现实世界中客观存在的事物出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的
对象
,作为系统的基本构成单位。
灵魂拷问:你是如何看待面向对象的?
面向对象编程
- 面向对象的分析(OOA,Object Oriented Analysis)
- 面向对象的设计(OOD,Object Oriented Design)
- 面向对象的编程实现(OOP,Object Oriented Programming)
面向对象编程思想实际上就是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。
- 分析系统中涉及的事务,根据“对象”抽象出“类”;
- 找出对象共有的特点,并且在类中定义为属性;
- 找出对象共有的行为,并且定义为类的方法。
类
[类修饰符] class 类名{
类的成员
… }
编码规范:
- 类名单词首字母大写
- 属性和方法第一个单词小写,其他单词首字母大写
属性和局部变量对比
局部变量
方法体中声明的变量、方法中的参数或代码块中声明的变量,都是局部变量
属性可以和局部变量同名,使用关键字
this
进行区分
属性在整个类中生效,无论在什么地方声明
局部变量必须先声明,然后才能使用
类和对象的关系
类是创建对象的模板,对象是类的实例。
- 类(class) — 是对某一类事物的描述
- 对象(object) — 是实际存在的某类事物的个体
类名 对象名 = new 构造方法();
对象的使用
在其他类中,使用对象名
点运算符
调用属性和方法
- 引用类的属性:对象名.属性
- 引用类的方法:对象名.方法名(实参)
在
类内
的方法中,访问本类的属性和方法可以
直接访问
垃圾回收机制
垃圾回收(Garbage Collection,GC),当没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。
JVM的一个系统级线程会
自动释放该内存块。
垃圾回收机制作用于
堆内存
,与栈内存无关。
会被回收的对象:
- 对象的引用被赋值为null
- 使用的匿名对象
- 超出生命周期的,
构造方法
一个类可以实例化出多个对象。
构造器
(构造方法/构造器,Constructor)
特点:
- 构造方法名必须与类相同的名称
- 不含返回值类型,也没有void
- 不能在方法中用return语句返回一个值
构造方法作用
构造方法用来完成对象的创建,即完成对象的实例化
- 在Java中,每个类都至少要有一个构造器
- 一个类可以不写出构造方法,编译器会自动的给这个类增加一个构造器,该构造器没有任何参数,我们称之为“默认的空构造器”。
-
编程者为该类定义了构造器,系统就不再提供默认的构造器
构造方法调用
- 只能在本类的构造方法中,调用其它重载的构造方法
- 使用this关键字,并且代码只能在构造方法的第一行
- 根据实参确定调用的构造方法
Java类库中常用的包
- java.lang Java默认包,任何程序中,该包都被自动导入。
- java.io 输入/输出操作有用的类的组成。
封装
封装关键字访问级别
封装的常规使用
- 将类中的属性用private关键字进行隐藏
- 通过规定方法访问属性,一般通过set开头的共有方法对属性赋值,用get开头的共有方法得到属性的值
- 在方法中加入控制语句,对不合法数据进行检查
静态:static关键字
注意:
只能修饰属性,不能修饰局部变量。
所有对象共享,称为
静态变量
或
类变量
不需要实例化,可以直接访问,称为
静态方法
或
类方法
静态方法里
只能直接访问静态
属性和方法。
两种方式访问:
- 直接访问:类名.属性;
- 实例化后访问:对象名.属性(不建议使用)
一个类中由static关键字修饰的,不包含在任何方法体中的代码块。
- 当类被载入时,静态代码块被执行,且只被执行一次
- 静态块经常用来进行类属性的初始化
单例模式
保证一个类仅
有一个实例
,并提供一个访问它的全局访问点。
单例模式要点:
- 某个类只能有一个实例;
- 它必须自行创建这个示例;
- 必须自行向整个系统提供这个实例。
单例模式实现:
1、拥有一个私有构造器;
2、提供一个自身静态私有的成员变量;
3、提供一个公有的静态公有的方法。
/ 饿汉式 牺牲空间获取较快时间 优点:速度快 缺点:占用内存空间
1. public class Singleton {
2. //在自己内部定义自己的一个实例,只供内部调用
3. private static Singleton instance = new Singleton();
4. private Singleton(){
5. //do something
6. }
7. //这里提供了一个供外部访问本class的静态方法,可以直接访问
8. public static Singleton getInstance(){
9. return instance;
10. }
11. }
// 懒汉式:牺牲时间换节省空间 缺点:速度慢 优点:占用较小内存空间
public class Singleton {
private static Singleton singleton;
public static TestSingleton getstance() {
if(singleton==null) {
singleton =new Singleton();
}
return singleton;
}
private Singleton() {
}
}