Java 面向对象精讲【上】
简介
📢博客主页:https://www.infoq.cn/profile/F7BF297568FAA8/publish
📢欢迎点赞 👍 收藏 ⭐留言 📝 欢迎讨论!
📢本文由 XiaoLin_Java 原创🙉
📢不要等待机会,而要创造机会。✨
一、面向过程和面向对象
1.1、面向过程
强调的是我该怎么去做。即功能的执行过程,即先干啥,后干啥。在面向过程中,我们会写很多的函数,每一个函数负责完成某一个功能。
而一个主函数里面有多个小函数,需要完成某个功能的时候依次调用即可
由此我们发现面向过程的设计思想存在以下几个缺陷:系统软件适应性差,可拓展性差,维护性低。
1.2、面向对象
一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是我该让谁来做
面向对象最小的程序单元是类,必须先存在类的定义,再有对象,而具备某种功能的实体,称为对象
面向过程和面向对象的差别如下:
面向过程和面向对象各有千秋,面向对象更符合我们常规的思维方式,稳定性好,可重用性强,易于开发大型软件产品,有良好的可维护性,它拥有三大特征:
封装
继承
多态
二、变量
2.1、变量的分类
根据变量定义的位置的不同,我们大致可以把变量分为两大类:
成员变量:直接定义在类中,方法的外面,又称之为字段,不是属性
局部变量:除了成员变量外,其他变量都是局部变量,仅仅存在于方法内、代码块、方法的形式参数中
2.2、变量的初始值
变量的初始化表示在内存中开辟一个存储空间进行存储,只有初始化后才可以使用,不同的变量类型初始值不同
成员变量
默认是有初始值的,不同类型的初始值不同
局部变量
局部变量没有初始值,必须手动初始化才可以使用
2.3、变量的作用域
变量根据定义的位置不同,也决定了各自的作用域是不同的,关键是看变量所在的花括号的位置
成员变量
在所定义的类中都有效
局部变量
从开始定义的位置到花括号内有效,花括号外就无效了
2.4、变量的生命周期
变量的生命周期,通俗的来说就是变量在内存中可以存活多久
成员变量
成员变量是属于对象的,对象在堆内存中,所以成员变量也是存储在堆内存中的,随着对象的 1 消亡而消亡
局部变量
局部变量是存储在栈内存的,随着方法的调用的结束而消亡
局部变量是存储在方法中的,每次调用方法都会在栈空间开辟一个内存空间,我们成为栈帧,方法 1 调用结束,栈帧就被销毁了,内存中存储的变量数据也就销毁了
三、类
3.1、类的定义
类是拥有相同特性(状态)和行为(功能)的多个对象的抽象
使用成员变量来表示状态
使用成员方法来表示行为
格式
注意:
成员方法和变量都不可以用 static 修饰,修饰符不是必须的
在描述对象的类中,不需要定义 main 方法,main 方法在专门的测试类中编写,切测试类和描述对象的类是分开编写的
四、对象
4.1、对象的创建
如果我们直接打印对象的话,打印的是类似数组地址的 hashCode 值
4.2、匿名对象
创建对象之后没有赋值给某个遍历,只能使用一次
4.3、给字段设置数据
4.4、获取字段的数据
4.5、对象调用方法
4.6、对象实例化的内存分析
以下面简单地 Cat 类进行分析
创建对象
此时如果通过查看对象的 name 和 age 属性可以发现分别为初始值 null 和 0
给对象赋值
对象调用方法
五、构造器(构造方法)
5.1、构造器的定义
构造器,也称之为构造方法(Constructor),作用是用来创建对象和给对象做初始化操作,只能在创建对象的时候使用一次
构造器的语法
构造器的特点
构造器名称和类名相同
不能定义返回类型
构造器中不能出现 return 语句
5.2、默认构造器
我们在创建类的时候,没有手动写构造器,而没有报错,原因是因为如果我们在编写对象的时候,如果没有写构造器的话,编译器会在编译源文件的时候,自动创建一个默认构造器,默认构造器的特点:无参数、无方法体。
如果类使用了 public 修饰,那么他默认的构造器也会使用 public 修饰,反之亦然
5.3、构造器的使用
没有构造器之前
之前,我们是先通过一个默认参数构造器,先创建出一个对象再初始化(给字段设置值)
有了构造器之后
有了构造器之后,可以直接通过构造器同时完成对象创建和初始化操作
当自己定义出构造器之后,编译器不再创建默认的构造器了,所以就不再自动有无参构造器,我们一般在开发中无参构造器和有参构造器会同时编写,他们构成重载关系
六、封装
封装是面向对象三大特征之一,其含义有两个(掌握思想):
把对象的字段和方法存放在一个独立的模块中(类)
信息隐藏,尽可能隐藏对象的数据和功能的实现细节
封装的好处:
保证数据的安全性,防止调用者随意修改数据
提高组件的重用性,把公用功能放到一个类中,谁需要该功能,直接调用即可
限制字段不能够随意修改的利器就是访问修饰符
6.1、访问修饰符
访问修饰符,决定了有没有权限访问某个资源,封装的本质就是要让有些类看不到另外一些类中定义的字段和方法。Java 提供了不同的访问权限修饰符来限定类中的成员让谁可以访问到
private:表示当前类是私有的,只能在本类中访问,离开本类之后就不能直接访问
不写:表示当前包私有,定义和调用只能在同一个包中,才能访问
protected:表示子类访问权限,同一个包的可以访问,即使不同包但是有继承关系也是可以访问的
public:表示公共的,可以在当前项目的任何地方访问
一般在开发中都是提供私有属性,暴露公有的访问方法
6.2、JavaBean 规范
JavaBean 是一种某些符合条件的特殊类,但是必须遵循一定的规范:
类必须使用 public 修饰
必须保证有公共无参数构造器,即使手动提供了带参数的构造器,也得手动提供无参数构造器
段使用 private 修饰,每个字段提供一对 getter 和 setter 方法
6.3、构造器和 setter 方法
构造器和 setter 方法都可以给对象设置数据:
构造器,在创建对象的时候设置初始数据,只能初始化一次。
setter 方法,创建对象后再设置初始数据,可以设置多次。
版权声明: 本文为 InfoQ 作者【XiaoLin_Java】的原创文章。
原文链接:【http://xie.infoq.cn/article/a8ab1ed6a77e58a6a650f4eb0】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论