简明现代魔法 -> Java编程语言 -> 关于 Static 关键字

关于 Static 关键字

2009-09-13

有一个类class,它有一个方法method,我想使用这个class的方法处理一些事情。一般来说,我需要创建一个该类的对象,就是说,在heap里创建了数据存储空间,然后通过该对象才能使用该类的方法。但是,有没有办法,不创建对象也能够使用该类的方法呢?

答案是,有的。只要在该方法前面加上关键字static就可以实现这个要求。

一个简单的例子:比较两个数的大小

public class TestMax {
	
	public static void main(String[] args){
		int i = 5;
		int j = 5;
		int k = max(i, j);
		System.out.print("数" + i + "和数" + j + "比较, " + 
				"数" + k + "比较大");
		
	}
	
	static int max(int num_1, int num_2){
		int result;
		if (num_1 > num_2){
			result = num_1;
		}
		else result = num_2;
		return result;
	}
}

如果不将max()函数声明为static,那么在使用int k = max(i, j);调用该函数的时候,会报错:Cannot make a static reference to the non-static method max(int, int) from the type TestMax,由于 TestMax 这个类的对象并没有创建,在heap里并没有存储数据,所以调用函数不成功。但是如果将方法max()声明为static,那么改方法会在heap里分配存储空间,从而可以使用该方法。

同样的,也可以将类的字段也定义成static,那么就可以不创建对象的情况下使用该字段。

Static方法的一个重要用法就是,可以在不创建任何对象的前提下调用它。这一点对于定义main()方法很重要,这个方法是运行一个应用时的入口点。

static的内存区域只有一份存储空间

一个static字段对于每个类来说,只有一份存储空间。而非static字段则是对每个对象有一份存储空间。

public class StaticTest {
	
	static int i = 47;
	
	public static void main(String[] args){
		StaticTest st1 = new StaticTest();
		StaticTest st2 = new StaticTest();
		
		System.out.println(st1.equals(st2));
		System.out.println(st1.i == st2.i);
		System.out.println("" + st1);
		System.out.println(StaticTest.i);
	}
}

程序输出如下:

false
true
Phase2.StaticTest@182f0db
47

就是说,st1和st2不是同一个对象(当然)。

st1和st2的值相等。

st1以字符串输出为:包名+类名+@182f0db

使用类名.字段名来使用该static字段。

随机文章推荐
网站分类


注:如需转载本文,请注明出处(原文链接),谢谢。更多精彩内容,请进入简明现代魔法首页。

进入新博客
喜欢本文,就分享它吧
给我留言
您的名字:
您的邮件:
您的网站:


 

copyright © 2009 简明现代魔法    学习、分享、进步

power by Gonn 感谢所有关心和支持本站的朋友们