在一个静态方法中不能调用一个非静态方法。
改成下面的你,你对MulticastFrame已经创建了实例,当然可以啊。
你仔细看看书吧,think in java上说的很详细。
改成下面的你,你对MulticastFrame已经创建了实例,当然可以啊。
你仔细看看书吧,think in java上说的很详细。
解决方案 »
- 为什么不在一个方法里,就保存不了变量的值了呢?
- 有关输入流重定向的问题,在线等!!!
- 急求高手 指点ubuntu下的JDK安装及配置。。
- 如何得到刚插入那条记录的id?
- 帮忙看看解决这个问题 白送100分
- 请教
- 一个关于 String 累得很有意思的问题!
- c++ to java 的问题:一个int swap(int a,int b)方法,实现实参的交换,java方法没有传址的功能,怎么办?
- 比较好的 JAVA网站有哪些?请列举一下!
- jbuilder自带的是jdk1.3版。用1.4版覆盖原来的1.3有问题吗
- 有谁知道在哪里可以买到候杰的thinking in java 2e,比如网站,或是在深圳
- 关于字符串的问题
static:
类变量(对象共享)可以用类名,对象名点取,间接使用。
类方法 1)static方法中不能直接使用非静态成员, 因
为非静态成员与实例相关,通过对象点取间接使用
2)static方法中不能用this(与实例相关)
3)非static方法中可以使用static成员
static块:和数据成员时并列的位置,用于类初始化
类装入时执行一次(第一次创建对象,第一次使用
static成员,不同的静态块,按在类中的顺序执行)
注:只能修饰成员,不能修饰方法变量.
static方法覆盖时,没有起到覆盖的作用
main()方法是在任何对象被创建之前就会被java解释器调用。如果按照你上面的做法,这时还没有创建mainframe这个对象,所以会报错。
按你的说法报错应该是说mainframe没创建吧??
但错误是说non-static variable mainframe cannot be referenced from a static context mainframe.show();
好象也不是你说的那样。
mainframe这个实例在main方法内创建怎么就不会出错,而作为一个成员变量来创建就会出错了呢?
这个错误不是说show是静态方法。context是上下文,指mainframe.show()方法
所在的位置(main方法里),在这个静态方法main里不能引用非静态变量mainframe.mainframe这个实例作为一个成员变量来创建的话,在main里执行mainframe.show();的时候,Class C还没有实例,它的成员变量mainframe当然也不存在,所以错误。mainframe这个实例在main方法内创建的话,它是main方法内部的成员变量。
MulticastFrame mainframe=new MulticastFrame();
mainframe.show();
放到class C的构造方法中,然后再用到这个实例时,可以用this来引用。
class C
{
public static void main(String[] args)
{
mainframe.show();
}
public MulticastFrame mainframe=new MulticastFrame();
}这个类里面mainframe没有用static修饰,所以不是非静态成员变量,所以会出错再看这个
class C
{
public static void main(String[] args)
{
MulticastFrame mainframe=new MulticastFrame();
mainframe.show();
}
}mainframe是在方法里面声明的局部变量当然不存在什么静态非静态了啊,所以静态方法调用自己方法内部的变量是不会出问题的。静态非静态是对类的成员变量来说的,不适合局部变量的:)