同类型的String相加会产生新的String对象,而StringBuffer和StringBuilder不会, 如果要操作少量的数据用 = String
单线程操作字符串缓冲区 下操作大量数据 = StringBuilder 非线程安全
.多线程操作字符串缓冲区 下操作大量数据 = StringBuffer 线程安全的
5, 运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
6,HashMap和Hashtable的区别。
HashMap 非线程安全的实现,他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步(如果是ArrayList:List lst = Collections.synchronizedList(new ArrayList());如果是HashMap:Map map = Collections.synchronizedMap(new HashMap());)。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。
7,error和exception有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
8,forward 和redirect的区别
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送 的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request 参数都可以获取。
9, 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。
public class ThreadTest1{
<span style="white-space:pre"> </span>private int j;
<span style="white-space:pre"> </span>public static void main(String args[]){
<span style="white-space:pre"> </span>ThreadTest1 tt=new ThreadTest1();
<span style="white-space:pre"> </span>Inc inc=tt.new Inc();
<span style="white-space:pre"> </span>Dec dec=tt.new Dec();<span style="line-height: 18.7199993133545px; white-space: pre-wrap; font-family: Verdana;"> </span>
<span style="line-height: 18.7199993133545px; font-family: Verdana; white-space: pre-wrap;"><span style="white-space:pre"> </span>for(int i=0;i<2;i++){</span>
<span style="font-family: Verdana; line-height: 18.7199993133545px; white-space: pre-wrap;"><span style="white-space:pre"> </span>Thread t=new Thread(inc);</span>
<span style="white-space:pre"> </span>t.start();
<span style="white-space:pre"> </span>t=new Thread(dec);
<span style="white-space:pre"> </span>t.start();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>private synchronized void inc(){
<span style="white-space:pre"> </span>j++;
<span style="white-space:pre"> </span>System.out.println(Thread.currentThread().getName()+"-inc:"+j);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>private synchronized void dec(){
<span style="white-space:pre"> </span>j--;
<span style="white-space:pre"> </span>System.out.println(Thread.currentThread().getName()+"-dec:"+j);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>
<span style="white-space:pre"> </span>class Inc implements Runnable{
<span style="white-space:pre"> </span>public void run(){
<span style="white-space:pre"> </span>for(int i=0;i<100;i++){
<span style="white-space:pre"> </span>inc();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>class Dec implements Runnable{
<span style="white-space:pre"> </span>public void run(){
<span style="white-space:pre"> </span>for(int i=0;i<100;i++){
<span style="white-space:pre"> </span>dec();
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>}
}
}
10, Java有没有goto?
java中的保留字,现在没有在java中使用。
11,当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
Java 编程语言只有值传递参数。所以是值传递。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用 的方法中改变,但对象的引用是永远不会改变的。
12,说出数据连接池的工作机制是什么?
J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表 记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接 表记为空闲,其他调用就可以使用这个连接。
13,new String(s.getBytes("ISO-8859-1"),"GBK")正确吗
没问题,就是将ISO-8859-1字符集的s变量内容转换为GBK字符集类型。这个只有在页面、后台处理程序、数据库3者之间字符集不一致的情况下使用。
14,