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"
{
A2 a=new A2();
a.g();
}
放到A2类中
编译成功后,请运行:java Example2
ps. 请尽量用IDE来写程序,善用生成的stub代码。你手写的这种程序,大家看了会晕过去的~
入口是main函数
但是main函数不是随便放到什么地方都可以。
既然是A2被声明做public class那么将A2中。如1楼所说。
另一种,将public去掉或者移到Example的声明中;并且将文件名改成main函数所在的那个类。当然你的程序,编译不会有什么问题,但运行时候会找不到入口。
{ //在方法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能实例化吗????
可以Google “匿名类”~
{
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,运行还是那个结果啊!!
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.