JAVA学习之局部内部类,匿名内部类,静态内部类

分别写了一个匿名内部类和静态内部类的程序,局部内部类感觉就是后两者的一般情况,后两者则是前者的特殊应用。

局部内部类:在一个方法中定义一个类,不可以用public或static进行声明,可以对外部完全隐藏,只有该方法可以调用。

匿名内部类:不用写类的定义头部分,直接写类体,我个人感觉不太好,只有在接口要定义函数时用比较好吧?这种类不能有构造函数,所以它调用超类的构造函数,注意在内部类实现接口时不能有参数。

静态内部类:如果只是单存为了隐藏一个类,而不用内部类去调用外围对象,则可以用这种类,用起来有点像是Arrays.sort()。

package staticInnerClass;

public class StaticInnerCLassTest
{
	public static void main(String[] args)
	{
		double[] d=new double[20];
		for(int i=0;i<20;i++)
			d[i]=100*Math.random();
		ArrayAlg.Pair p=ArrayAlg.minmax(d);
		System.out.println(p.GetFirst());
		System.out.println(p.GetSecond());
	}
}

class ArrayAlg
{
	public static class Pair
	{
		private double first;
		private double second;
		public Pair(double first,double second)
		{
			this.first=first;
			this.second=second;
		}
		public double GetFirst()
		{
			return this.first;
		}
		public double GetSecond()
		{
			return this.second;
		}
	}
	public static Pair minmax(double[] value)
	{
		double min=Double.MAX_VALUE;
		double max=Double.MIN_VALUE;
		for(double v:value)
		{
			if(min>v)
				min=v;
			if(max<v)
				max=v;
		}
		return new Pair(min,max);
	}
}

  

package anonymousInnerClass;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import javax.swing.Timer;

public class AnonymousInnerClassTest
{
	public static void main(String[] args)
	{
		TalkingClock clock=new TalkingClock();
		clock.start(1000,true);

		JOptionPane.showMessageDialog(null,"Quit the program?");
		System.exit(0);
	}
}

class TalkingClock
{
	public void start(int interval,boolean beep)
	{
		ActionListener listener=new ActionListener()
				{
					public void actionPerformed(ActionEvent event)
					{
						Date now=new Date();
						System.out.println("At the tone,the time is "+now);
						if(beep)
							Toolkit.getDefaultToolkit().beep();
					}
				};
		Timer t=new Timer(interval,listener);
		t.start();
	}
}

  

时间: 2024-10-23 21:19:01

JAVA学习之局部内部类,匿名内部类,静态内部类的相关文章

Java学习笔记:内部类/匿名内部类的全面介绍

编写java程序时,一般一个类(或者接口)都是放在一个独立的java文件中,并且类名同文件名(如果类是public的,类名必须与文件名一致:非public得,无强制要求).如果想把多个java类放在一个java文件中,则只能有一个public类.如下面的两个类放在同一个文件中就会报错,无法编译通过. 可以看出,因为TestOne.java文件中已经有一个public类TestOne,这时再加了一个public类TestTwo就报错了.如果将类TestTwo前面的public修饰符去掉就没有问题了

Java学习笔记之 内部类

1. 什么是Java中的内部类 内部类(Inner Class)就是定义在另外一个类里面的类.与之对应,包含内部类的类被称为外部类. 它的主要作用: a. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类. b. 内部类的方法可以直接访问外部类的所有数据,包括私有数据. c. 内部类所实现的功能使用外部类同样可以实现.只是有时使用内部类更加方便. d. 内部类可分为:成员内部类,静态内部类,方法内部类,匿名内部类 四种. 简单实例: //外部类HelloWo

黑马程序员——————&gt; 局部内部类&amp;匿名内部类

------- android培训.java培训.期待与您交流! ---------- 如果把一个内部类放在方法里定义,则这个内部类就是一个局部内部类,局部内部类仅在该方法里有效.由于局部内部类不能在外部类的方法以外的地方使用,因此局部内部类也不能使用访问控制符和static修饰符修饰. 对于局部成员而言,不管是局部变量还是局部内部类,它们的上一级程序单元都是方法,而不是类,使用static修饰它们没有任何意义.因此,所有的局部成员都不能使用static修饰.不仅如此,因为局部成员的作用域是所在

Java中,局部内部类

局部内部类 A:局部内部类可以直接访问外部类的成员. B:局部内部类在局部位置可以创建内部类对象,通过内部类对象调用内部类方法,来使用局部内部类功能. C:局部内部类访问局部变量,局部变量必须加final修饰.为什么呢? 因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失, 局部对象还要使用这个局部变量.为了让数据还能继续被使用,就用fianl修饰局部变量, 这样,在堆内存里面存储的其实是一个常量值.通过反编译工具可以看一下. 通过反编译工具我们看到了,加入fin

Java学习笔记之:Java 内部类

一.介绍 内部类:存在与类中的类就是内部类,一般用于Android开发. 可以把内部类理解成一种继承关系 1.普通内部类 2.局部内部类 3.静态内部类 4.匿名内部类 二.笔记 1.普通内部类 /** * 普通内部类:声明在类中,方法外的类 * 1.内部类可以直接访问外部类的属性和方法 包含私有的 * 2.外部类不能直接访问内部类的属性和方法,可以通过对象来访问,包含私有的 * * */ public class NormalInnerClass { public static void ma

JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?

本文主要记录:在JAVA中,(局部)内部类访问某个局部变量,为什么这个局部变量一定需要用final 关键字修饰? 首先,什么是局部变量?这里的局部是:在方法里面定义的变量. 因此,内部类能够访问某局部变量,说明这个内部类不是在类中定义的内部类,而是在方法中定义的内部类,称之为:局部内部类. 局部变量的作用域:局部变量是在某个方法中定义,当该方法执行完成后,局部变量也就消失了.[局部变量分配在JVM的虚拟机栈中,这部分内存空间随着程序的执行自动回收],也即:局部变量的作用域是在 “方法的范围内”.

java内部类和静态内部类

看代码理解内部类,局部内部类和静态内部类 内部类代码: public class InnerTest { private static String name; private int age; public InnerTest(String name, int age){ this.name = name; this.age = age; } public void getInstance() { System.out.println("name:" + name.toString(

java学习资料

必须养成好的的编码习惯:缩进(用空格).注释.命名约定. 大小写敏感. 单独的":"代表一条空语句. main函数是我们整个程序的执行入口所以必须是静态公开的. 必须写成这样:  public static void main(String[]args){...} 生成jar包: 在eclipse里,选中要打包的几个文件,右键-Export-写文件名-Next-Next-选main方法的class-finish 在jar包的同一文件夹下,新建一个空文档,写"java -jar

Java学习(十六)、成员内部类,静态内部类,匿名内部类,局部内部类

定义:将一个类定义在另一个类的内部.内部的类称为内部类; public class Outer{ class inner{ //省略 } } 特点: ①   内部类可以很好的实现隐藏,可以使用protected,private修饰符; ②   内部类可以直接访问外部类的所有成员,包括私有成员; ③   外部类不能直接访问内部类的成员,必须首先要建立内部类的对象才能访问; ④   内部类可以解决一些问题,比如间接的去实现多继承.可以避免修改接口而实现同一个类中两种同名方法的调用; 成员内部类及应用