剖析static关键字的四种使用场景

static关键字主要有以下四种使用场景:

1、修饰成员变量和成员方法
2、静态代码块
3、修饰类(只能修饰内部类)
4、静态导包(用来导入类中的静态资源,1.5之后的新特性)


修饰成员变量和成员方法(最常用)

被static修饰的成员属于类,不属于单个这个类的某个对象,被类中所有对象共享,可以并且建议通过类名调用
调用格式:
类名.静态变量名
类名.静态方法名()

用public修饰的static成员变量和成员方法可以理解为全局变量和全局方法,当声明它为类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。
static变量前可以有private修饰,表示这个变量只能在本类中使用,但是不能在其他类中通过类名来直接引用

静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法,因为this和super是随着构造方法而出现,而静态优先于构造出现,所以静态只能访问静态,不能访问非静态,但是非静态可以访问静态。

一般在需要实现以下两个功能时推荐用static修饰:
1.表征类的属性或者被类中所有对象共享
2.方便资源调用

静态代码块:

1.静态代码块定义在类中方法外
2.静态代码块的格式是 
static {    
语句体;   
}
3.它优先于主方法执行、优先于构造代码块执行,当以任意形式第一次使用到该类时执行
4.该类不管创建多少对象,静态代码块只执行一次

一个类中的静态代码块可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果静态代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。





静态代码块对于定义在它之后的静态变量,可以赋值,但是不能访问

静态内部类:

普通类是不允许声明为静态的,只有内部类才可以被static修饰的内部类可以直接作为一个普通类来使用,而不需实例一个外部类

public class Outter {
	static class Inner {
		public void show() {
			System.out.println("这是一个静态内部类");
		}
	}

	public static void main(String[] args) {
		Inner i = new Inner();
		i.show();
		
		/**
		 * 如果是普通内部类,则创建对象的格式为:
		 * 外部类名.内部类名    对象名 = new 外部类名().new 内部类名();
		 */
	}

}



静态导包:

格式为:import static 
这两个关键字连用可以指定导入某个类中的指定静态资源,并且不需要使用类名调用类中静态成员,可以直接使用类中静态成员变量和成员方法

/**
 * Math.* --- 将Math中的所有静态资源导入,这时候可以直接使用里面的静态方法,而不用通过类名进行调用
 * 如果只想导入单一某个静态方法,只需要将*换成对应的方法名即可
 */
import static java.lang.Math.*;
/**
 * 换成import static java.lang.Math.max;具有一样的效果
 */
public class Demo {
	public static void main(String[] args) {

		int max = max(1,2);
		System.out.println(max);
	}
}

以上用法使用场景较少,平时开发过程中一般不用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值