封装
面向过程与面向对象
-
面向过程:一种较早的编程思想,顾名思义该思想就是站在过程的角度思考问题,强调的是我该怎么去做。面向过程的设计思想,系统软件适应性差,可拓展性差,维护性低。
-
面向对象:一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是我该让谁来做。面向对象最小的程序单元是类,必须先存在类的定义,再有对象,而具备某种功能的实体,称为对象。面向对象更符合我们常规的思维方法,稳定性好,可重用性强,易于开发大型软件产品,有良好的可维护性。面向对象的三大特征:封装、继承、多态。
变量
成员变量:直接定义在类中、方法外面的变量是成员变量,也叫字段
- 初始值:成员变量不初始化也是有初始值的,根据定义的数据类型决定默认初始值
- 作用域:在当前类中都有效,可以随意使用
- 生命周期:随对象在堆空间创建而产生,同时跟随对象销毁而销毁
局部变量:除了成员变量,其他的都是局部变量
- 初始值:局部变量没有默认初始值,只有初始化之后才能使用
- 作用域:在当前花括号类有效,出了当前花括号则无法使用
- 生命周期:随方法在栈空间创建栈帧时而产生,同时随方法调用完销毁而销毁
// 变量
public class Student {
private String name; // 成员变量,可以在当前类中任何地方使用
public void setName(String n) { // n是局部变量,只能在当前方法的花括号中使用,出了范围将无法使用
name = n; // 成员变量在当前类的方法中被使用
}
public String getName() {
return name; // 成员变量在当前类的方法中被使用
}
public void speak(String language) { // language是局部变量,只能在当前方法的花括号中使用
System.out.println("我会说" + language);
}
}
类和对象
- 类:类是拥有相同特性(状态)和行为(功能)的多个对象的抽象。通俗的说就是把一些事物抽象出来一个朦胧的模型,提取这些事物的共同特征,可以用这个模型代表这些事物。
注:使用成员变量来表示状态;使用成员方法来表示行为。 - 对象:对象是类实例化的体现,是根据类的特征具体成一个有模有样的实体(实例)。
- 对象实例化过程内存分析: 使用无参构造器创建对象,在堆区分配内存,用类名声明的变量在栈中分配内存,通过地址和对象引用联系起来,使用setter方法改变成员变量的值,用类声明的变量也能获取到改变后的成员变量,类中的方法就在栈中调用,用完就会断开连接,被GC回收.
// 类
/*
1. 成员变量的方法都不能使用static修饰,修饰符是可选的,也可以不写
2. 在对象设计中。描述对象的类和测试类分开编写
3. 在描述对象的类中不需要定义main方法,专门在测试类中提供main方法
*/
public class 类名 {
// 可以编写多个成员变量
[修饰符] 数据类型 变量名;
// 可以编写多个成员方法
[修饰符] 返回类型 方法名(参数表) {
方法体;
}
}
// 对象
/*
对象创建语法: 1. 跟变量定义相似,类是引用数据类型
2. new一个对象(实质是构造器构造一个对象)
*/
public static void main(String[] args) {
类名 对象名 = new 类名();
}
构造器
// 构造器(构造方法)
/*
1. 构造器(构造方法)与类同名,无返回类型
2. 构造器是用来创建对象的,如果类中没有自己手动添加的构造器,那么会默认提供一个无参数的的构造器,
创建对象时不会给成员变量赋值
4. 构造器可以有多个(方法重载),只要参数表不同即可,有参构造器可以在创建对象的同时给成员变量赋值,
但是存在自己添加的构造器时默认提供的无参构造器会消失
*/
[修饰符] 类名() {
}
封装思想
-
含义: 把对象的字段和方法存放在一个独立的模块中(类),把信息隐藏,尽可能隐藏对象的数据和功能实现细节.
-
好处: 保证数据的安全性,防止调用者随意更改数据,提高组件的重用性,把公用功能放到一个类中,谁需要该功能,直接调用即可.
-
访问权限:
private: 表示当前类私有,类访问权限,只能在本类中操作,离开本类之后就不能访问直接访问无(不写,缺省): 表示当前包私有,包访问权限,定义和调用只能在同一个包中才能访问
protected: 表示子类访问权限,同包中的可以访问,即使不同包但是有继承关系也可以访问
public : 表示公共的,可以在当前项目中的任何地方访问
JavaBean规范
JavaBean是一种某些符合条件的特殊类,必须遵循一定的规范:
- 类必须使用public修饰
- 必须保证有公共无参数构造器 ,即使手动提供了带参数的构造器,也得手动提供无参数构造器
- 字段必须使用private修饰,每个字段提供一对getter和setter方法
// JavaBean规范
public class Student { // 类用public修饰
// 成员变量私有化(private修饰)
private String name;
// 无参构造器
public Student() {
}
// 带参数的构造器
public Student(String name) { // 有参构造器,创建对象同时给成员变量赋值
this.name = name; // this关键字指向成员变量,解决成员变量与局部变量同名的二义性
}
// 成员变量的setter方法
public void setName(String name) {
this.name = name; // setter方法是用来给成员变量赋值的,通过对象调用可以多次赋值
}
// 成员变量的getter方法
public String getName() {
return name; // getter方法是用来获取成员变量的值的
}
}