小白学Java04:面向对象基础
类和对象
- 类是描述对象的“基本原型”,它定义一类对象所能拥有的数据和能完成的操作。在面向对象的程序设计中,类是程序的基本单元。
- 相似的对象可以归并到同一个类中去,就像传统语言中的变量与类型关系一样。
- 程序中的对象是类的一个实例,是一个软件单元,它由一组结构化的数据和在其上的一组操作构成。
- 可以将现实生活中的对象经过抽象,映射为程序中的对象。对象在程序中是通过一种抽象数据类型来描述的,这种抽象数据类型称为类(class)。
类和对象的关系
- 类是Java的核心和本质。它是Java语言的基础,因为类定义了对象的本质。
- 类定义了一种新的数据类型,可以用新类型来创建该类型的对象。
- 类(class)是对象(object)的模板,而对象(object)是类的一个实例(instance)。
类的组成
- 变量:指对象的状态。
- 方法:指对象的功能单元。
- 消息:
软件对象通过相互间传递消息来相互作用和通信,一个消息由三部分组成:
• 接受消息的对象
• 接收对象要采取的方法
• 方法需要的参数
类定义的规范
[类的修饰符] class 类名称 [extends 父类名称][implements 接口名称列表]
{
变量定义及初始化;
方法定义及方法体;
}
类的组成结构
权限修饰符
-
public
公共的,权限公开,最大权限 -
protected
受保护的,仅限同包类,或不同包类但是属于继承本类的才能调用 -
不写
(缺省值)仅同一包内可访问 -
private
私有 :只能在定义他们的类中调用
变量
变量的作用域
决定了变量可使用的范围
-
全局变量:
可以在整个类中被访问 -
实例成员变量:
单个实例对象独有,修改对象自己的实例变量,不影响其他对象 -
类变量/静态变量:
本类的所有对象共享,使用static修饰,使用类名.静态变量名调用 -
局部变量:
定义在方法体中的变量,使用前必须初始化,只能在定义其的代码中被访问 -
小知识:
使用局部变量比使用全局变量更安全
方法分类
按返回值分
- 有返回值
- 无返回值(void)
按参数分
- 无参数
- 有参数(单个参数,多个参数) (了解形参与实参概念)
按功能分
- 实例方法
- 类方法 也称为静态方法
- 构造方法,也称为构造函数或者构造器
this关键字
- this:指向自己的引用,即当前方法所在的对象。
它的一个主要作用是要将自己这个对象当作参数,传送给别的对象中的方法
方法的重载
- 方法重载即指同一个类内多个方法可以享有相同的名字。
但是这些方法的参数必须不同(参数个数不同,参数类型不同,参数顺序不同)。
类加载的过程
- 初始化类变量,
- 分配类方法的入口函数
- 执行静态块
对象创建的过程:
- 初始化实例变量
- 分配实例方法的入口函数
- 执行对象块
- 执行构造函数
类变量与实例变量
- 对象是通过类来创建的; 因此创建对象时需先加载相应的类; 而一个类可以(通过new+构造方法) 创建多个对象,每个对象都有属于自己的实体(变量);
区别:
- 共享性:类变量被所有对象共享,即同一类的所有对象共享此类的类变量; 实例变量为每个对象独有; 操作自己的实例变量而不会影响其它对象
- 初始化时间:类变量在类加载时分配内存的;实例变量在创建对象时分配内存的;
- 消亡时间:类变量在程序退出时释放内存; 对象不存在实例变量就不存在了[对象什么时候消亡,变量的消亡时间]
- 调用形式:类变量一般通过类名.来调用;实例变量通过对象.调用
- 声明的形式:类变量static来声明,实例变量没有static声明
小知识:Java的垃圾回收机制
- Java的垃圾回收机制是自动的,如果想要手动回收,可以使用System.gc()
- 通过重写父类的finalize()方法,(当对象被释放时,将自动调用对象的finalize()方法)。也可以做点别的事情
类方法与实例方法的区别
-
类加载时,类方法被分配入口地址; 实例方法是在第一个对象创建时被分配入口地址
-
类方法一般通过类名来调用
-
在类方法中不能使用 this 关键字;因为this代表当前对象; 类方法是在类加载时就存在而此时对象还不存在
值传递和引用传递
- 当方法被调用时,如有参数,参数须要实例化(初始化);即参数是具体的值;
在java中,参数传递分为两种:
- 值传递:基本数据类型采用值传递;
实参的值永远不发生变化 - 引用传递:类类型采用引用传递;
实参的内存地址不变化,但是内容有可能变化