static关键字修饰函数 本帖最后由 shirui8653719 于 2013-08-18 15:58:35 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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);这样就没错了 静态方法只能调用静态的啊,你可以不加然后new出对象 用对象的引用.方法名也可以 加static的方法只要类被加载到虚拟机,就已经存在了;而没加static的方法,在实例化前是不存在的,它是每个实例一份的。那么,你想想,在你执行它的时候,虚拟机把类加载进来(这个时候显然是没有实例化的),然后寻找main函数,如果没有static关键字,它能找到main函数么?结果……虚拟机对你说:“I'm sorry,偶发现它木有main函数耶~” static是“静态”的意思,静态与非静态的区别:Class人类,鼻子数量=2、眼睛数量=2是静态变量,名字、性别是非静态变量那么,当它没有实例化的时候,Class人类有名字么?有性别么?没有!现在我们创建两个实例,“小明”“小红”。于是这两个实例就拥有了名字属性和性别属性:“姓名:小明,性别:男”“姓名:小红,性别:女”而且非静态属性是每个实例一份的,比如“小明”改名字叫“郭敬明”与小红有半毛钱关系没有?但是静态属性就不行了,比如把Class人类的“眼睛数量=3”,那么无论小明还是小红都长出三只眼了。 static 是静态的的意思 静态是类来调用。可以不要创建对象的! 非静态则要NEW 对象出来 静态方法只能直接调静态方法或new 对象 main()是静态方法,而test()是非静态方法静态方法不能调用非静态方法原因:非静态的方法,需要类实例化一个对象后,由对象来调用。静态方法可以不实例化对象就可以调用,也可以实例化一个对象后由对象掉用。静态方法调用非静态方法,这个时候不确定类有没有实例化对象,所以出错。反过来,非静态方法可以调用静态方法的。 main()是静态方法,而test()是非静态方法静态方法不能调用非静态方法。静态方法是在类加载的时候跟着初始化了,非静态方法需要实例化一个对象才能调用。所以在main方法内,想要直接调用本类中的方法,需要在方法前加static关键字。 谁知道竖着的布局管理器是哪个? 为什么我编译Java applet时总是出现如下内容呢? [闭月羞花猫]今天发现又有10分可用分了,散掉算了,希望大家支持我到5个裤衩啊。 请教java高手 一个小程序中的几个棘手的小问题 求解进程问题 为什么占这么大的内存? 如何在java中调用oralce的exp/imp命令备份恢复数据库 请问如何在Panel中设置局部颜色?? java与vrml 这个正则表达式有什么问题吗? 求助,在大规模语料中如何实现模糊搜索?
静态方法中不能调用类的非静态方法和属性
因为静态方法是类方法,没有this,所以我们找不到调用该方法的对象实例,怎么能调用它的方法和属性?
那么,main方法是static的,所以运行main方法不需要创建这个类的对象,而你要在main里面调用test,调用test就必须创建对象,让对象去调用,这不矛盾了吗?
要再深入的理解这个问题,你还需要想清楚为什么会有static方法和非static方法两种。
static 方法在本类使用直接就是在main方法中写方法名就行,再其他类中使用就是类名.方法名。
楼主你的可以这样改:
Test t = new Test();
t.test(s,chs);
这样就没错了
那么,你想想,在你执行它的时候,虚拟机把类加载进来(这个时候显然是没有实例化的),然后寻找main函数,如果没有static关键字,它能找到main函数么?结果……虚拟机对你说:“I'm sorry,偶发现它木有main函数耶~”
Class人类,鼻子数量=2、眼睛数量=2是静态变量,名字、性别是非静态变量
那么,当它没有实例化的时候,Class人类有名字么?有性别么?没有!
现在我们创建两个实例,“小明”“小红”。
于是这两个实例就拥有了名字属性和性别属性:“姓名:小明,性别:男”“姓名:小红,性别:女”
而且非静态属性是每个实例一份的,比如“小明”改名字叫“郭敬明”与小红有半毛钱关系没有?
但是静态属性就不行了,比如把Class人类的“眼睛数量=3”,那么无论小明还是小红都长出三只眼了。
静态是类来调用。可以不要创建对象的!
非静态则要NEW 对象出来
静态方法不能调用非静态方法
原因:
非静态的方法,需要类实例化一个对象后,由对象来调用。
静态方法可以不实例化对象就可以调用,也可以实例化一个对象后由对象掉用。
静态方法调用非静态方法,这个时候不确定类有没有实例化对象,所以出错。
反过来,非静态方法可以调用静态方法的。
静态方法不能调用非静态方法。
静态方法是在类加载的时候跟着初始化了,非静态方法需要实例化一个对象才能调用。
所以在main方法内,想要直接调用本类中的方法,需要在方法前加static关键字。