interface Computable
{
     void add(int x,int y);
}
public class A2
{
   void f(Computable c,int a,int b)
    {
       c.add(a,b);                    //c调用匿名类体中实现的接口方法(接口回调).
    } 
   void g()
   {  //在方法g中,调用方法f.
      f(new Computable()                       
                       {
                          public void add(int x,int y)    //匿名类实现接口方法
                          {
                            System.out.printf("\n%d与%d的和等于%d",x,y,x+y);
                          }
                       }
                      ,12,34);     //向方法传递实现了接口的匿名对象和两个int型数据.
   }
}
 class Example2
{
   public static void main(String args[])
   {
      A2 a=new A2();
      a.g();
   } 
}文件名是A2.java
编译成功,但是执行时,老是出现:
java.lang.NoSuchMethodError: main
Exception in thread "main" 

解决方案 »

  1.   

    把public static void main(String args[])
       {
          A2 a=new A2();
          a.g();
       } 
    放到A2类中
      

  2.   


    编译成功后,请运行:java Example2
    ps. 请尽量用IDE来写程序,善用生成的stub代码。你手写的这种程序,大家看了会晕过去的~
      

  3.   

    看来你没有明白运行时jre是如何找到程序入口的
    入口是main函数
    但是main函数不是随便放到什么地方都可以。
    既然是A2被声明做public class那么将A2中。如1楼所说。
    另一种,将public去掉或者移到Example的声明中;并且将文件名改成main函数所在的那个类。当然你的程序,编译不会有什么问题,但运行时候会找不到入口。
      

  4.   

    void g()
       {  //在方法g中,调用方法f.
          f(new Computable()                       
                           {
                              public void add(int x,int y)    //匿名类实现接口方法
                              {
                                System.out.printf("\n%d与%d的和等于%d",x,y,x+y);
                              }
                           }
                          ,12,34);     //向方法传递实现了接口的匿名对象和两个int型数据.
       }没明白new Computable(),interface能实例化吗????
      

  5.   


    可以Google “匿名类”~
      

  6.   

    public 类中没有main方法
      

  7.   

    interface Computable
    {
         void add(int x,int y);
    }
     class A2
    {
       void f(Computable c,int a,int b)
        {
           c.add(a,b);                    //c调用匿名类体中实现的接口方法(接口回调).
        } 
       void g()
       {  //在方法g中,调用方法f.
          f(new Computable()                       
                           {
                              public void add(int x,int y)    //匿名类实现接口方法
                              {
                                System.out.printf("\n%d与%d的和等于%d",x,y,x+y);
                              }
                           }
                          ,12,34);     //向方法传递实现了接口的匿名对象和两个int型数据.
       }
    }
    public class Example3
    {
       public static void main(String args[])
       {
          A2 a=new A2();
          a.g();
       } 
    }
    这样改了之后,文件名是Example3.java,运行还是那个结果啊!!
      

  8.   

    javac Example3.java
    java Example3
    编译器是没那么脆弱的
      

  9.   

    C:\Documents and Settings\Administrator>javac E:\Example3.javaC:\Documents and Settings\Administrator>java Example3
    Exception in thread "main" java.lang.NoClassDefFoundError: Example3
    Caused by: java.lang.ClassNotFoundException: Example3
            at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
            at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
    Could not find the main class: Example3.  Program will exit.
      

  10.   

    main方法在哪个类里,哪个类就是主类吧.......
      

  11.   

    main()方法放在public那个类里面