面向对象
1. 类与对象的理解
① 类的理解
- 类是对现实生活中一类具有共同属性和行为的事物的抽象
- 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合
- 简单理解:类就是对现实事物的一种描述
② 类的组成
- 属性:指事物的特征,例如:手机事物(品牌,价格,尺寸)
- 行为:指事物能执行的操作,例如:手机事物(打电话,发短信)
③ 对象的理解
- 客观存在的事物皆为对象 ,所以我们也常常说万物皆对象。
④ 类和对象的关系
- 类是对事物的一种描述,对象则为具体存在的事物
2. java中类的定义
① 类的组成
- 成员变量: 类中方法外的变量, 用来描述类的属性;
- 构造方法: 仅有修饰符和方法名,且方法名和类名一致的特殊方法,用来创建对象;
- 成员方法: 非静态的方法,不带static关键字,用来描述类的行为;
② 类的作用
- 描述事物;
- 类是java中的数据类型, 可以通过类创建对象;
③ 类的定义格式
public class 类名 {
//成员变量
private 数据类型 变量名;
...
//构造方法
public 类名(形参){
此处省略一万行...
}
//成员方法
public 返回值类型 方法名(形参){
方法体;
}
...
}
3. java中对象的创建
- 创建格式: 类名 对象名 = new 类名(实际参数);
4. java中类与对象的关系
- 一个类,可以创建出很多对象;
- 一个对象,必须有自己所属的类;
- 注意:对象与对象之间,相互独立;
5. 成员变量与局部变量的区别
- 定义位置不同;成员变量在类中,而局部变量在方法体或形参位置;
- 生命周期不同;成员变量随着对象的创建而存在,随着对象的死亡而死亡,而局部变量随着方法的调用而存在,方法的结束而死亡;
- 默认值不同;成员变量有默认值,规则同数组,而局部变量没有默认值;
- 内存位置不同;成员变量在堆中,而局部变量在栈中;
6. 封装
① 概念
将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来对隐藏的信息进行操作和访问。
② 特点
被private修饰,只能在本类中使用,在外部无法直接使用;
③ 好处
- 通过方法来控制成员变量的操作,提高了代码的安全性,把代码用方法进行封装,提高了代码的复用性;
④ 示例
public class student {
private int id;
private String name;
public student() {
}
public student(int id, String name, int age) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
- 在student类中,成员变量id 和 name 使用private修饰, 使其只能在该类内部使用, 外界无法直接访问这两个属性, 只能通过该类提供的getter和setter 方法来进行访问, 从而达到了封装的效果;
7. 构造方法
① 概念: 仅有修饰符和方法名,且方法名和类名一致的特殊方法
② 作用
- 创建对象
- 给类中的成员变量初始化(与setXxx方法的区别: 构造方法是创建对象的过程中对成员变量赋值;setXxx方法,是对象创建成功后,对成员变量修改值;)
③ 格式
public 类名(形参){
方法体;
(一般是对成员变量赋值)
}
④ 注意事项
- 如果一个类,没有写构造方法,那么java会默认给一个空参数的构造方法;(一旦手写了任意形式的构造方法,那么java将不再给默认的空参构造方法);
- 构造方法每执行一次,就意味着在堆中,新创建了一个对象;
- 构造方法可以重载;
8. javaBean
① 特点
- 成员变量私有;
- 写成员变量对应的getter与setter方法;
- 写空参数的构造方法和全参数的构造方法;
② 示例
public class Phone {
// 成员变量
private String brand;
private String type;
private double price;
// 空参构造
public Phone() {
}
// 全参构造
public Phone(String brand, String type, double price) {
this.brand = brand;
this.type = type;
this.price = price;
}
// getter and setter 方法
public String getBrand() {
return brand;
}
public void setBrand(String brand) {
this.brand = brand;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}