17 内部类 递归

内部类(Inner Class),内部类共分为4种。

1静态内部类(static inner class):

public static class Inner
	{
		
	}

只能访问外部类的静态成员变量与静态方法,生成静态内部类对象的方式为:

OuterClass.InnerClass inner = new OuterClass.InnerClass();

2. 成员内部类(member inner class):可以访问外部类的静态与非静态的方法与成员变量。生成成员内部类对象的方式为:

OuterCLass.Inner inner=new OuterCLass().new Inner();


OuterClass.InnerClass inner = new OuterClass().new InnerClass();

4. 若想在局部内部类中访问外部类的成员变量,语法为:OuterClass.this.a;

lass MemberInner
{
	private int a = 4;
	
	public class Inner2
	{
		private int a = 5;
		
		public void doSomething()
		{
			System.out.println(MemberInner.this.a);
		}
	}
	//外部类中创建内部类的实例
	public void method()
	{
		Inner2 inner = this.new Inner2();
	}
}

5. 局部内部类(Local Inner Class):定义在方法当中,只能访问方法中声明的final类型的变量。

class LocalInner
{
	public void doSomething()
	{
		final int a = 4;
		
		class Inner3
		{
			public void test()
			{
				System.out.println(a);
			}
		}
		
		new Inner3().test();
	}
}



public class LocalInnerClassTest
{
	public static void main(String[] args)
	{
		LocalInner localInner = new LocalInner();
		
		localInner.doSomething();
		
	
	}
}

6. 匿名内部类(Anonymous Inner Class):匿名内部类会隐式地继承一个父类或实现一个接口。


AnonymousInnerClassTest test = new AnonymousInnerClassTest();
		// 匿名内部类
		String str = test.get(new Date()
		{ 
			public String toLocaleString()
			{
				return "hello world";
			}
		});
		
		System.out.println(str);

匿名内部类常用的方式,在swing中使用:

public static void main(String[] args)
	{
		JFrame frame = new JFrame("JFrame");
		
		JButton button = new JButton("click me");
		
		button.addActionListener(new ActionListener()
		{
			@Override
			public void actionPerformed(ActionEvent e)
			{
				System.out.println("welcome");
			}
		});
		
		frame.setSize(200, 200);
		
		frame.getContentPane().add(button);
		
		frame.addWindowListener(new WindowAdapter()
		{
			@Override
			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
		
		
		
		frame.setVisible(true);
		
	}


7. 所谓递归(Recursion),就是方法调用自身。对于递归来说,一定有一个出口,让递归结束,只有这样才能保证不出现死循环。

public static int compute(int f)
	{
		if (f>1)
		{
			return f*compute(--f);
		}
		else {
			return 1;
		}
	}
public static void DeleteAll(File file  )
	{
		if (file.isFile()||file.list().length==0)
		{
			file.delete();
		}
		else {
			File []files=file.listFiles();
			for (File file2 :files)
			{
				DeleteAll(file2);
			}
			file.delete();
		}
		
		
	}



你可能感兴趣的:(17 内部类 递归)