Java学习(六)面向对象概述、封装

Java学习(六)面向对象概述、封装

我们来回想一下,这几天我们完成一个需求的步骤:首先是搞清楚我们要做什么,然后在分析怎么做,最后我们再代码体现。一步一步去实现,而具体的每一步都需要我们去实现和操作。这些步骤相互调用和协作,完成我们的需求。在上面的每一个具体步骤中我们都是参与者,并且需要面对具体的每一个步骤和过程,这就是面向过程最直接的体现。
那么什么是面向过程开发呢? 面向过程开发,其实就是面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后由这些功能方法相互调用,完成需求。



一、类和对象概述

概述

  • 面向对象特征
    ​ 封装(encapsulation)
    ​ 继承(inheritance)
    ​ 多态(polymorphism)
  • 举例

举例: 描述学生事物
姓名 , 年龄 , 性别 …
学习 , 吃饭 , 睡觉 …
属性: 就是该事物的描述信息
行为: 就是该事物能够做什么

现实中的事物和类的对应关系
		事物				       类
		属性	----------------- 成员变量
		行为	----------------- 成员方法
  • 定义类的成员(成员变量和成员方法)

a:成员变量 和以前定义变量是一样的,只不过位置发生了改变。在类中,方法外。
b:成员方法 和以前定义方法是一样的,只不过把static去掉,后面在详细讲解static的作用。

  • 如何使用类
    创建对象使用
格式:类名 对象名 = new 类名();

如何使用成员变量

格式:对象名.变量名

如何使用成员方法

格式:对象名.方法名(...)

成员变量和局部变量的区别

A:在类中的位置不同
	成员变量:在类中方法外
	局部变量:在方法定义中或者方法声明上
B:在内存中的位置不同
	成员变量:在堆内存
	局部变量:在栈内存
C:生命周期不同
	成员变量:随着对象的创建而存在,随着对象的消失而消失
	局部变量:随着方法的调用而存在,随着方法的调用完毕而消失
D:初始化值不同
	成员变量:有默认初始化值
	局部变量:没有默认初始化值,必须定义,赋值,然后才能使用。
	
注意事项::	局部变量名称可以和成员变量名称一样,在方法中使用的时候,采用的是就近原则。

方法的形式参数是类名的时候如何调用

A:Java中参数传递问题
	形式参数
		基本类型:形式参数的改变不影响实际参数
		引用类型:形式参数的改变直接影响实际参数
B:方法的参数是类名
	如果你看到了一个方法的形式参数是一个类 类型(引用类型),这里其实需要的是该类的对象。
	基本数据类型作为参数传递,属于值传递,传递的是这个变量的值,形参的改变,不影响实参。
    引用数据类型作为参数传递,属于引用传递,传递的是地址值,形参的改变,会影响实参。

匿名对象

  • 什么是匿名对象
    就是没有名字的对象
  • 匿名对象的应用场景
    a:调用方法,仅仅只调用一次的时候。
    b:匿名对象可以作为实际参数传递

二、封装

封装的概述

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

优点

隐藏实现细节,提供公共的访问方式
提高了代码的复用性
提高安全性。

原则:
将不需要对外提供的内容都隐藏起来。
把属性隐藏,提供公共方法对其访问

private关键字

  1. 特点
    a:是一个权限修饰符
    b:可以修饰成员变量和成员方法
    c:被其修饰的成员只能在本类中被访问
  2. 应用

(1):把成员变量用private修饰
(2):提供对应的getXxx()和setXxx()方法

this关键字

  1. 为什么要有this
    当我们的局部变量和成员变量相同的时候,如果我们不使用this关键字,那么会导致一个问题:就是局部变量隐藏了成员变量的问题

  2. this关键字特点
    是当前类的对象引用。
    简单的记,它就代表当前类的一个对象。谁调用这个方法,那么该方法的内部的this就代表谁

  3. this的应用场景
    解决局部变量隐藏成员变量

构造方法

  1. 构造方法概述和作用
    创建对象,给对象中的成员进行初始化
  2. 构造方法格式特点
    a:方法名与类名相同
    b:没有返回值类型,连void都没有
    c:没有具体的返回值
  3. 注意事项

a:如果我们没有给出构造方法,系统将自动提供一个无参构造方法。
b:如果我们给出了有参数构造方法,系统将不再提供默认的无参构造方法。
注意:这个时候,如果我们还想使用无参构造方法,就必须自己给出。建议永远自己给出无参构造方法

创建一个对象的步骤

	(1):加载Student.class文件进内存
	(2):在栈内存为s开辟空间
	(3):在堆内存为学生对象开辟空间
	(4):对学生对象的成员变量进行默认初始化
	(5):对学生对象的成员变量进行显示初始化
	(6):通过构造方法对学生对象的成员变量赋值
	(7):学生对象初始化完毕,把对象地址赋值给s变量

创建一个对象的内存图

static关键字

  • static关键字的特点
	a:随着类的加载而加载
	b:优先于对象存在
	c:被类的所有对象共享
		举例:咱们班级的学生应该共用同一个班级编号。
		其实这个特点也是在告诉我们什么时候使用静态?
			如果某个成员变量是被所有对象共享的,那么它就应该定义为静态的。
		举例:
			饮水机(用静态修饰)
			水杯(不能用静态修饰)
	d:可以通过类名调用
		其实它本身也可以通过对象名调用。
		推荐使用类名调用。
		静态修饰的内容一般我们称其为:与类相关的,类成员
  • static注意事项
a:在静态方法中是没有this关键字的
		如何理解呢?
			静态是随着类的加载而加载,this是随着对象的创建而存在。
			静态比对象先存在。
	b:静态方法只能访问静态的成员变量和静态的成员方法
	简单记:静态只能访问静态,非静态可以访问静态的也可以访问非静态的

静态变量和成员变量的区别

A:所属不同
	静态变量属于类,所以也称为类变量
	成员变量属于对象,所以也称为实例变量(对象变量)
B:内存中位置不同
	静态变量存储于方法区的静态区,JDK1.7之后静态变量存储在堆内存中
	成员变量存储于堆内存
C:内存出现时间不同
	静态变量随着类的加载而加载,随着类的消失而消失
	成员变量随着对象的创建而存在,随着对象的消失而消失
D:调用不同
	静态变量可以通过类名调用,也可以通过对象调用,推荐使用类名调用
	成员变量只能通过对象名调用

静态变量内存图


总结

面向对象概念很多,不要混淆概念,理解记忆,最好结合代码和内存图。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1.1 面向对象编程概述 面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,是一种将现实世界中的事物抽象成程序中的对象,通过对象之间的交互来实现程序功能的编程方式。面向对象编程具有封装、继承和多态等特性,能够使程序结构更加清晰、模块化,易于维护和扩展。 1.2 类和对象 类是一种抽象的概念,是一组具有相同属性和行为的对象的集合。对象是类的实例,是具有一定状态和行为的实体。在Java中,类是一种定义数据结构和行为的模板,对象是类的实例化结果。 1.3 封装 封装面向对象编程的一种基本特性,是将数据和行为封装在一个类中,对外部世界隐藏对象的实现细节,只暴露必要的接口,保护对象的状态不被外部直接访问和修改。 1.4 继承 继承是面向对象编程的一种重要特性,是一种通过已有类派生出新类的机制,新类继承了原有类的属性和行为,并可以在此基础上添加新的属性和行为。继承实现了代码的重用,提高了程序的可维护性和可扩展性。 1.5 多态 多态是面向对象编程的又一重要特性,是一种同一操作作用于不同对象上会产生不同结果的能力。多态实现了代码的通用性和扩展性,能够提高程序的可读性和可维护性。 1.6 Java面向对象特性 Java是一种面向对象编程语言,具有类和对象、封装、继承和多态等特性。Java中的类和对象是通过关键字class和new来定义和创建的,封装是通过访问控制符来实现的,继承是通过关键字extends来实现的,多态是通过方法重载和方法重写来实现的。Java还具有接口、抽象类、内部类等高级特性,能够更加灵活地实现面向对象编程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值