Java学习05

第五章 面相对象基础

1.面向对象

OOP(object oriented programming),面向对象编程

  • 是一种以对象为中心的编程思想,通过借助对象实现具体的功能
  • 将大问题拆分成小问题,然后借助不同对象分别解决,最终实现功能POP(procedure oriented Programming),面向过程编程
  • 是一种以过程为中心的编程思想,靠自己一步一步去实现功能,需要对每
    个步骤精确控制
  • 强调按步骤实现功能,先分析解决问题所需步骤,再自定义方法实现每个步骤功能,然后依次调用方法,最终实现功能

面向对象的特点:

  • 更符合人类思想习惯的思想
  • 利用对象去实现功能
  • 将复杂事情简单化
  • 针对要解决问题的用户而言,可以把大问题拆解成小问题,分别指挥不同的对象去解决小问题
  • 程序员的角色由执行者变成了指挥者、

面向对象开发:

  • 就是不断创建对象,使用对象,指挥对象做事情实现功能
  • 原则:如果有对象,就指挥对象实现功能;如果没有,就创建对象,然后再指挥

面向对象语言特征:封装,继承,多态

2.类

类的组成:

  • 属性:指事物的特征,静态描述,例如:手机有品牌,价格,尺寸
  • 行为:指事物所具有的功能,动态描述,例如:手机可以打电话,也可以发短信
    类的理解:
  • 类是对现实生活中一类具有共同属性和行为的事物的抽象
  • 类是对象的数据类型,类是具有相同属性和行为的一组对象的集合
  • 类就是对现实事物的一种描述
  • 类是引用数据类型中的一种

结论:类是对象的抽象,对象是类的实例

直接定义在类中的结构叫做成员。

类定义步骤:

  • 定义类
  • 编写类的成员变量
  • 编写类的成员方法

3.对象使用

创建对象格式:
类名 对象名 = new 类名();
调用成员格式:
对象名.成员变量
对象名.成员方法();

类的使用总结:

  • 一般Java程序会写两个类:基础类,测试类
  • 基础类就是我们要实现封装出来的那个类
  • 测试类就是包含main方法的类
  • 注意:只能在一个类中定义main方法,其是程序的入口,必须唯一

类和对象的关系:

  • 类是对一类事物的描述,是抽象的
  • 对象是一类事物的实例,是具体的
  • 类是对象的模板,对象是类的实体

结论:类是一种抽象的数据描述,对象是类的一个具体实例

4.对象内存

在这里插入图片描述
程序运行过程:

  1. 加载main方法并运行:在栈区开辟方法帧,支持main方法的运行
  2. 执行main方法代码,用到Student类,则加载该类:把Student.class加载到方法区
  3. 创建引用类型变量:在栈空间中开辟一块内存空间,用stu标识
  4. 在堆中开辟内存创建对象,并给属性赋上默认初始值
  5. 将堆空间对象内存地址值放入stu标识的内存区域中
  6. 对象属性赋值:将"tom"和20放入堆空间对象内存区域内
  7. 对象方法调用:找到方法区sayHello方法对应的代码,执行
  8. main方法继续执行,遇到 } ,程序执行结束

引用类型的理解:
上述案例中,stu是一个引用类型的变量,其对应栈区的一块内存区域,其放的是一个引用值(地址值),通过这个引用值,系统可以找到对象实际开辟的内存空间(堆区),进而进行对象属性操作或方法调用。

多个对象内存构成:
在这里插入图片描述

对象内存结论:
系统会为每个对象开辟单独的内存空间(堆空间),用来存储对象的属性。
类的成员方法存储在方法区,只保留一份,只要是该类的对象,都可以调
用。

5.变量对比

成员变量(全局变量)
局部变量(临时变量)
成员、局部变量区别:

  • 定义位置不同
    成员变量:类中方法外
    局部变量:方法内部或方法声明上(形参列表)
  • 内存中位置不同
    成员变量:堆内存
    局部变量:栈内存
  • 生命周期不同
    成员变量:随着对象的存在而存在,随着对象的消失而消失
    局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
  • 初始化值不同
    成员变量:有默认初始化值
    局部变量:没有默认初始化值,必须先定义、赋值才能使用

6.封装特性

封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
优点:

  • 通过方法来控制成员变量的操作,提高了代码的安全性
  • 把代码用方法进行封装,提高了代码的复用性
  • 隐藏代码实现细节,提供公共访问方式,简化操作

封装原则:

  • 把不需要对外提供的内容隐藏起来
  • 把属性隐藏,提供公共方法对其访问

private
private、public都是权限修饰符,可以用来修饰成员变量、成员方法和构造方法;

private表示私有,用它修饰类的成员(含成员变量、成员方法),则这些成员只能在类内(类的成员函数内部)去使用,其他地方不可以操作;

public表示公有,用它修饰类的成员(含成员变量、成员方法),则这些成员在类内、类外都都可以操作。

封装实现:

  1. 使用private修饰成员变量
  2. 提供对应的set,get方法
  3. 具体使用时,借助对象的set方法给属性赋值,get方法获取属性值

7.this关键字

在类的普通成员方法中,可以使用this关键字,其表示调用当前方法的对象引用,即哪个对象对象调用该方法,this就代表哪一个对象。

this关键字的用法:

  • 对成员变量和局部变量进行区分
    固定格式:this.数据成员;
  • 调用类中的成员方法
    固定格式:this.成员方法(实际参数列表);
  • 调用类中的其他构造器
    固定格式:this(实际参数列表);
    多参构造器调用时,只需要在this参数列表填入形参即可,少参调用多参时,是需要在this参数列表多出来的参数中填上其参数形式对应的默认值。

在这里插入图片描述
在这里插入图片描述
结论:成员方法被哪个对象调用,方法中的this就代表那个对象,即谁调用,this就代表谁。

注意: this(实际参数列表) 必须是构造方法中的第一行有效代码。

8.构造方法

构造方法可以对对象进行初始化操作,即为对象开辟内存空间的同时,给对象的成员赋初值。

注意事项:

  • 构造方法一般使用 public 修饰
  • 构造方法没有返回值类型,连 void 都没有
  • 构造方法名和类名相同(区分大小写)
  • 构造方法可以重载

//固定定义格式
[修饰符] 类名(参数列表) {
初始化语句s;
}

执行时机 :

  • 创建对象的时候会被自动调用,每创建一个对象,就会执行一次构造方法
  • 不要,也不能手动调用构造方法

注意事项补充:

  • 用户不定义构造方法,则系统会提供一个无参构造方法
  • 用户定义构造方法,则系统不再提供无参构造方法
  • 用户不需要也不可以主动调用构造方法,系统会自动调用
  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值