Java中的内部类和匿名类(转)
[摘要]
提起Java内部类(Inner
Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested
Class),关于这两者的区别与联系,在下文中会有对比。
[关键字] Java
内部类
匿名类
有人会问,如果内部类里的一个成员变量与外部类的一个成员变量同名,也即外部类的同名成员变量被屏蔽了,怎么办?没事,Java里用如下格式表达外部类的引用:
outerClass.this
有了它,我们就不怕这种屏蔽的情况了。
* 静态内部类
和普通的类一样,内部类也可以有静态的。不过和非静态内部类相比,区别就在于静态内部类没有了指向外部的引用。这实际上和C++中的嵌套类很相像了,Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用这一点上,当然从设计的角度以及以它一些细节来讲还有区别。
除此之外,在任何非静态内部类中,都不能有静态数据,静态方法或者又一个静态内部类(内部类的嵌套可以不止一层)。不过静态内部类中却可以拥有这一切。这也算是两者的第二个区别吧。
* 局部内部类
是的,Java内部类也可以是局部的,它可以定义在一个方法甚至一个代码块之内。
public class Goods1 {
public Destination dest(String s) {
class GDestination implements Destination {
private String
label;
private GDestination(String whereTo) {
label =
whereTo;
}
public String readLabel() { return label; }
}
return new GDestination(s);
}
public
static void main(String[] args) {
Goods1 g= new Goods1();
Destination d = g.dest("Beijing");
}
}
上面就是这样一个例子。在方法dest中我们定义了一个内部类,最后由这个方法返回这个内部类的对象。如果我们在用一个内部类的时候仅需要创建它的一个对象并创给外部,就可以这样做。当然,定义在方法中的内部类可以使设计多样化,用途绝不仅仅在这一点。
下面有一个更怪的例子:
public class Goods2{
private void
internalTracking(boolean b) {
if(b) {
class TrackingSlip {
private String id;
TrackingSlip(String s) {
id =
s;
}
String getSlip() { return id; }
}
TrackingSlip ts = new TrackingSlip(&q
相关文档:
Map、Set、Iterator迭代详解
Map接口定义了四种类型的方法,每个Map都包含这些方法。
equals(Object o)比较指定对象与此Map的等价性。
hashCode()返回此Map的哈希码。
Map定义了几个用于插放和删除元素的变换方法。
remove(Object key) 从Map中删除键和关联的值。
put(object key,Object value) 将指定值与指定键相关 ......
学习了两篇的Runtime类,现在对它有了更深一层的了解,那么我们来看看下面的代码:
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader ;
import java.io.BufferedReader;
public class Exec_Output{
public static void main(String []args)throws IOException,Int ......
在非java虚拟机下运行matlab据说可以扩大内存,启动非java虚拟机下运行 matlab的方法有:
一.
1、右建点matlab快捷方式,选属性 ......
import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
/**
* Java如何每5秒生成一个随机数
*
* @author Java人(java2000.net)
*/&nbs ......