面向对象 “上”
1, 什么是面向对象, 什么是面向过程 ?
面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,
4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。
2,类, 对象, 成员变量(属性,静态属性), 成员方法(方法, 动态属性), 局部变量分别的含义 ?
类变量(也叫静态变量):是类中独立于方法之外的变量,用static 修饰。
(static表示“全局的”、“静态的”,用来修饰成员变量和成员方法,或静态代码块
(静态代码块独立于类成员,jvm加载类时会执行静态代码块,每个代码块只执行一次,按顺序执行))。
3, 面向对象的特点有什么 ?
封装
private(public)
继承
多态
4, 如何在程序中创建一个对象 ?(首先要定义一个类)
类名 变量名 = new 类名();
类体
成员变量的作用范围(整个类)
类和类之间的关系
关联关系(不好下一个定义描述关联关系, 比较弱的关系)
一个类中的某个方法的参数是另一个类的对象
一个类中的成员变量是另一个类的对象
*继承关系(extends关键字)
什么是一种什么
运动员
篮球运动员
足球运动员
聚合关系
聚集
球队->队长
组合
一个类的组成部分是必不可少的
*实现关系(接口)(实现关系是一种特殊的继承关系)
机器人:
走
跑
跳
5, 成员变量在类中是如何初始化的 ?
byte 0
short 0
int 0
long 0L
float 0.0F
double 0.0D
boolean false
char '/u0000'
引用类型 null
(所有的类, 所有的接口, 所有的数组)
6, 如何更好的设计一个类 ?
合适的方法出现在合适的类里面
7, 什么是类的封装 ?
private关键字修饰的成员变量, 只能在当前类中使用
8, 什么叫构造方法 ? 构造方法的重载 ? // 方法名相同, 参数列表不同
构造方法:
就是用来构造一个对象的方法
1, 构造方法没有返回值, 没有返回值也不能写void
2, 构造方法名与类名一模一样
3, 定义一个类的时候, 如果没有写任意的一个构造方法, 则默认生成一个空参的构造方法
4, 当一个类中有定义的带参数的构造方法的时候, 则空参的构造方法会消失(如果想使用空参的构造方法, 必须显式的写出来)
练习: 封装一个Student类
姓名 String
年龄 int
语文分数 double
数学分数 double
方法: 显示姓名, 年龄, 总分, 平均分
// 分别以set方法和构造方法赋值
9, this关键字代表的含义是 ? 该如何使用
this关键字: 当前对象的引用
大多数情况用来解决传入的参数和成员变量重名的现象
可以通过this关键字来调用当前类中的其他的构造方法this();
10, static关键字代表的含义是 ? 该如何使用 ?
static: 静态的, 可以修饰变量(成员变量, 方法, 类)
修饰变量:
static修饰的变量不存在于栈空间和堆空间, 存在于数据区
不管实例化多少个对象, 所有的对象都共享一份
static修饰的变量在访问的时候不需要实例化, 直接拿类名去点出来
修饰方法:
用途, 做一些工具类的使用
因为不需要实例化, 使用起来比较方便
注意:
static修饰的方法不能访问非静态成员!!!
11, 单例模式介绍
public class Car { private String driver; // private static Car car = new Car(); // 饿汉式 private static Car car; private Car() { } public static Car getCar() { if (car == null) { car = new Car(); // 懒汉式 } return car; } public String getDriver() { return driver; } public void setDriver(String driver) { this.driver = driver; } }
public static void main(String[] args) { Car car = Car.getCar(); System.out.println(car); car.setDriver("小明"); Car car2 = Car.getCar(); System.out.println(car2.getDriver());
}
public static void m() {}
}