人生天地之间,
若白驹之过隙,
忽然而已。
——庄周
前言
上周我们简单的学习了static关键字,这周我们在对static关键字进行深入学习,主要是静态变量和静态方法。Let's go!
静态变量
一、静态变量
类的成员变量可以分为以下两种:
1.1 静态变量
1.2 实例变量
1.3 静态变量在类中的作用
Public staticdouble PI=3.14159256;
下面实战来具体看一下如何访问静态变量。
静态方法
二、静态方法
与成员变量类似,成员方法也可以分为以下两种:
2.1 静态方法与实例方法的区别如下:
下面实战来具体看一下如何访问静态方法。
静态代码块
三、静态代码块
静态代码块指 Java 类中的static{ } 代码块,主要用于初始化类,为类的静态变量赋初始值,提升程序性能。
3.1 静态代码块的特点如下:
实战看看静态代码块与非静态代码块的区别。
实战
四、实战
下面就是将理论化为实践的神奇时刻~
4.1 访问静态变量
从运行结果可以看出,在类中定义静态的属性(成员变量),在 main() 方法中可以直接访问,也可以通过类名访问,还可以通过类的实例对象来访问。
package jinjie7;
public class StaticVar {
public static String str1 = "Hello!";
public static void main(String[] args) {
String str2 = " IT 进阶之旅";
// 直接访问str1
String accessVar1 = str1+str2;
System.out.println("第 1 次访问静态变量,结果为:"+accessVar1);
// 通过类名访问str1
String accessVar2 = StaticVar.str1+str2;
System.out.println("第 2 次访问静态变量,结果为:"+accessVar2);
// 通过对象svt1访问str1
StaticVar svt1 = new StaticVar();
svt1.str1 = svt1.str1+str2;
String accessVar3 = svt1.str1;
System.out.println("第 3 次访问静态变量,结果为:"+accessVar3);
// 通过对象svt2访问str1
StaticVar svt2 = new StaticVar();
String accessVar4 = svt2.str1+str2;
System.out.println("第 4 次访问静态变量,结果为:"+accessVar4);
}
}
4.2 访问静态方法
在访问非静态方法时,需要通过实例对象来访问,而在访问静态方法时,可以直接访问,也可以通过类名来访问,还可以通过实例化对象来访问。
package jinjie7;
public class StaticMethod {
public static int count = 1; // 定义静态变量count
public int method1() { // 实例方法method1
count++; // 访问静态变量count并赋值
System.out.println("在实例方法method1()中的count="+count); // 打印count
return count;
}
public static int method2() { // 静态方法method2
count += count; // 访问静态变量count并赋值
System.out.println("在静态方法method2()中的count="+count); // 打印count
return count;
}
public static void PrintCount() { // 静态方法PrintCount
count += 2;
System.out.println("在静态方法PrintCount()中的count="+count); // 打印count
}
public static void main(String[] args) {
StaticMethod sft = new StaticMethod(); // 通过实例对象调用实例方法
System.out.println("method1()方法返回值intro1="+sft.method1());// 通过类名调用静态方法,打印 count
System.out.println("method2()方法返回值intro1="+method2());// 直接调用静态方法
StaticMethod.PrintCount();
}
}
4.3 静态代码块
执行优先级高于非静态的初始化块,它会在类初始化的时候执行一次,执行完成便销毁,它仅能初始化类变量,即static修饰的数据成员。
package jinjie7;
public class StaticCode {
public static int count = 0;
{
count++;
System.out.println("非静态代码块 count=" + count);
}
static { //静态代码块
count++;
System.out.println("静态代码块1 count=" + count);
}
static { //静态代码块
count++;
System.out.println("静态代码块2 count=" + count);
}
public static void main(String[] args) {
System.out.println("*************** StaticCode1 执行 ***************");
StaticCode sct1 = new StaticCode();
System.out.println("*************** StaticCode2 执行 ***************");
StaticCode sct2 = new StaticCode();
}
}
结语 愿疫情早日过去,愿山河无恙,人间皆安!期待脱下口罩,重返校园的日子,相信就在不久之后我们会重新回归正轨!学习犹如逆水行舟,不进则退,在无尽的等待中我们唯一能做的就是不断提升自我,以期在未来搭上梦想之舟扬帆远航~
编辑:玥怡居士|审核:世外居士