此文是我自己在学习Java过程中觉得有用的且容易混淆或者遗忘的一句话总结。
1)long类型不能用于switch语句;
2)一个接口可以继承(扩展)多个接口;
3)在方法块中声明静态变量时,会引起编译错误;
4)检验异常通过Exception类的子类进行定义,而非检验异常则通过RuntimeException类的子类进行定义;
5)可以通过匿名内部类来直接实例化抽象类或接口;
6)在静态嵌套内部类存在于接口内部时,接口可以将内部存在实现方式的引用数据类型包括进去;
public interface Command
{
public void execute(String s);
public static class Dos implements Command
{
public void execute(String s)
{
//some codes to execute a dos command
}
}
public static class Unix implements Command
{
public void execute(String s)
{
//some codes to execute a Unix command
}
}
}
现在,如果我们想在UNIX平台上运行,那么可以使用如下代码:
Command c = new Command.Unix();
c.execute("dir");
7)获得当前线程的引用:Thread t = Thread.currentThread();
获得当前线程组的引用:ThreadGroup tg = Thread.currentThread().getThreadGroup();
8)序列化(Serializable)过程中从不存储临时实例(声明为transient);
serializable是标记性接口,无可实现方法,只是通知编译器其实现类可被序列化。当一个实例被声明为transient时,其值在序列化过程中将丢失。
import java.io.*;
public class TestObjectIO {
public static void main(String[] args) {
T t = new T();
t.k = 8;
try {
FileOutputStream fos = new FileOutputStream("e:/debug/testObjectIO.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(t);
oos.flush();
oos.close();
FileInputStream fis = new FileInputStream("e:/debug/testObjectIO.dat");
ObjectInputStream ois = new ObjectInputStream(fis);
T tRead = (T)ois.readObject();
System.out.println(tRead.i+","+tRead.j+","+tRead.d+","+tRead.k);
}
catch(FileNotFoundException e) {
e.printStackTrace();
}
catch(ClassNotFoundException e) {
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
}
}
class T implements Serializable {
int i = 10;
int j = 9;
double d = 2.3;
transient int k = 15;
}
运行结果:10,9,2.3,0
实现externalizable接口可以自行控制序列化过程,而serializable由于没有方法所以无法由程序员自己控制序列化过程。
9)