static关键字修饰函数
本帖最后由 shirui8653719 于 2013-08-18 15:58:35 编辑
为什么在一个类内,函数前还要加上static关键字,如果不加的话就会报错,如下代码就是没有在test函数前加上static关键字,所以第7行会报错,为什么一定要加上static关键字。
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
String s = "AA";
char[] chs = {'A','A'};
test(s, chs);
System.out.println(s);
System.out.println(chs);
}
public void test(String str, char[] chs){
str = "BC";
chs[0] = 'S';
chs = str.toCharArray();
}
}
------解决方案--------------------main是静态方法
静态方法中不能调用类的非静态方法和属性
因为静态方法是类方法,没有this,所以我们找不到调用该方法的对象实例,怎么能调用它的方法和属性?
------解决方案--------------------static方法是属于类的方法,非static的方法是属于对象的方法,也就是说,static方法可以不需要创建对象,而直接通过类名去调用;而非static的方法必须要创建对象,然后由某一个具体的对象去调用。
那么,main方法是static的,所以运行main方法不需要创建这个类的对象,而你要在main里面调用test,调用test就必须创建对象,让对象去调用,这不矛盾了吗?
要再深入的理解这个问题,你还需要想清楚为什么会有static方法和非static方法两种。
------解决方案--------------------static 就是静态的意思,没有对象存在也可使用,不加static修饰的话,就是只能对象存在才能用。
static 方法在本类使用直接就是在main方法中写方法名就行,再其他类中使用就是类名.方法名。
楼主你的可以这样改:
Test t = new Test();
t.test(s,chs);
这样就没错了
------解决方案--------------------static是“静态”的意思,静态与非静态的区别:
Class人类,鼻子数量=2、眼睛数量=2是静态变量,名字、性别是非静态变量
那么,当它没有实例化的时候,Class人类有名字么?有性别么?没有!
现在我们创建两个实例,“小明”“小红”。
于是这两个实例就拥有了名字属性和性别属性:“姓名:小明,性别:男”“姓名:小红,性别:女”
而且非静态属性是每个实例一份的,比如“小明”改名字叫“郭敬明”与小红有半毛钱关系没有?
但是静态属性就不行了,比如把Class人类的“眼睛数量=3”,那么无论小明还是小红都长出三只眼了。