黑马程序员——Java基础---static关键字

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


一.static的引入

Static表示“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块.被static修饰的成员变量和成员方法独立于该类的 任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法 区内 定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。对于一些已经有固定值的变量,每次实例化对 象都会产生空间,其值基本是固定了,为了防止过多的存储此变量造成空间浪费,我们可以将此变量声明为static(静态)。

二.static标记后注意事项
1.static应用范围:可用于内部类、方法和变量.
2.标记一个方法为static,意味着这个方法,被所在类的所有实例公用,在类装载时被首先执行,执行一次即被所有该类的实例共享,同时意味着:
1)static方法内部不能引用非static变量.
2)static方法不能被子类重写为非static方法.
3)父类的非static方法不能被子类重写为static方法.
4)static代码块可以用static {}来完成,在类被第一次装载时执行初始化,先于静态方法和其他方法的执行.
5)static方法区内不能定义this和super关键字.
6)静态方法只能访问静态成员,非静态方法,可以访问静态和非静态成员;
3、标记一个变量为static,则该变量在内存中有不变的位置,所有类的实例都访问同一个存储变量区域。对其修改对于所有类的实例来说都是可见和一致的。
举例:


<span style="white-space:pre">	</span>class Student
<span style="white-space:pre">	</span>{
	static String Name1 = "Welcome";
	static int a=1;
	static void show(){
		//静态的方法无法访问非静态的成员
	//	System.out.println( stuName );
		System.out.println(Name1);
	}
	static void show1(){
	int a=2;
	System.out.println(a);
	//System.out.println(this.a);//静态方法里不能定义this
	}

<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>class Test1 
<span style="white-space:pre">	</span>{
	public static void main(String[] args) 
	{
		Student.show();//静态方法可以通过类名直接调用		
	<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>}
三.应用

1.静态的成员属性的应用

如果某些变量有固定的值,而且需要被整个工程共享,这时可以将这些变量定义在某个类中,并全部声明为static的,以方便被所有项目组使用;
例如PI值,我们在计算圆面积时,因为需要一个精度标准,整个项目都定义PI=3.14159,这时我们把PI定义为静态就可以了.

<span style="white-space:pre">	</span>class PiNum
<span style="white-space:pre">	</span>{
	static double PI = 3.14159;
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>class Test1 
<span style="white-space:pre">	</span>{
	public static void main(String[] args) 
	{
		
		System.out.println(PiNum.PI);
	<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>}

因为PI已经被静态了,所以在整个项目中需要用的时候就直接用类名访问就可以了,非常的方便.

2.静态方法的应用

在整个项目中,会有一些方法,被全局使用;它们经常是一些"功能性的方法"。例如:加、减、乘、除、求数组的最大值,最小值;都会将这些功能封装成一个方 法,供整个程序使用;此时,可以将这些功能性的方法,放到一个类中,并且声明为static,可以直接通过类名就可以调用了,使用很方便;
举例:

class MyMath
{
	static int add(int a ,int b){
		return a + b;
	}
static int sub(int a ,int b){
		return a - b;
	}
	static int mul(int a ,int b){
		return a * b;
	}
	static int div(int a ,int b){
		return a/b;
	}
}
class Test1 
{
	public static void main(String[] args) 
	{
		System.out.println("a + b="+new MyMath().add(5,2));//之前的普通方法,必须要先实例化此类对象才可以调用;

		System.out.println("a + b="+MyMath.add(5,2));//通过类名就可以调用静态方法;
		System.out.println("a + b="+MyMath.sub(5,2));
		System.out.println("a + b="+MyMath.mul(5,2));
		System.out.println("a + b="+MyMath.div(5,2));

	}
}

如果这些方法没有使用静态方法,那么在调用的时候就必须得实例化对象才能调用,而静态后直接用类名访问就行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值