黑马程序员技术交流社区
标题:
关于static方法和非static方法
[打印本页]
作者:
李鑫
时间:
2012-6-3 22:52
标题:
关于static方法和非static方法
是否可以从一个static方法内部发出对非static方法的调用?与创建对象有无关系?请举例说明一下哈
作者:
何拴绪
时间:
2012-6-3 23:03
在静态方法里只能直接调用同类中其它的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。代码:
class Chinese
{
static String country="中国";
String name;
int age;
Static void method()
{
System.out.println("啊!,亲爱的" + country);
//类中的成员方法也可以直接访问静态成员变量
}
}
class TestChinese
{
public Static void main(String [] args)
{
System.out.println("Chinese country is " + Chinese.method());
//直接使用了"类名.成员方法"的格式
Chinese ch1 = new Chinese();
System.out.println("Chines country is " + ch1.method());
//使用了"对象名.成员方法"的格式
}
}
复制代码
作者:
朝哥
时间:
2012-6-3 23:08
不行,lz记住一点,静态的成员好比先到教室的同学,而非静态的成员好比后到教室的同学。
你想啊,先到的同学能跟后到的同学打招呼吗?当然不能。除非见鬼了。
后到的同学可以跟先到的同学打招呼,这是必须滴。
与创建对象无关系。
class Person
{
public static void run()
{
eat();
}
public void eat()
{
System.out.println("haha");
}
}
class cs
{
public static void main(String[] args)
{
new Person().run();
}
}
上面代码会报错:
---------- javac ----------
错误: 无法从静态上下文中引用非静态 方法 eat()
不管你new不new对象,只要一调用run(),就会报错。
当然,你也只要通过new对象才能测试你的问题。
作者:
胡团乐
时间:
2012-6-3 23:08
从概念上来说貌似不能吧 静态类是类一加载的时候就存在的,而这时候对象或者需要用对象调用的方法还没加载;
代码示例:
public class Test {
public static void main(String[] args) {
}
public static void show() {
show2(); //这儿编译器会报错
new Test().show2(); //这儿因为new了对象然后调用 没错
}
public void show2() {
}
}
作者:
程有愿
时间:
2012-7-2 21:44
其实这个很好理解的static修饰的方法用类名直接就可以调用,也就是说不需要建立对象就可以调用,如果你在此static方法类建立了非static方法,而非静态方法必须实例化才可调用的,这样的话,这个static方法就不能被类所调用,这就与static能被类调用违背,所以不能在里面建立非静态方法,另外,在static方法中只能调用静态成员变量,理由和上面一样...
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2