javaSE_面向对象编程之类与对象

一、面向对象编程:

现在的编程主要有一下几种:

1)面向对象编程
  • 例子:狗吃屎(主要突出的是狗和屎两个对象)
  • 每个对象 ----> 是一个类
  • 属性及方法 —> 能够进行现实生活的抽象
  • 名次扩展:
    OOA:面向对象分析
    OOD:面向对象设计
    OOP:面向对象编程
2)面向过程编程

例子:吃狗屎(主要突出 吃 这一过程)

3)面向切面编程(EE-AOP)
4)面向接口编程 - 接口优先原则
5)函数式编程

二、面向对象编程的三大特征:

  1. 封装性:所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。简而言之就是,内部操作对外部而言不可见(保护性)

  2. 继承性:继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

  3. 多态性(*):所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。

三、类与对象的定义与使用

  • 所谓的类是指共性的概念,而对象指的是一个具体的、可以使用的事物。

  • 产生:首先产生类(类是生产对象的蓝图),而后才可以产生对象。对象的所有行为,一定在类中进行了完整的定义。

3.1 类与对象的定义:

在这里插入图片描述
举个例子(定义一个Person类):
在这里插入图片描述

其中关键字new的作用:开辟内存,,,只要出现了关键字new,就开辟了内存
Java中,所谓的性能调优,调整的就是内存问题

4、对象内存分析

我们可以简单的将java中的内存区域分为栈内存堆内存两块区域(实际Java内存区域的划分远比这个复杂,后续会详细讲述)

  1. 栈内存(虚拟机局部变量表):存放的是局部变量(包含编译期可知的各种基本数据类型、对象引用-即堆内存的地址,可以简单的理解为对象的名称),Java栈是与线程对应起来的,每当创建一个线程,JVM就会为这个线程创建一个对应的Java栈。
  2. 堆内存:保存的是真正的数据。即对象的属性信息
    具体分析如下:
    在这里插入图片描述

注意:

对象(引用数据类型)必须在实例化后调用,否则会产生NullPointerException(运行时错误),编译时不会出错"NullPointerException"在各位今后的开发生涯中会一直存在,只有引用类型(数组、类、接口)才会产生此类异常。以后出现此类异常,就根据出错位置查看引用类型变量是否初始化
  1. 引用传递分析
    引用传递的本质:一块堆内存可以被多个栈内存所指向
    在这里插入图片描述

垃圾空间:没有任何栈内存指向的堆内存空间
建议:所有的垃圾空间会不定期GC,GC会影响性能,所以开发之中一定要控制好对象的产生数量(无用的对象尽量少产生)

四、private实现封装和构造方法

private 封装

封装是面向对象里最复杂的概念,使用private关键字实现的封装处理只是封装的第一步,若想完全掌握封装,需要后续将继承和多态学完。

无封装范例:
在这里插入图片描述
在没有封装属性的情况下,外部通过属性可以对对象进行任意操作,为了解决这个问题,可以使用private对对象进行封装(对象不能直接操作属性)。

在这里插入图片描述
使用private封装后要访问私有属性,需要使用setter和getter方法:

  • setter方法:主要用于进行属性内容的设置与修改
  • getter方法:主要用于属性内容的取得

类的设计原则:没有特殊说明,在编写类的时候,所有属性(成员变量)必须使用private封装。

构造方法:

所谓的构造方法就是使用关键字new实例化新对象时来进行调用的操作方法。

对于构造方法的定义,也需要遵循以下原则:

  1. 方法名称必须与类名称相同
  2. 构造方法没有返回值类型声明
  3. 每一个类中一定至少存在一个构造方法(没有明确定义,则系统自动生成一个无参构造)
    在这里插入图片描述
    注意:没有返回值类型声明,不是没有返回值(不能加void)

编译器是根据程序结构来区分普通方法与构造方法的,所以在构造方法前没有返回值类型声明
若类中定义了构造方法,则默认的无参构造将不再生成

构造方法的重载:

构造方法的参数个数和类型不同
建议:若干构造方法,请按照参数个数升序或降序
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值