含义
static表示静态的。 从理解的角度看: 共享的。
静态的成份不属于某个对象,而属于类。但它可以被所有对象共享使用。
方法
1) 概念: 由 static 关键字修饰的方法称之为静态的方法。
2) 性质: 静态的方法属于类。因此,只要类存在,则静态方法就存在。
何时写? 1) 当类中的方法只处理静态变量时,则该方法必须编写为静态的。
3) 当类中的方法只用来完成一个特定的任务,且完成任务所需要的数据均来自外部(通过形式参数来接收);
另外,这个方法不针对非静态的实例变量操作。此时,这个方法可以编写为静态的。
怎么用?
静态方法的调用,往往通过类名直接调用。如: Math.random();
变量
基础
什么是?
在一个类的类体中,用 static 修饰的实例变量就称之为静态变量,也称之为类变量。
何时用?
当一个类中,需要管理共享资源时, 则需要静态变量(类变量)
特性
1) 它属于类;
2) 它被所有对象共享;
3) 它的访问往往可以通过类名实现。即: 类名.静态变量
4) 当它的前面有 private 关键字修饰时,则必须为其编写静态的访问器。之后,通过该访问器来访问。
5) 它通常用来管理共享资源。
但时,当静态变量由 private 修饰时,则必须为该静态变量编写静态的访问器。
demo
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">public classStaticTest {
public static void main(String[] args) {
int a = (int)( 999 * Math.random());
int b = (int)( 999 * Math.random());
int re = MyMath.add(a, b); //通过类名直接调用其中的静态方法。
System.out.println( re );
re = MyMath.sub( a, b );
System.out.println( re );
}
}
class MyMath {
public static int add( int x, int y ){
System.out.print(x + " + "+ y + " = ");
return x + y;
}
public static int sub( int x, int y ){
System.out.print( x + " - "+ y + " = ");
return x - y;
}
}</span></span></span>
初始化块
基础
1) 什么是?
在类的类体中,用 static 修饰的语句块。
2)干什么用?
它通常用来实现 静态变量的初始化。
3)什么时候执行?
它在第一次加载类时被执行且只执行一次。
注意: 第一次加载类是指 当应用中该类的类名第一次出现时,则需要加载它(将它的字节码文件内容读取内存中称之为第一次加载)。
demo
<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">importcom.hqg.oop.d32.Person;
import staticjava.lang.Math.PI;
public classStaticBlockTest {
public static void main(String[] args) {
System.out.println("Java的数学类Math中的圆周率,其值是: " + Math.PI);
System.out.println("Java的数学类Math中的圆周率,其值是: " + PI);
static {
System.out.println("我这儿是静态初始化块。"); //(1)处:无论静态初始化块是放在此处,还是放在(2)处,程序运行时都是先执行静态初始化块。
a += 100;
}
new StaticBlock();
new StaticBlock();
new StaticBlock();
new StaticBlock();
Person p1 = new Person();
int re = p1.add(10, 9);
System.out.println( re );
}
}
class StaticBlock{
public static void add( int x, int y ){
System.out.println( x + " +" + y + " = " + (x + y));
}
//静态变量(类变量)
public static int a;
//静态的语句块
static {
System.out.println("我这儿是静态初始化块。"); //(2)处:无论静态初始化块是放在此处,还是放在(1)处,程序运行时都是先执行静态初始化块。
a += 100;
}
}</span></span></span>
业务思想
对于static关键字,相信大家都不陌生,对于提到的静态方法、变量,在日常的项目中肯定也是经常的用到,而相对于静态初始化块的相关介绍,也相信大家有了一定的了解,不常用,但却在一些特定的项目中首次加载类时,可能有特殊的作用,算是多做一些了解。
下面是在CSDN的论坛上发现某位博主发布的静态初始化块的一个小demo,点击链接 去试试吧!