handler handler=new handler(){handlemessage(do smt)}
这种写法本身做了两件事,一是制造一个实例,还有一个就是定制handlmessage方法
不过,在制造实例的过程中,只有构造函数才会被调用,其他函数即使重写了,也不会被调用,如handlemessage本身其实是不会被调用的
比如
public class test {
static int flag=0;
a a=new a(){void b() {System.out.print("bbbbb");};};
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
test test=new test();
System.out.print(flag);
}
static class a{
public a() {
// TODO Auto-generated constructor stub
System.out.print("aaaaa");
flag=1;
}
void b(){
System.out.print("bbbbb");
}
}
}
这段的打印结果就是构造函数里面被打印出来了,bbbbb事实上不会被打印出来
,如此问题就来了,如果handlemessage不会被执行,那么android里面handlemessage是怎么有效的?
一想,应该是在构造函数里面调用了handlemessage
测试
public class test {
static int flag=0;
a a=new a(){void b() {System.out.print("bbbbb");};};
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
test test=new test();
System.out.print(flag);
}
static class a{
public a() {
// TODO Auto-generated constructor stub
System.out.print("aaaaa");
flag=1;
b();
}
void b(){
System.out.print("bbbbb");
}
}
}
我们在构造函数里面调用b(),这时候,b里面的代码的确被执行了