面向对象【思想、概念、构造方法、构造代码块】

面向对象【思想、概念、构造方法、构造代码块】

1、面向对象思想

1.1、概述

面向对象是相对于面向过程而言的,面向过程强调的是其功能,而面向对象则强调的是将功能封装成对象

1.2、思想

  • (1)符合人们思考的思维方式;

  • (2)复杂的事情简单化;

  • (3)将程序员从执行变成设计指挥;

    比如我要达到某种结果,我就寻找能帮我达到该结果的功能的对象,如我要洗衣服我就买洗衣机,至于怎么洗我不管。

​ 再比如我要吃饭,面向过程就是我自己买菜自己做,面向对象就是去面馆吃,至于怎么做就是面馆的事,我不用管。

1.3、特征

封装:

隐藏了对象的属性,实现方法等,只对外提供公共访问的方式。

继承:

多个类中存在相同属性或行为时,将这些内容抽取到一个单独的类中,那么多个类无需再定义,这些属性或行为只需继承那个类就可以了。

多态:

父类或者接口引用指向子类对象。

2、类和对象

2.1、类

对现实世界中某类事物的描述是抽象的,概念上的定义。

2.2、对象

指事物具体存在的某一个个体。

2.3、类和对象的区别

一个对象就可以理解为某一类中的一个个体。

3、成员变量和局部变量

变量类型作用域存储位置初始值
成员变量针对整个类都有效(定义在类中)与对象保持一致,随着对象创建而存在,随着对象的消失而消失,存在于堆中有默认的初始值
局部变量只针对某一部分或某一个范围有效(即定义方法或语句体中)在方法被调用或者语句被执行的时候存在,存在于栈中。当方法或者语句执行完后,就会随着方法弾栈而自动释放没有默认的初始值,在试用之前要赋值

4、匿名对象

概念:

匿名对象就是没有名字的对象,是对象的一种简写形式。匿名对象可以简化代码。

应用场景:

(1)只调用一次类中的方法;如: Car c = new Car();c.run(); —> new Car().run();

(2)可以作为实际参数在方法传递中使用。

5、构造函数(构造方法)

5.1、概念

​ 从字面上理解即为构建创造时用的函数,即就是对象创建时要执行的函数。既然是对象创建时要执行的函数,那么只要在new对象时,知道其执行的构造函数是什么,就可以在执行这个函数的时候给对象进行属性赋值。

构造函数的格式:
修饰符 构造函数名(参数列表)
{
}

5.2、特点

(1)构造方法名与类名相同;

(2)没有返回值;

(3)没有返回类型。

5.3、作用

构造方法是用于创建对象,并对其进行初始化赋值,对象已建立就自动调用相应的构造方法(函数)。

5.4、构造函数调用和内存图解

在描述一个事物的时候,同时也描述了构造函数,这个构造函数是如何执行的呢?构造函数是专门用来创建对象的,也就是在new对象时要调用构造函数。现在来看看如何调用构造函数。

class  Person
{
	//Person的成员属性age和name
	private int age;
	private String name;
	//Person的构造函数,拥有参数列表
	Person(int a , String nm)
	{
		//接受到创建对象时传递进来的值,将值赋给成员属性
		age = a;
		name = nm;
	}
	public void speak()
	{
		System.out.println("name="+name+",age="+age);
	}
}
class PersonDemo
{
	public static void main(String[] args)
	{
		//创建Person对象
		//Person p = new Person();  
        // 定义了其他的构造方法 空构造就没有了Person()
		//上述代码编译报错,原因是在Person类中没有Person()这样的构造函数
		//创建Person对象,并明确对象的年龄和姓名
		Person p2 = new Person(23,"张三");
		p2.speak();
	}
}

上述代码演示了创建对象时构造函数的调用。即在创建对象时,会调用与参数列表对应的构造函数。
在这里插入图片描述

图解说明:

  1. 首先会将main函数压入栈中,执行main函数中的 new Person(23,"张三");
  2. 堆内存中分配一片区域,用来存放创建的Person对象,这片内存区域会有属于自己的内存地址(0x88)。然后给成员变量进行默认初始化(name = null,age = 0)。
  3. 执行构造函数(这里省略部分知识,后面讲解)中的代码(age = a ; name = nm;),这段代码执行结束后,成员变量age和name的值已经改变。此步骤也称为构造函数初始化。执行结束之后构造函数弹栈,Person对象创建完成。将Person对象的内存地址0x88赋值给p2。

5.5、注意事项

(1)如果一个自定义类没有构造方法,系统会默认给出无参构造方法

(2)如果一个自定义类提供了有参构造方法,系统便不在给出无参构造方法

(3)一般情况下,我们自定义类时,也给出无参构造方法

5.6、构造函数(构造方法)与普通函数(成员函数)的区别

格式区别作用区别调用区别
构造函数(构造方法)与类名相同,但没有返回类型返回值主要用于创建对象,并进行初始化值是在创建对象时被调用,一个对象建立只调用一次相应的构造方法
普通函数(成员方法)可以任意方式起名,必有返回值类型,可以没有返回值(void)主要用于完成某项特定的功能是由创建好的对象调用,并且可以多次调用
问题:

有了构造函数之后可以对对象的属性进行初始化,那么还需要对应的set和get方法吗?

​ 需要相应的set和get方法,因为对象在创建之后需要修改访问相应的属性值时在,这时只能通过set或者get方法来操作。

6、构造代码块

概念:

直接写在类中的代码块:优先于构造方法执行,构造代码块用于给所有对象初始化用,每创建一次对象就会执行一次构造代码块。

作用:

给对象进行初始化,对象一建立就执行,而且优先于构造方法执行

构造代码块和构造方法的区别:

构造代码块:给所有不同对象的共性进行统一初始化。

构造方法:给对应的对象进行初始化。

问题:“==”和“equals”的区别:

  • 如果比较两个基本数据类型的数值是否相等,则用“==”来比较;
  • 如果比较两个引用变量对象的值是否相等,则用“equals()”方法来比较;
  • 如果比较两个引用变量是否指向同一对象,则使用“==”来比较;
  • 对于自定义的类,应该根据重写父类或Object类中的equals()方法,否则默认的equals()方法功能其实是与“==”相同的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值