public class DemoClass1 {
private int length =0;
//private|public
private class InnerClass implements ILog
{
@Override
public void Write(String message) {
//DemoClass1.this.length = message.length();
length = message.length();
System.out.println("DemoClass1.InnerClass:" + length);
}
}
public ILog logger() {
return new InnerClass();
}
public static void main(String[] args){
DemoClass1 demoClass1 = new DemoClass1();
demoClass1.logger().Write("abc");
//.new
DemoClass1 dc1 = new DemoClass1();
InnerClass ic = dc1.new InnerClass();
ic.Write("abcde");
}
}
interface ILog
{
void Write(String message);
}
/*
DemoClass1.InnerClass:3
DemoClass1.InnerClass:5
请按任意键继续. . .
*/
public class DemoClass2 {
private int length =0;
public ILog logger() {
//在方法体的作用域中定义此局部内部类
class InnerClass implements ILog
{
@Override
public void Write(String message) {
length = message.length();
System.out.println("DemoClass2.InnerClass:" + length);
}
}
return new InnerClass();
}
public static void main(String[] args){
DemoClass2 demoClass2 = new DemoClass2();
demoClass2.logger().Write("abc");
}
}
interface ILog
{
void Write(String message);
}
/*
DemoClass2.InnerClass:3
请按任意键继续. . .
*/
public class DemoClass3 {
private int length =0;
public ILog logger() {
return new ILog() {
@Override
public void Write(String message) {
length = message.length();
System.out.println("DemoClass3.AnonymousClass:" + length);
}
};
}
public static void main(String[] args){
DemoClass3 demoClass3 = new DemoClass3();
demoClass3.logger().Write("abc");
}
}
interface ILog
{
void Write(String message);
}
/*
DemoClass3.AnonymousClass:3
请按任意键继续. . .
*/
public class DemoClass4 {
private int length =0;
public ILog logger(int level) {//final int level
//final
final int logLevel = level+1;
switch(level)
{
case 1:
return new ILog() {
@Override
public void Write(String message) {
length = message.length();
System.out.println("DemoClass4.AnonymousClass:InfoLog " + length);
System.out.println(logLevel);
}
};
default:
return new ILog() {
@Override
public void Write(String message) {
length = message.length();
System.out.println("DemoClass4.AnonymousClass:ErrorLog " + length);
System.out.println(logLevel);
}
};
}
}
public static void main(String[] args){
DemoClass4 demoClass4 = new DemoClass4();
demoClass4.logger(1).Write("abcefghi");
System.out.println("demoClass4.length= "+demoClass4.length);
demoClass4.logger(2).Write("abcefghij");
System.out.println("demoClass4.length= "+demoClass4.length);
}
}
interface ILog
{
void Write(String message);
}
/*
DemoClass4.AnonymousClass:InfoLog 8
2
demoClass4.length= 8
DemoClass4.AnonymousClass:ErrorLog 9
3
demoClass4.length= 9
请按任意键继续. . .
*/
public class DemoClass5 {
private int length =0;
public ILog logger(final int level) throws Exception {
return new ILog() {
{
//实例初始化,不能重载
if(level !=1)
throw new Exception("日志等级不正确!");
}
@Override
public void Write(String message) {
length = message.length();
System.out.println("DemoClass5.AnonymousClass:" + length);
}
};
}
public static void main(String[] args) throws Exception {
DemoClass5 demoClass5 = new DemoClass5();
demoClass5.logger(1).Write("abcefghi");
demoClass5.logger(2).Write("abcefghij");
}
}
interface ILog
{
void Write(String message);
}
/*
DemoClass5.AnonymousClass:8
Exception in thread "main" java.lang.Exception: 日志等级不正确!
at DemoClass5$1.<init>(DemoClass5.java:10)
at DemoClass5.logger(DemoClass5.java:6)
at DemoClass5.main(DemoClass5.java:24)
请按任意键继续. . .
*/
import java.util.*;
interface Action
{
void Run();
}
public class ShareClosure {
List<Action> list = new ArrayList<Action>();
public void Input()
{
for(int i=0;i<10;i++)
{
final int copy = i;
list.add(new Action() {
@Override
public void Run() {
System.out.println(copy);
}
});
}
}
public void Output()
{
for(Action a : list){a.Run();}
}
public static void main(String[] args) {
ShareClosure sc = new ShareClosure();
sc.Input();
sc.Output();
}
}
/*
0
1
2
3
4
5
6
7
8
9
请按任意键继续. . .
*/