java中static的使用

我们可以基于一个类创建多个该类的对象,每个对象都拥有自己的成员,有时候,我们希望该类的所有成员共享一个成员。这时可以用static来修饰。

Java中static作为修饰符,可以用来修饰变量、方法、代码块。

1、静态方法

被static修饰的变量成为静态变量,又可以成为静态成员或类成员。它属于整个类所有,而不是某个对象所有,被类的所有对象共享。类变量在类加载的时候初始化分配空间,而且只被初始化一次,直到该类被卸载时才将资源回收。

静态成员可以使用类名直接访问,也可以使用对象进行访问。在程序中任何对象对静态变量做修改,其它对象看到的是修改后的值。

public class Test {
	static String play="football";
	public static void main(String[] args) {

		System.out.println("通过类访问静态变量,"+play);
		
		Test test=new Test();
		
		System.out.println("通过对象访问静态变量,"+test.play);
		
		test.play="basketball";
		
		System.out.println("通过对象访问静态变量,"+test.play);
		
	}
}


2、静态方法

用static修饰的方法,称为静态方法或类方法,经常用到的main方法就是静态方法。

静态方法中可以直接调用同类中的静态变量,但不能直接调用非静态变量,可以通过创建对象后访问非静态变量;静态方法中不能直接调用非静态方法,可以通过对象来访问非静态方法。

public class Test {
	String game="DOTA";
	static String play="football";
	public static void main(String[] args) {
		print();
	}
	public static void print(){
		System.out.println("访问静态变量,"+play);
//		System.out.println("访问非静态变量,"+game);   //静态方法不能直接访问非静态变量
		Test test=new Test();
		System.out.println("访问非静态变量,"+test.game);
//		show();//静态方法不能直接调用非静态方法
		test.show();
	}
	//普通方法中,可以直接访问同类的非静态变量和静态变量
	public void show(){
		System.out.println("访问静态变量,"+play);
		System.out.println("访问非静态变量,"+game);
		print();//普通方法可以直接调用静态方法
	}
}

 

3、代码块

用static去修饰类里面的一个独立的代码块,称为静态代码块。

静态初始化块只在类加载时执行,且只会执行一次,静态代码块没有名字,不能显示调用,只能在类加载的时候调用。

静态初始化块只能给静态变量赋值,不能初始化普通成员变量。

public class Test{
	String film;
	String game;
	static String play;
	public static void main(String[] args) {
		Test test=new Test();
		System.out.println("film="+test.film);
		System.out.println("game="+test.game);
		System.out.println("play="+play);
		Test test2=new Test();
		
	}
	public Test(){
		film="爱奇艺";
		System.out.println("通过构造方法赋值 film");
	}
	{
		game="DOTA";
		System.out.println("通过初始化块赋值 game");
	}
	static {
		play="football";
//		game="DOTA";//不能赋值
		System.out.println("通过静态初始化块赋值 play");
	}
	
}


输出结果:

           通过静态初始化块赋值 play
           通过初始化块赋值 game
           通过构造方法赋值 film
           film=爱奇艺
           game=DOTA
           play=football
           通过初始化块赋值 game
           通过构造方法赋值 film

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值