java编程问题

代码如下:
Import ...(omitted);

public class test{
public static void main(String[] args){
JFrame abcd=new extendJFrame();
abcd.setTitle("test");
abcd.setSize(100,100);
abcd.setVisible(true);
}
Public class extendJFrame extends JFrame(){
.......
}
}
报错:no enclosing instance of type test is accessible.
eclispe提示错误在 JFrame abcd=new extendJFrame(); 这一行,而且将 extendJFrame类定义为静态类就可以编译,不知道为什么,请大神指点。
另外,这样写也是可以编译的:
Import ...(omitted);

Public class extendJFrame extends JFrame(){
public static void main(String[] args){
JFrame abcd=new extendJFrame();
abcd.setTitle("test");
abcd.setSize(100,100);
abcd.setVisible(true);
}
//定义拓展类
....... (omitted)
}

如果说静态方法不能调用实例变量的话,那为什么这样可以编译呢?
本人菜鸟,求高手指教。

在Java中,类中的静态方法不能直接调用动态方法。只有将某个内部类修饰为静态类,然后才能够在静态类中调用该类的成员变量与成员方法。所以在不做其他变动的情况下,最简单的解决办法是将public class改为public static class.

不知道你有没有用过cmd运行java程序,如果你用过,你应该知道java程序是先有编译和运行两个过程,有时候编译没有错但是运行时出错,这是因为你的程序语法并没有错,而逻辑却有错误。

最大区别就是语法错误通不过编译器的编译,逻辑错误则能通过。
具体的说就是语法错误的意思是该错误违背了此种语言的基本规则,比如必须以分号结束语句的语言用点来结束。
逻辑错误是指算法上的错误。比如循环语句的结束条件没有写,语句能通过编译,但运行后会发生死循环无法跳出的现象。

因为你编译的时候还没有执行调用的过程,编译只是检查你的语法是否有错,而调用这一举动是在运行的时候执行,所以如果你语法没有错,而逻辑有错的就会出现你所描述的情况

你补充的代码,调用的已经不是内部类了,所以不予以讨论

如需要,可留qq加你这题,ps:”静态方法不能调用实例变量的话“,我没有说过这句话,你知道你从何理解,我只说过“类中的静态方法不能直接调用动态方法”,可能说得比较简短,意思在我的下一句 “ 只有将某个内部类修饰为静态类,然后才能够在静态类中调用该类的成员变量与成员方法。”,造成你的误解很抱歉追问

先膜拜一个!但是我还是不明白为什么第二个没有静态修饰,但仍然可以运行,两个究竟差在哪里,能否费力帮小弟点拨一下,谢谢。

追答

不知道你疑问的地方是不是 " //定义的拓展类 "
,如果不是,
Import ...(omitted);

Public class extendJFrame extends JFrame(){
public static void main(String[] args){
JFrame abcd=new extendJFrame();
abcd.setTitle("test");
abcd.setSize(100,100);
abcd.setVisible(true);
}
}
这个我觉得没什么好说的,书上网上例子一大堆。 JFrame是你引进来的类,与你所描述的条件不一样。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-06-24
public class Account{
private String accountName; //帐户名
private double amount;//存款余额
//set get 方法省略
//存款方法
//synchronized 同步关键词 防止并发调用此方法
public static synchronized int deposit(Account account,double money)
{
if(account==null)return 0;
try{
double balance=account.getAmount()+money;
account.setAmount(balance);
}catch(Exception e)
{
System.out.println("出错信息:“+e.getMessage());
return 0;
}
return 1;
}

//取款方法
//synchronized 同步关键词 防止并发调用此方法
public static synchronized int withdraw(Account account,double money)
{
if(account==null)return 0;
try{
if(account.getAmount()>=money)
account.setAmount(account.getAmount()-money);
return 1;
}catch(Exception e)
{
System.out.println("出错信息:“+e.getMessage());
return 0;
}
}
}

//此类考虑了同步问题,但我觉得应该把存款,取款另起一个类实现:帐户管理类,此类管理所有的存,取款交易。追问

能不能正经点

相似回答