面向对象基础
文章目录
一、类和对象
面向对象和面向过程的思想对比
- 面向过程
POP
:是一种以过程
为中心的编程思想,功能的每一步,都是自己实现的 - 面向对象
OOP
:是一种以对象
为中心的编程思想,通过指挥对象实现具体的功能
1.1、类和对象的关系
什么是类,类的组成有哪些:
类是对现实生活中,一类具有共同属性和行为的事物的抽象
类由属性和行为组成:
- 属性:该类事物所具有的共同特征
- 行为:该事物存在的功能(能做的事情)
什么是对象:是看得见,摸得着的真实存在的物体
类是对事物也就是对象的一种描述,可以将类理解为一张设计图,根据设计图,可以创建出具体存在的事物
小结:
- 客观存在的任何一种事物,都可看做为程序中的对象(万物皆对象)
- 使用面向对象思想可以将复杂问题简单化
- 将我们从执行者的位置,变成了指挥者
1.2、类的定义
类是的属性和行为,在代码中通过什么体现:
- 属性:成员变量(类中方法外的变量)
- 行为:成员方法(和前面学习的方法相比不带static关键字)
定义一个类的步骤:
- 创建Java文件 编写类名
- 编写类的 成员变量
- 编写类的 成员方法
类创建完成后,不能直接右键运行:因为我们没有提供main方法,我们需要再创建一个测试类,在测试类中先创建对象,再进行测试
public class Student{
//成员变量
String name;
int age;
//成员方法
public void method(){
System.out.println("这是成员方法");
}
}
1.3、对象的创建和使用
创建对象的格式:
类名 对象名 = new 类名();
例如:Student s = new Student();
注意:类名就是对象的
数据类型
如何使用对象
- 使用对象的成员变量:格式:
对象名.变量名;
(范例:s.name;
) - 使用对象的成员方法:格式:
对象名.方法名;
(范例:s.study();
)
如果我们打印一个对象名,控制台会打印该对象的内存地址:全类名(包名+类名)@十六进制内存地址
public class DemoTest{
public static void main(String[] args){
//创建对象
Student s = new Student();
//使用对象的成员变量
System.out.println(s.name);
System.out.println(s.age);
//使用对象的成员方法
s.method();
}
}
二、对象内存图
new出来的对象:在堆内存开辟空间
成员变量:有默认初始化值
当出现多次new的动作时,字节码文件不会多次加载:我们通常使用一张"设计图",就可以创造出多个"对象"
对象类型的变量,是引用类型
对象类型的变量,记录了该对象的内存地址
垃圾回收:当堆内存中,对象和数组产生的地址,通过任何方式都不能被找到后,就会被判定为内存中的"垃圾",垃圾会被"Java垃圾回收器"在空闲时间自动进行清理
三、成员变量和局部变量
四、封装
面向对象的三大特征:封装、继承、多态
封装:隐藏实现细节,仅对外暴露公共的访问方式
封装常见的体现:
- 私有成员变量,并对外提供
getXxx()
、setXxx()
方法 - 将代码,抽取到方法中,这是对代码的一种封装
- 将属性,抽取到类中,这是对数据的一种封装
封装的好处:
- 提高了代码的
安全性
- 提高了代码的
复用性
4.1、private关键字
private
:私有的意思,是一个权限修饰符,可修饰成员(成员变量、成员方法)
private
关键字的特点:被private修饰的成员,只能在本类
中被访问
被
private
修饰的成员变量,可能被其他类使用,所以我们在本类中,需要提供public
修饰的getXxx()
、setXxx()
方法,让其他类操作私有的成员
//(不完全)标准类的编写
public class Student{
private String name;
public void setName(String s){
name = s;
}
public String getName(){
return name;
}
}
4.2、this关键字
this
关键字的作用:
- 可以调用本类的成员变量、成员方法
- 解决局部变量和成员变量重名问题
理解:方法被哪个对象调用,方法中的
this
就代表哪个对象!
this
的内存原理
public class Student{
private String name;
public void setName(String s){
this.name = name;
}
public String getName(){
return name;
}
}
五、构造方法
什么是构造方法:创建对象时,所调用的方法
构造方法的格式特点:
- 方法名与类名相同
- 没有返回值,连void都没有
- 没有具体的返回值(不能由return带回结果数据)
执行时机:创建对象时候会自动调用。每创建一次对象,就会执行一次构造方法(注意不能手动调用构造方法)
public class Student{
private String name;
private int age;
//无参构造方法
public Student(){
}
//带参构造方法
public Student(String name,int age){
this.name = name;
this.age = age;
}
}
构造方法的作用:
- 本质上构造方法的作用是:创建对象
- 根据构造方法的执行时机:我们还可以用它在创建对象的同时,给对象的数据进行初始化
构造方法的注意事项:
- 如果没有定义构造方法,系统会给一个默认空参构造(父类那里继承来的)
- 如果定义了构造方法,系统就不会提供默认构造方法了(所以以后定义类时,空参带参都提供)
//标准类的编写
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}