day07_面向对象基础

面向对象基础

一、类和对象

面向对象和面向过程的思想对比

  • 面向过程 POP:是一种以过程为中心的编程思想,功能的每一步,都是自己实现的
  • 面向对象 OOP:是一种以对象为中心的编程思想,通过指挥对象实现具体的功能

1.1、类和对象的关系

什么是类,类的组成有哪些:

类是对现实生活中,一类具有共同属性和行为的事物的抽象

类由属性和行为组成:

  • 属性:该类事物所具有的共同特征
  • 行为:该事物存在的功能(能做的事情)

什么是对象:是看得见,摸得着的真实存在的物体

类是对事物也就是对象的一种描述,可以将类理解为一张设计图,根据设计图,可以创建出具体存在的事物

小结:

  • 客观存在的任何一种事物,都可看做为程序中的对象(万物皆对象)
  • 使用面向对象思想可以将复杂问题简单化
  • 将我们从执行者的位置,变成了指挥者

1.2、类的定义

类是的属性和行为,在代码中通过什么体现:

  • 属性:成员变量(类中方法外的变量)
  • 行为:成员方法(和前面学习的方法相比不带static关键字)

定义一个类的步骤:

  1. 创建Java文件 编写类名
  2. 编写类的 成员变量
  3. 编写类的 成员方法

类创建完成后,不能直接右键运行:因为我们没有提供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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

掉发阿龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值