例如,创建一个Product 类:
package com.thb;
public class Product {
private String name;
public static void sayHello() {
System.out.println("Nice to meet you.");
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
创建一个主类,进行调用:
package com.thb;
public class Demo6 {
public static void main(String[] args) {
String str = new Product() {{
// 调用Product的非静态方法,就是在匿名类的实例上调用方法
setName("good");
// 调用静态方法,就是在Product类上调用方法
Product.sayHello();
}}.getName();
System.out.println(str);
}
}
运行输出:
解释:主要是这个语句块,使用了两对大括号:
new Product() {{
// 调用Product的非静态方法,就是在匿名类的实例上调用方法
setName("good");
// 调用静态方法,就是在Product类上调用方法
Product.sayHello();
}}
外层的一对大括号是创建一个匿名类,内层的一对大括号是在匿名内部类上执行的代码块,其中非静态方法就是匿名内部类实例上调用,静态方法在类上调用。