在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
C#和Java对static关键字的理解有很大分歧,主要就是在内部类上。此外,由于Java没有类似委托这种数据结构,内部类还要担当封装方法和响应事件这样的重要责任。 public class Circle { private static int radius; public static class Center{ // 静态内部类也可声明静态成员 private static Center defaultCenter; static { defaultCenter = new Center(10, 10); // 访问外部类的私有成员 System.out.println(radius); } public int x, y; public Center(int x, int y){ this.x = x; this.y = y; } } } public class Main{ public static void main(String[] args){ // 静态内部类可以不依赖外部来实例的存在而存在 Circle.Center center = new Circle.Center(15, 20); } } 习惯C#的同学只怕又会觉得纳闷,明明这个内部类都static了,为啥还有构造方法?! public class Circle { private int radius; public class Center{ // 普通内部类也可声明静态成员 //private static Center defaultCenter; // 但是可以含有静态常量 private static final int FINAL_STATIC = 10; public int x, y; private int radius; public Center(int x, int y){ this.x = x; this.y = y; radius = 3; // 访问内部类的成员 this.radius = 3; // this指向内部类 Circle.this.radius = 3; // Circle.this指向外部类 } } } public class Main{ public static void main(String[] args){ // 普通内部类必须依赖外部类的实例 //Circle.Center center = new Circle.Center(15, 20); // 必须先创建外部类的实例 Circle circle = new Circle(); Circle.Center center = circle.new Center(15, 20); } } 看到创建内部类实例的那行代码,是否觉得很别扭? interface Center{} public class Circle { public Center getCenter(final int pointX, final int pointY){ return new Center(){ public int x, y; { x = pointX; y = pointY; } }; } } public class Main{ public static void main(String[] args){ Circle circle = new Circle(); Center center = circle.getCenter(10, 15); } } 匿名类不能声明构造方法,所以只能用初始化块的方式对成员初始化。 private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { //... } }; 匿名类用于封装方法 Thread thread = new Thread(new Runnable() { @Override public void run() { //... } }); thread.start(); 注:实际使用时,只需要直接重写Thread的run方法,这么写其实是绕了弯路。 mButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view){ //... } } 缺省为静态的内部接口
|
请发表评论