成员变量
成员变量的概述:在Java中,变量可以分为成员变量和局部变量,成员变量是在类范围内定义的变量,局部变量是在方法中定义的变量, Java程序中的变量分化如图 2.1 所示。
提醒:成员变量也称为属性。
*
Java中的成员变量分为类属性和实例属性两种,定义属性时没有static修饰符修饰的就是实例属性。其中,类属性从类被加载开始存在,直到系统完全销毁该类,类属性的作用域与该类的生命周期相同。而实例属性则从类的实例被创建起开始存在,直到系统销毁该实例,实例属性的作用域与其对应的实例的生命周期相同。
*
成员变量的使用:
成员变量在使用之前,需要先进行声明,声明成员变量是在类的内部、方法的外部定义的变量,成员变量分为实例变量和类变量。
实例变量作用域是当前所属实例的范围,类的成员变量的作用域是整个类范围。成员变量的声明要给出变量名、变量类型以及其他特性,其语法如下:
语法:
[<修饰符>] [static] [final]<变量类型><变量名>
说明:
(1)static:表示一个类的成员变量,即静态成员变量。
(2)final:表示是一个常量。
创建Hero应用类,在该类中定义name 和 age 实例变量,验证实例变量的作用域,详见示例2.2。
示例2.2
public class Hero{
String name; // 英雄名字
int age; // 英雄年龄
public static void main(String[] args){
//创建英雄对象hero1
Hero hero1 = new Hero();
//为hero1的实例属性name 赋值
hero1.name="德鲁伊";
//为 hero1的实例属性 age 赋值
hero1.age=45;
// 创建英雄对象 hero2
Hero hero2 = new Hero();
System.out.println("英雄hero1的名字:"+hero1.name+"\t"+"年龄:"+hero1.age);
System.out.println("英雄 hero2的名字:"+hero2.name+"\t"+"年龄:"+hero2.age);
}
}
2.3 this关键字
Java 提供了一个this关键字,this关键字总是指向调用该方法的对象。
2.3.1 方法中调用方法或成员变量
this 关键字最大的作用就是让类中的一个方法访问该类中的另一个方法或实例成员变量。
示例:
(1)创建Hero类,代码如下:
public class Hero{
//定义 jump()方法
public void jump(){
System.out.println("---英雄遇到了障碍需要跳过去---");
}
// 定义 run()方法
public void run(){
System.out.println("---执行run()方法英雄正在奔跑---");
Hero hero=new Hero(); //创建Hero对象
System.out.println("her 对象已经被创建内存地址为: "+hero.hashCode()+",它将实行 jump方法");
hero.jump(); //调用run()方法
}
}
(2)创建TestHero类,在该类的main()方法中创建Hero对象,并调用该对象的run()方法,代码如下:
public class TestHero{
public static void main(String[] args){
Hero hero = new Hero(); // 创建 Hero对象
System.out.printIn("hero对象已经被创建内存地址为:"+hero.hashCode()+",它将实行run()方法");
hero.run(); // 调用 run() 方法
}
}
Java允许对象的一个成员直接调用另一个成员,可以省略this前缀代码如下:
public void rud() {
//其他代码省略
jump();
注意:略this 前缀只是一种假象,虽然程序员省略了调用jumpO方法之前的this,但实际此this依然存在。
2.4 隐藏和封装
2.4.1 封装的概念:封装是面向对象的三大特性之一,它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法实现对内部信息的操作和访问。
封装是面向对象编程语言对客观世界的模拟,客观世界中的属性均被隐藏在对象内部,外界无法直接操作和修改。
① 对一个类或对象实现良好的封装,可以实现以下目的:
(1)隐藏类的实现细节。
(2)让使用者只能通过事先预定的方法访问数据,从而可以在该方法中加入控制逻辑,限制对属性的不合理访问。
(3)可进行数据检查,从而有利于保证对象信息的完整性。
(4)便于修改,提高代码的可维护性。
②实现良好的封装,需要从以下两个方面考虑:
(1)隐藏对象的属性和实现细节,不允许外部直接访问。
(2)暴露出方法,让方法控制对这些属性进行安全的访问和操作。因此,封装实际上有两个方面的含义:隐藏该隐藏的,暴露该暴露的。这两个方面都需要通过使用Java提供的访问控制符来实现。
2.4.2 使用访问控制符
private只是Java访问修饰控制符的一种,除private外,Java还提供了default、protected和public。Java的访问控制级别从小到大,如图下图所示。
访问控制级别表
表图如下:
2.5 static 关键字
Java类的运行包括类加载和实例化两个阶段,当一个类被加载至JVM中,静态成员会被初始化,被static修饰的成员即为静态成员,静态成员包括静态代码块、静态属性和静态方法。静态成员不属于某个对象,仅属于静态成员所在的类。