在很多时候,我们需要在类的内部初始化一个静态的Map或者List,然后保存一下常量值提供给类内部方法使用。
我们通常的做法是:
首先初始化一个Map的静态变量。
- private final static Map<String, String> CONSTANT =
- new HashMap<String, String>();
- static {
- CONSTANT.put("1", "one");
- CONSTANT.put("2", "two");
- }
- new Thread() {
- public void run() {
- System.out.println("Thread running!");
- };
- }.start();
实际上上面这段代码的意思就是,声明一个Thread的子类并重写Thread的run()方法,然后创建一个该子类的实例然后调用其start()方法。由于声明的该Thread的子类没有名字,所以叫匿名类。又由于没有名字的类只能存在于一个类或者一个方法内部,所以又称为匿名内部类。
package com.test5;
/*** @描述 :
* @创建者 : guoxiaopeng
* @创建时间 : 2017-8-4 上午9:18:31
*/
public class Cpu implements PCI{
@Override
public void start() {
System.out.println("Cpu start");
}
@Override
public void stop() {
System.out.println("Cpu stop");
}
}
package com.test5;
/**
* @描述 :
* @创建者 : guoxiaopeng
* @创建时间 : 2017-8-3 下午5:14:12
*/
public interface PCI {
void start();
void stop();
}
package com.test5;
/**
* @描述 :
* @创建者 : guoxiaopeng
* @创建时间 : 2017-8-3 下午5:20:40
*/
public class Test {
public static void main(String[] args) {
Cpu c=new Cpu();
Yinpan yp=new Yinpan();
Zhuban zb=new Zhuban();
zb.UsePCIcard(c);
zb.UsePCIcard(yp);
zb.UsePCIcard(new PCI() {//相当于一个匿名内部类,这里直接实例化一个接口,其实接口是不能实例化的,实际作用是充当了一个匿名的接口实现类
@Override
public void stop() {
System.out.println("stop");
}
@Override
public void start() {
System.out.println("start");
}
});
}
}
再来一个例子:
package com;
/**
* @描述 :
* @创建者 : guoxiaopeng
* @创建时间 : 2017-8-3 下午6:39:12
*/
public interface Wife {
public String getWifeName();
public String getWifeAddress();
}
package com;
/**
* @描述 :
* @创建者 : guoxiaopeng
* @创建时间 : 2017-8-3 下午6:34:49
*/
public class User {
private int age=18;
protected Object[] elementData;
protected String name;
protected String wifeName;
protected String wifeAddress;
public User(){}
public User(String wifeName,String wifeAddress){
this.name="zhangsan";
this.age=20;
this.wifeName="小李";
this.wifeAddress="上海";
this.elementData = new Object[10];
elementData[0]=wifeName;
}
public Wife getWife(){
return new Wife() {
@Override
public String getWifeName() {
return (String) elementData[0];
}
@Override
public String getWifeAddress() {
return wifeAddress;
}
};
}
}
package com;
/**
* @描述 :
* @创建者 : guoxiaopeng
* @创建时间 : 2017-8-3 下午6:48:52
*/
public class Test {
public static void main(String[] args) {
User user=new User("小李", "上海");
Wife wife = user.getWife();
System.out.println(wife.getWifeAddress());
System.out.println(wife.getWifeName());
}
}