分类：电脑/网络-程序设计-JAVA相关
问题：java怎么理解“静态方法中不允许使用非静态方法”java书上说 
书上说“静态方法中不允许使用非静态方法”. 可是书上很多静态方法main()中都含有许多非静态方法啊。拿以下代码为例，main()里有methodDemo.scopeDemo()；methodDemo.setData(20)；该怎么解释这个定律？class MethodDemo{   private int data=10;      public void scopeDemo(){     int data=100;   }      public int getData(){     retu书上说“静态方法中不允许使用非静态方法”. 可是书上很多静态方法main()中都含有许多非静态方法啊。拿以下代码为例，main()里有methodDemo.scopeDemo()；methodDemo.setData(20)；该怎么解释这个定律？class MethodDemo{   private int data=10;      public void scopeDemo(){     int data=100;   }      public int getData(){     return data;   }      public void setData(int data){     this.data=data;   }}public class MethodMember{  public static void main(String[] args){     MethodDemo methodDemo=new MethodDemo();     methodDemo.scopeDemo();     System.out.println(methodDemo.getData());     methodDemo.setData(20);     System.out.println(methodDemo.getData());  }}
回答：你的中静态方法main没有调用任何非静态方法，methodDemo.scopeDemo();你说的这个方法调用是MethodDemo类的成员方法而已，因为该类对象已经被创建，所以对象方法可以被合法调用public class MethodMember{ public int getData(){ return 1; }public static void main(String[] args){ System.out.println(getData()); } }如果代码改成这样，那就出错了，因为在static主函数中，直接调用了非静态方法，因为MethodMember类根本没有没创建，对上述进行修改，就可得以下两种合法的方法调用public class MethodMember{ public static int getData(){ return 1; }public static void main(String[] args){ System.out.println(getData()); } }静态化getData()方法public class MethodMember{ public int getData(){ return 1; }public static void main(String[] args){ System.out.println(new MethodMember().getData()); } }生成MethodMember对象，调用其成员方法