java面向对象基础

面向对象

  1. 面向对象思想
    回想一下,这几天当我完成一个需求的步骤:首先要搞清楚我在做什么,
    然后在分析怎么做,最后再去代码体现。一步一步去实现,而具体的每一步
    都需要我们去实现和操作。这些步骤相互调用和协作,完成我们的需求。
    在上面的每一个具体步骤中我们都是参与者,并且需要面对具体的每一个步
    骤和过程,这就是面向过程最直接的体现。
    当需求单一,或者简单时,我们一步一步去操作没问题,并且效率也挺高。
    可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就
    开始思索,能不能把这些步骤和功能在进行封装,封装时根据不同的功能,进
    行不同的封装,功能类似的封装在一起。这样结构就清晰了很多。用的时候,
    找到对应的类就可以了。这就是面向对象的思想。
    面向对象的思想:从现实世界中客观存在的事物出发来构造软件系统,在系
    统的构造中尽可能的使用人类的自然思维方式,强调直接以问题域(现实世
    界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把
    它们抽象地表示为系统中的对象,作为系统的基本构成单位(而不是用一些与
    现实世界中的事物相关比较远,并且没有对应关系的其它概念来构造系统)。
    这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌
    面向对象的方法是面向对象的世界观在开发方法中的直接运用。它强调系统
    的结构应该直接与现实世界的结构相对应,应该围绕现实世界中的对象来构造
    系统,而不是围绕功能来构造系统
  2. 类与对象关系
    编程语言,就是为了模拟现实世界的事物,实现信息化。比如:去超市买
    东西的计费系统,去银行办业务的系统。
    我们如何表示一个现实世界事物呢:
    ✓ 属性 就是该事物的描述信息
    ✓ 行为 就是该事物能够做什么
    ⚫ 类
    类:是一组相关属性和行为的集合。可以看成是一类事物的模板,使用事物
    的属性特征和行为特征来描述该类事物。
    举例:小猫。
    属性:名字、体重、年龄、颜色。 行为:走、跑、叫。
    ⚫ 对象
    对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋
    友),必然具备该类事物的属性和行为。
    现实中,一类事物的一个实例:一只小猫。
    举例:一只小猫。
    属性:tom、5kg、2 years、yellow。 行为:溜墙根走、蹦跶的跑、喵喵
    叫。
    ⚫ 类与对象的关系
    类是对一类事物的描述,是抽象的。
    对象是一类事物的实例,是具体的。
    类是对象的模板,对象是类的实体。
  3. 类和对象的定义
    3.1 类的定义格式
    ✓ 定义类:就是定义类的成员,包括成员变量和成员方法。
    成员变量:和以前定义变量几乎是一样的。只不过位置发生了改变。在类中,方法外。
    成员方法:和以前定义方法几乎是一样的。
    ✓ 对象实例化:创建对象
    类名 对象名 = new 类名();
    ✓ 使用对象访问类中的成员:
    对象名.成员变量;
    对象名.成员方法(); ✓ 匿名对象:就是没有名字的对象。
    是对象的一种简化表示形式,只能使用一次
    new 类名().成员方法();
    3.2 对象的内存图
    实例化对象时,会在内存堆中开辟空间存储对象的属性
    Person p1 = new Person();在内存中做了哪些事情? • 加载 Person.class 文件进内存
    • 在栈内存为 p1 开辟空间
    • 在堆内存为 p1 对象开辟空间
    • 对 p1 对象的成员变量进行默认初始化
    • 对 p1 对象的成员变量进行显示初始化
    • 通过构造方法对 p1 对象的成员变量赋值
    • p1 对象初始化完毕,把对象地址赋值给 p1 变量
    成员变量的默认值
    练习:定义手机类,包含品牌,颜色和价格
  4. 成员变量和局部变量
    ⚫ 在类中的位置不同
    成员变量 类中方法外
    局部变量 方法内或者方法声明上
    ⚫ 在内存中的位置不同
    成员变量 堆内存
    局部变量 栈内存
    ⚫ 生命周期不同
    成员变量 随着对象的存在而存在,随着对象的消失而消失
    局部变量 随着方法的调用而存在,随着方法的调用完毕而消失
    ⚫ 初始化值不同
    成员变量 有默认的初始化值
    局部变量 没有默认的初始化值,必须先定义,赋值,才能使用。
  5. 形参问题
    基本类型:形式参数的改变不影响实际参数
    引用类型:形式参数的改变直接影响实际参数
    基本类型作为参数,传递的是值,引用类型作为参数,传递的是地址值。
  6. this 关键字
    this:代表所在类的对象引用, 当一个对象创建后,Java 虚拟机(JVM)就会
    给这个对象分配一个引用自身的指针,这个指针的名字就是 this。并且 this 只
    和特定的对象关联,而不和类关联,同一个类的不同对象有不同的 this。
    this.成员变量
    this.成员方法()
  7. 构造方法
    构造方法就是类构造对象时调用的方法,主要用来实例化对象,就像一个对
    象加工厂。
    ⚫ 构造方法的定义格式
  8. 构造方法的名字必须与定义他的类名完全相同
  9. 构造方法的调用是在创建一个对象时使用 new 操作执行,不能显示调用
  10. 类中必定有构造方法,若不写,系统自动添加无参构造方法
  11. 不能被 static、final、synchronized、abstract 修饰
    构造方法注意事项
    ⚫ 如果不提供构造方法,系统会给出默认构造方法
    ⚫ 如果提供了构造方法,系统将不再提供
    ⚫ 构造方法也是可以重载的
  12. 封装的操作
    封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
    ⚫ 好处:
    隐藏实现细节,提供公共的访问方式
    提高了代码的复用性
    提高安全性。
    ⚫ 封装原则:
    将不需要对外提供的内容都隐藏起来。
    把属性隐藏,提供公共方法对其访问。
    ⚫ 封装的步骤
    使用 private 关键字来修饰成员变量。
    对需要访问的成员变量,提供对应的一对 getXxx 方法 、setXxx 方法。
  13. setter 和 getter 方法
    ⚫ private 的含义
    private 是一个权限修饰符,代表最小权限。
    可以修饰成员变量和成员方法。
    被 private 修饰后的成员变量和成员方法,只在本类中才能访问。
    ⚫ 提供 getXxx 方法 / setXxx 方法,可以访问成员变量
    10.一个标准的 java 实体类
    JavaBean 是 Java 语言编写类的一种标准规范。符合 JavaBean 的类,要
    求类必须是具体的和公共的,并且具有无参数的构造方法,提供用来操作成员变
    量的 set 和 get 方法。
    例如:
    11.static 关键字
    当 static 修饰成员变量时,该变量称为类变量。该类的每个对象都共享同
    一个类变量的值。任何对象都可以更改该类变量的值,但也可以在不创建该类的
    对象的情况下对类变量进行操作。
    静态变量定义格式:static 数据类型 变量名;
    举例:static int country;
    ⚫ static 关键字特点
    ✓ 可以修饰成员变量和成员方法
    ✓ 随着类的加载而加载
    ✓ 优先于对象存在
    ✓ 被类的所有对象共享
    ✓ 可以通过类名调用
    ⚫ static 关键字注意事项
    ✓ 在静态方法中是没有 this 关键字的
    ✓ 静态方法只能访问静态的成员变量和静态的成员方法
    11.1 静态变量和成员变量的区别
    ⚫ 所属不同
    静态变量属于类,所以也称为为类变量
    成员变量属于对象,所以也称为实例变量(对象变量) ⚫ 内存中位置不同
    静态变量存储于方法区的静态区
    成员变量存储于堆内存
    ⚫ 内存出现时间不同
    静态变量随着类的加载而加载,随着类的消失而消失
    成员变量随着对象的创建而存在,随着对象的消失而消失
    ⚫ 调用不同
    静态变量可以通过类名调用,也可以通过对象调用
    成员变量只能通过对象名调用
    11.2 静态方法
    当 static 修饰成员方法时,该方法称为类方法 。静态方法在声明中有
    static ,建议使用类名来调用,而不需要创建类的对象。调用方式非常简单。
    类方法:使用 static 关键字修饰的成员方法,习惯称为静态方法。
    定义格式:
    类名.静态方法名(参数);
    静态方法调用的注意事项:
    ✓ 静态方法可以直接访问类变量和静态方法。
    ✓ 静态方法不能直接访问普通成员变量或成员方法。反之,成员方法可
    以直接访问类变量或静态方法。
    ✓ 静态方法中,不能使用 this 关键字。
    12.main 方法
    public static void main(String[] args) {}
    ⚫ public 被 jvm 调用,访问权限足够大。
    ⚫ static 被 jvm 调用,不用创建对象,直接类名访问
    ⚫ void 被 jvm 调用,不需要给 jvm 返回值
    ⚫ main 一个通用的名称,虽然不是关键字,但是被 jvm 识别
    13.代码块
    在 Java 中,使用{}括起来的代码被称为代码块,根据其位置和声明的不
    同,可以分为局部代码块,构造代码块,静态代码块。
    ⚫ 局部代码块
    在方法中出现;限定变量生命周期,及早释放,提高内存利用率
    ⚫ 构造代码块
    在类中方法外出现;多个构造方法方法中相同的代码存放到一起,每次调
    用构造都执行,并且在构造方法前执行
    ⚫ 静态代码块
    在类中方法外出现,并加上 static 修饰;用于给类进行初始化,在加载
    的时候就执行,并且值执行一次。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值