`

JDK API方面问题连载

 
阅读更多
如何将默认的系统输出重定向到文件?
System类变量out对象是系统默认的标准输出,err对象是默认的出错信息输出,一般情况下,这两个对象都输出信息到console,但通过System的setErr和setOut可以重定向到文件或其它流中,如下代码:
PrintStream st = new PrintStream(new FileOutputStream("output.txt"));
System.setErr(st);
System.setOut(st);

简单的说,abstrace class和interface有哪些不同?
抽象类可以包函具体的方法体,在接口中这是不能的;你可以通过extends操作来继承一个abstrace class,对于接口,可以通过implements来实现多个接口.

使用synchronized时,为何尽量使用同步块而不要同步方法?
简单的说,包含在synchronizce中的代码在同一时间,就只能有一个Thread来访问;当同步的内容多时,会影响性能,或带来死锁等问题;而同步块会缩小范围,减少出错的机会;同步块:
synchronized(lockObject){
your code here......
}
同步方法:
public synchronized vod yourMethod(){
your code here......
}

transient关键字是什么意思?
当一类变量使用transient修修饰时,标志者这个类变量不能被序列化(serialized);且当de-serialized时,这个类变量只能得到一个它的数据类型所决定的初始值,比如某个类的变量:public transiend int tInt=100; 当de-serialized时,得到的值是int的默认初始值0;

如何强制执行vm的垃圾回收(garbage collection)?
可以通过调用System.gc()执行,但JVM并不保证这个执行马上实现,具体由VM内部调度;

什么情况下需要一个显式的类型转换?
当将类的一个父类对象引用到一个这引类或这个类的子类时,需要显式的转换,如:
Object obj; Customer c; b=(Customer)obj;
反向时(将子类指向父类的类型变量),则不需要显式转换,系统会自动完成。

Thread类的sleep()和wait()有何不同?
例如:sleep(1000)会精确的控制Thread停止1秒;wait(1000)具有同样的效果,但可通过notify()或者notifyAll()打断这个waiting。wait()方法是定义在Object类中,也就是说所有的对象都具有这个方法;而sleep()只是定义在Thread类中。

构造器(constructors)和其它的方法(method)有什么不同?
constructors必须有一个和类同名的名字而且不返回任何值,对一个对象来说它的constructors只调用一次,而其它方法可以多次调用!

java中package有什么用处?
当一个项目有多个模块是,这是一种组织文件的好办法,比如一个org.netjava.db.*下面放所有DB相类,org.NetJava.uitl.*下面放所有公用的工具类;另外,使用package结构可以保持类命令的唯一性:在不同的package中,可以有同名的类而不冲突;使用package还可以保户类数据,避免不正确的访问。

如何设置某一个package中类的环境变量,以便使用这个类?
可以将这个jar文件的绝对路径或class文件目录加入到classpath变量中,如有一个类User在包org.netjava.user中,其位置是c:/dev/org/netjava/user/User.class,就需要将c:/dev加到classpath中,如果这个类中有一个main方法,则可在系统中调用,如
c:/java org.netjava.user.User

J2SDK1.6和J2SDK6.0有什么不同?
其实这两者是同一样东东,一般来说1.6是开发版本号,6.0是产品版本号。

这段代码有什么问题吗?
try{
读文件的操作。。。
}
catch(IOException ef){}
catch(FileNotFoundException ff){}
这段代码的问题是catch声明异常的顺序出错了,FileNotFoundException是IOException的一个子类(都是Exception的子类),所以应先catch的异常是FileNotFoundException。

一个定义在method中的inner class可否访问这个方法体内的变量?
可以,当这个变量定义为final时,如:
public void create(){
final Student student=new Student();
Teacher teach=new Teacher(){
teach.stu=student;
};
}

Vector类和ArrayList的关键不同点是?
Vector内在支持线程安全访问,是一个同步对象,而ArrayList是没有同步的。

队列(queue)和stack的主要是同是?
static中的对象的存取规则是LIFO(Last in-First out),而queues是FIFO--先进先出。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics