前言
讲解成员变量、this 关键字、隐藏和封装、static 关键字。在 Java 中创建对象必须借助于构造方法,对象创建成功后,可以通过对象调用类中的方法,方法在调用前,必须对方法进行声明。在一个类中,主要包括方法和成员变量(或称为属性),属性表示类所具有的特性,而方法表示类所具有的行为。一个优秀的程序必然离不开方法和属性,而 Java 面向对象程序设计技术博大精深。
内容
成员变量 | this关键字 |
隐藏和封装 | static关键字 |
1.成员变量
变量可分为成员和局部两种。
在 Java 中,变量可以分为成员变量和局部变量,成员变量是在类范围内定义的变量,局部变量是在方法中定义的变量。
成员变量 | 局部变量 |
实例属性 | 形参 |
类属性 | 方法局部变量 |
Java 中的成员变量分为类属性和实例属性两种,定义属性时没有 static 修饰符修饰的就是实例属性。其中,类属性从类被加载开始存在,直到系统完全销毁该类,类属性的作用域与该类的生命周期相同。而实例属性则从类的实例被创建起开始存在,直到系统销毁该实例,实例属性的作用域与其对应的实例的生命周期相同。
成员变量的使用
成员变量在使用之前,需要先进行声明,声明成员变量是在类的内部、方法的外部定义的变量,成员变量分为实例变量和类变量。实例变量作用域是当前所属实例的范围,类的成员变量的作用域是整个类范围。成员变量的声明要给出变量名、变量类型以及其他特性。
语法:
[<修饰符>][static][final]<变量类型><变量名>
static 是表示一个类的成员变量,即静态成员变量;
final 表示一个常量
this关键字
Java 提供了一个 this 关键字,this 关键字总是指向调用该方法的对象。
this 关键字最大的作用就是让类中的一个方法访问该类中的另一个方法或实例成员变量。
提醒
省略 this 前缀只是一种假象,虽然程序员省略了调用 jumpO 方法之前的 this,但实际此 this 依然存在。
解决实例变量与局部变量同名的问题
大多数情况下,在方法中访问类中的实例成员变量无须使用 this 前缀,如果方法中的一个局部变量和实例变量向名,但程序又需要在该方法中访问该实例变量,则必须使用 this 前缀。
隐藏和封装
封装是面向对象的三大特性之一,它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内!
封装是面向对象编程语言对客观世界的模拟,客观世界中的属性均被隐藏在对象内部,外界无法直接操作和修改。
如人的年龄属性只能随岁月的流逝而增加,通常不能随意修改人的年龄。对一个类或对象实现良好的封装,可以实现以下目的:
(1)隐藏类的实现细节。
(2)让使用者只能通过事先预定的方法访问数据,从而可以在该方法中加入控制逻辑,限制对属性的不合理访问
(3)可进行数据检查,从而有利于保证对象信息的完整性。
实现良好的封装,需要从以下两个方面考虑:
(1)隐藏对象的属性和实现细节,不允许外部直接访问。
(2)暴露出方法,让方法控制对这些属性进行安全的访问和操作。
因此,封装实际上有两个方面的合义:隐藏该隐藏的,暴露该暴露的。这两个方面都需要通过使用 Java提供的
访问控制符
访问控制符 | 同一类 | 同一包 | 子类中 | 所有类中 |
private | √ | — | — | — |
default | √ | √ | — | — |
protected | √ | √ | √ | — |
public | √ | √ | √ | √ |
static关键子
Java 类的运行包括类加载和实例化两个阶段,当一个类被加载至 JVM 中,静态成员会被初始化,被 static 修饰的成员即为静态成员,静态成员包括静态代码块、静态属性和静态方法。静态成员不属于某个对象,仅属于静态成员所在的类。
静态成员变量
类的成员变量包含静态变量(也称为类变量)和实例变量。静态成员变量是被 static 关键字修饰的成员变量,静态成员变量属于其所在类,被类中的所有实例共享,静态成员变量可通过类直接访问,也可通过类的实例访问静态成员变量。
静态方法
被 static 修饰的方法称为静态方法。静态方法也可通过类名直接访问。在使用静态方式时需要注意,静态方法中不能访问非静态的成员,如实例属性、实例方法。
静态方法通常作为工具方法,不会因为实例的不同而影响方法最终的执行效果。