2.1 成员变量
2.1.1 成员变量的使用
成员变量在使用之前,需要先进行声明,声明成员变量是在类的内部、方法的外部定义的 变量,成员变量分为实例变量和类变量。实例变量作用域是当前所属实例的范围,类的成员变量的作用域是整个类范围,成员变量的声明要给出变量名、变量类型以及其他特性。
语法:
[<修饰符>][static][final]<变量类型><变量类型>
2.2 this关键字
2.2.1 方法中调用方法或成员变量
this关键字最大的作用就是让类中的一个方法访问该类中的另一个方法或实例成员变量。
实例1.1 创建Hero类,代码如下:
public class hero {
String name;
int age;
char sex;
public void battle(){
System.out.println(name+"在肆无忌惮的战斗,他的年龄只有"+age+"可他的血量只剩%1了");
}
public void run(int speed) {
System.out.println(speed+"s/m的速度飞速狂奔");
}
}
创建Text1类,在该类的main方法中创建Hero对象,并调用该对象的run()方法,代码如下:
public class text1 {
public static void main(String[] args) {
hero hero1=new hero();
hero1.name="黑暗游侠";
hero1.age=20;
hero1.sex='女';
System.out.println("英雄的名字:"+hero1.name);
System.out.println("英雄的年龄:"+hero1.age);
System.out.println("英雄的性别:"+hero1.sex);
hero1.run(200);
hero1.battle();
}
}
运行结果:
2.2.2 解决实例变量与局部变量同名的问题
大多数情况下,在方法中访问类中的实例成员变量无需使用this前缀,如果方法中的一个局部变量和实例变量同名,但程序又需要在该方法中访问该类实例变量,则无需使用this前缀。
2.3 封装的概念
封装是面向对象的三大特点之一,它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类所提供的方法实现对内部信息的操作和访问。封装是面向对象编程语言对客观世界的模拟,客观世界中的属性均被隐藏在对象内部,外界无法直接操作和修改,如人的年龄属性只能随岁月的流逝而增加,通常不能随意修改人的年龄。
2.2.3 使用访问控制符
private 只是Java访问修饰符的一种,除private外,java还提供了default、protected和public。
2.4 static 关键字
2.4.1 静态成员变量
类的成员变量包含静态变量(也称为类变量 )和实例变量。静态成员变量是被static关键字修饰的成员变量,静态成员变量属于其所在类,被类中所有实例共享,静态成员变量可通过类直接访问,也可通过类的实例访问。
实例1.2:
public class Bank {
private static int count =50000;
public static void main(String[] args) {
for(int i=0;i<0;i++){
Bank bank=new Bank();
bank.count=bank.count-1000;
System.out.println("当前银行总钱数="+Bank.count);
}
}
}
2.4.2 静态方法
被static 修饰的方法称为静态方法。静态方法也可通过类名直接访问。在使用静态方式时需要注意,静态方法中不能访问非静态的成员,如实例属性、实例方法。静态方法通常作为工具方法,不会因为实例的不同而影响方法最终的执行效果。
实例1.3:
public class MathUtils {
public static double square(double num) {
return num*num;
}
public static void main(String[] args) {
double num=9.6;
double result =MathUtils.square(num);
System.out.println(num+"的平方="+result);
}
}
运行结果如下:
2.4.3 静态代码块
静态方法在类加载后,虽然在内存中已经分配了内存空间,但只有显示地调用静态方法时,该方法才会被执行。如果需要在类加载时执行某一操作,则可以使用静态代码块。静态代码不存在任何方法中,它在java虚拟机加载类时被执行。如果类中包含多个静态代码块,则java虚拟机将按照它们在类中出现的顺序依次执行,且每个静态代码块只会被执行一次。
实例1.4
public class StaticBlock {
static {
System.out.println("---第一个静态代码块---");
}
static {
System.out.println("---第二个静态代码块---");
}
static {
System.out.println("---第三个静态代码块---");
}
public static void main(String[] args) {
System.out.println("---main()方法被执行了---");
}
}
运行结果如下: