static

1、Java中被static修饰的成员,称为静态成员或者类成员。它属于整个类所有,而不是某个对象所有。

系统在第一次使用该类时,就会为其分配内存空间,直到该类被卸载才进行资源回收。

2、静态成员的访问方式:可以使用类名直接访问;也可以使用对象名进行访问。

package com.imooc;

public class HelloWorld {
	static String hobby="imooc";
	public static void main(String[] args) {
		System.out.println("通过类名访问hobby:"+HelloWorld.hobby);
		HelloWorld hello=new HelloWorld();
		System.out.println("通过对象名访问hobby:"+hello.hobby);
		hello.hobby="爱慕课";
		System.out.println("通过类名访问hobby:"+HelloWorld.hobby);
	}	
}

运行结果:

通过类名访问hobby:imooc
通过对象名访问hobby:imooc
通过类名访问hobby:爱慕课

3、静态方法:用static修饰的方法,称为静态方法或类方法。

package com.imooc;

public class HelloWorld {
	//使用static关键字声明静态方法
	public static void print(){
		System.out.println("欢迎您:慕课网!");
	}	
	public static void main(String[] args) {
		//直接使用类名调用静态方法
		HelloWorld.print();
		//也可以通过对象名调用,更推荐使用类名调用。
		HelloWorld demo=new HelloWorld();
		demo.print();
	}
}

运行结果:

欢迎您:慕课网!
欢迎您:慕课网!

注意点:

(1)静态方法可以直接调用同类中的静态成员,但是不能直接调用非静态成员;

package com.imooc;

public class HelloWorld {
	static String hobby="imooc";
	String name="爱慕课";	
	public static void print(){
		System.out.println("爱好:"+hobby+"!");		
		//编译不通过,会在这行有红色叉号
		System.out.println("欢迎您:"+name+"!");	
	}		
}

(2)如果要在静态方法中调用非静态变量,可以通过创建类的对象,通过对象来访问非静态变量。

package com.imooc;

public class HelloWorld {
	static String hobby="imooc";
	String name="爱慕课";	
	public static void print(){
		HelloWorld hello=new HelloWorld();
		System.out.println("爱好:"+hobby+"!");		
		//通过对象实现,在静态方法中调用非静态变量。
		System.out.println("欢迎您:"+hello.name+"!");	
	}	
	public static void main(String[] args) {
		HelloWorld.print();
	}
}
(3)普通成员方法,可以直接访问同类中的静态和非静态变量。

static String hobby="imooc";
	String name="爱慕课";	
	public  void print(){		
		System.out.println("爱好:"+hobby+"!");		
		System.out.println("欢迎您:"+name+"!");	
}	
(4)静态方法中,不能直接调用非静态的方法,需要通过对象来访问非静态方法。

4、static之静态初始化块

在类的声明中,可以包含多个初始化块,当创建实例时,会依次执行这些代码块。如果使用static修饰,就称之为静态初始化块。

静态初始化块只能在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。

package com.imooc;

public class HelloWorld {
	int num1;
	int num2;
	static int num3;
	public HelloWorld(){
		num1=91;
		System.out.println("通过构造方法为变量num1赋值");
	}
	{
		num2=82;
		System.out.println("通过初始化块为变量num2赋值");
	}
	static{
		num3=73;
		System.out.println("通过静态初始化块为静态变量num3赋值");
	}
	public static void main(String[] args) {
		HelloWorld hello=new HelloWorld();
		System.out.println("num1:"+hello.num1);
		System.out.println("num2:"+hello.num2);
		System.out.println("num3:"+num3);
		HelloWorld hello2=new HelloWorld();
	}
}
执行结果:

通过静态初始化块为静态变量num3赋值
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值
num1:91
num2:82
num3:73
通过初始化块为变量num2赋值
通过构造方法为变量num1赋值

由结果可以得出以下结论:程序运行时静态初始化块最先被执行,然后执行普通的初始化块,最后执行构造方法。

由于静态初始化块只在类加载时执行一次,所以在创建对象hello2时,并未执行静态初始化块。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值