【JavaSE】面向对象基础
类和对象
面向对象和面向过程的思想对比
-
面向过程编程(Procedure Oriented Programming):是一种以过程为中心的编程思想,实现功能的每一步,都是自己实现的
-
面向对象编程(Object Oriented Programming):是一种以对象为中心的编程思想,通过指挥对象实现具体的功能
对象:指客观存在的事物 (万物皆对象)
类和对象
-
类是对现实生活中一类具有共同属性和行为的事物的抽象
【类】是对事物,也就是对象的一种描述,可以将类理解为一张设计图,根据设计图,可以创建出具体存在的事物
-
类的组成
-
属性:该事物的各种特征
-
行为:该事物存在的功能(能够做的事情)
-
-
对象:是能够看得到摸得着的真实存在的实体
类是对对象的描述
对象是类的实体
一个类可以创建出多个对象
类的定义
-
类的组成:属性和行为
-
属性:在代码中通过成员变量来体现(类中方法外的变量)
-
行为:在代码中通过成员方法来体现(和前面的方法相比去掉static关键字即可)
-
-
类的定义步骤
-
定义类
-
编写类的成员变量
-
编写类的成员方法
-
public class 类名{
// 成员变量
变量1的数据类型 变量1;
String name; // 未赋值默认null
变量2的数据类型 变量2;
int age; // 未赋值默认0
......
// 成员方法
方法1;
public void study(){
System.out.println("学习");
}
方法2;
......
}
对象的创建和使用
-
创建对象
格式:
类名 对象名 = new 类名();
-
使用对象
使用成员变量:
对象名.变量名
使用成员方法:
对象名.方法名();
-
案例
// 需求:定义一个类,然后定义一个手机测试类,在手机测试类中通过对象完成成员变量和成员方法的使用
public class Phone{
// 成员变量:品牌、价格、....
String brand;
int price;
// 成员方法:打电话、发短信、....
public void call(String name){
System.out.println("给" + name + "打电话");
}
public void sendMessage(){
System.out.println("群发短信");
}
}
对象内存图
- 单个对象内存图
- 两个对象内存图
-
两个引用指向同一对象内存图
-
垃圾回收
注意:当堆内存中,对象或数组产生的地址,通过任何方式都不能被找到后,就会被判定为内存中的 “垃圾”
垃圾会被Java垃圾回收器,空闲的时候自动进行清理
-
-
成员变量和局部变量
-
成员变量:类中方法外的变量;存放于堆内存;随着对象的存亡而存亡;有默认的初始化值
-
局部变量:方法中的变量;存放于栈内存;随着方法调用存在,方法调用完毕结束;无默认初始化值,必须先定义、赋值再使用
-
封装
-
private关键字:权限修饰符,可以用来修饰成员,来提高数据的安全性
特点:只能在本类当中进行访问,外界需要访问可以定义方法来进行设置值和获取值
针对private修饰的成员变量,如果需要被其他类引用,提供相应的操作
-
提供
get变量名();
方法,用于获取成员变量的值,方法用public修饰 -
提供
set变量名();
方法,用于设置成员变量的值,方法用public修饰
-
// 新建Student类
public class Student{
private String name;
private int age;
public void setName(String n){
name = n;
}
public String getName(){
return name;
}
public void setAge(int a){
age = a;
}
public int getAge(){
return age;
}
public void show(){
System.out.println(name + age);
}
}
-
this关键字:可以调用本类的成员(变量,方法),解决局部变量和成员变量重名问题
局部变量和成员变量如果重名,Java使用的是就近原则
this
代表所在类的对象引用,方法被哪个对象调用,this就代表哪个对象
public class Student{
private int age;
public void method(int age){
this.age = age; // 添加this关键字,使前一个age成为成员变量,再将局部变量age赋值过去
}
}
-
this内存原理
-
封装
-
面向对象三大特征之一(封装、继承、多态)
-
隐藏实现细节,仅对外暴露公共的访问方式(类似于插线板)
-
常见体现:
-
将代码抽取到方法中,是对代码的一种封装;将属性抽取到类中,是对数据的一种封装
-
私有的成员变量,提供setXxx和getXxx方法
-
-
好处
-
提高了代码的安全性
-
提高了代码的复用性
-
-
构造方法
-
构建、创造对象的时候,所调用的方法
-
格式:
-
方法名与类名相同,大小写也要一致
-
没有返回值类型,连void也没有
-
没有具体的返回值(不能由return带回结果数据)
-
public class Student{
public Student(){
System.out.println("这是Student类的构造方法");
}
}
-
执行时机:
-
创建对象的时候调用,每创建一次对象,就会执行一次构造方法
-
不能手动调用构造方法
-
-
作用:用于给对象的数据 (属性) 进行初始化
class Student{
private int age;
public Student(int age){
this.age = age;
}
}
-
注意事项
构造方法的创建:
-
如果没有定义构造方法,系统将给出一个默认的无参数的构造方法
-
如果定义了构造方法,系统将不再提供默认的构造方法
-
-
标准类的代码编写和使用
/*
JavaBean类:封装数据的类
*/
public class Student{
// 私有变量
private String name;
private int age;
// 无参数构造方法
public Student(){}
//有参数构造方法
public Student(String name, int age){
this.name = name;
this.age = age;
}
//set/get方法
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public String getAge(){
return age;
}
}
推荐阅读:【JavaSE】API基础
转载自:https://juejin.cn/post/7082686505243639839