读书人

个人java基础小结

发布时间: 2012-11-03 10:57:43 作者: rapoo

个人java基础总结

<!--@page { margin: 2cm }P { margin-bottom: 0.21cm }-->

    stringstringbufferstringbuilder的区别

String:

是对象不是原始类型.

为不可变对象,一旦被创建,就不能修改它的值.

对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去.

?

String是final类,即不能被继承.

  public final class String    implements java.io.Serializable, Comparable<String>, CharSequence{    /** The value is used for character storage. */    private final char value[];...
?

StringBuffer

是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象

它只能通过构造函数来建立,

StringBuffersb = new StringBuffer();

对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向StringBuffer

中付值的时候可以通过它的append方法.

?

每个字符串缓冲区都有一定的容量。只要字符串缓冲区所包含的字符序列的长度没有超出此容量,就无需分配新的内部缓冲区数组。如果内部缓冲区溢出,则此容量自动增大

Stringbuffer底层是用char[]实现的,默认长度16,默认增长长度(value.length+ 1) * 2

?

Stringbuffer比StringBuilder唯一区别即增加synchronized关键字,所以是线程安全的;

?

    说一下ErrorExceptionRuntimeException并举例开发中是怎么用的。

Throwable是所有 Java 程序中错误处理的父类,有两种资类: Error 和Exception 。

Error:表示由 JVM所侦测到的无法预期的错误,由于这是属于 JVM层次的严重错误 ,导致 JVM无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。

Exception:表示可恢复的例外,这是可捕捉到的。

?

Java提供了两类主要的异常 :runtimeexception 和 checkedexception 。 checked异常也就是我们经常遇到的 IO异常,以及 SQL异常都是这种异常。 对于这种异常, JAVA编译器强制要求我们必需对出现的这些异常进行catch。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch 块去处理可能的异常。

但是另外一种异常:runtime exception,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机接管。比如:我们从来没有人去处理过NullPointerException异常,它就是运行时异常,并且这种异常还是最常见的异常之一。

出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由Thread.run() 抛出,如果是单线程就被 main()抛出 。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是Exception 的子类,也有一般异常的特点,是可以被Catch块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。

如果不想终止,则必须扑捉所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。在这个场景这样处理可能是一个比较好的应用,但并不代表在所有的场景你都应该如此。如果在其它场景,遇到了一些错误,如果退出程序比较好,这时你就可以不太理会运行时异常,或者是通过对异常的处理显式的控制程序退出。

异常处理的目标之一就是为了把程序从异常中恢复出来。

    Java内存溢出与泄漏,举例说明

原因有很多种,比如:

?

1.数据量过于庞大;死循环;静态变量和静态方法过多;递归;无法确定是否被引用的对象;例如:读大文件

?

2.虚拟机不回收内存(内存泄漏);例如:数据库连接不关闭

    Java的垃圾回收机制

Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。

需要注意的是:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身,问到这个问题的时候,70%以上的人回答的含义是回收对象,实际上这是不正确的。

System.gc()

Runtime.getRuntime().gc()

上面的方法调用时用于显式通知JVM可以进行一次垃圾回收,但真正垃圾回收机制具体在什么时间点开始发生动作这同样是不可预料的,这和抢占式的线程在发生作用时的原理一样。

    Xml有哪些解析技术,区别是什么

Java中xml有4中解析技术,其中2种是基本的解析技术dom、xas

DOM是基于XML文档树结构的解析,一次性全部读入内存

Sax是基于事件流的解析

DOM4J是一个非常非常优秀的JavaXML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,hibernate就是使用的此种技术

JDOM:为减少DOM、SAX的编码量,出现了JDOM;优点:极大减少了代码量

    Listmap set都继承自collection接口吗?说出其异同

List中的元素可以重复,而set中的元素不可以重复

LinkedList是用内部类实现的双向链表

privatestaticclassEntry<E>{

Eelement;

Entry<E>next;

Entry<E>previous;

?

Entry(Eelement, Entry<E>next, Entry<E>previous) {

this.element= element;

this.next= next;

this.previous= previous;

}

}

ArrayList是以Object[]elementData数组的形式实现的,初始长度为10.

默认增长newCapacity= (oldCapacity * 3)/2 + 1;

?

CopyOnWriteArrayList 线程安全的集合,为jdk1.5新增的类

也是采用Object[] 实现的,但是初始长度为0

它是采用Array.copy技术实现的数组增长,所以不存在默认增长长度问题

?

HashSet采用哈希技术,TreeSet虽然存入的顺序跟存储的顺序不同,但是存储是按照排序存储的。

HashMap是线程不安全的,HashTable是线程安全的,TreeMap是排序的

?

ConcurrentHashMap 也是线程安全的,为jdk1.5新增加的类,

HashTable在同步过程中会锁定整个hashtable,效率较低

而ConcurrentHashMap将整个hashtable分成16个桶,同步过程中只锁定目标桶即可,所以允许最多16个进程同时操作,比HashTable效率要高

?

    Oracle的事物隔离级别

?ANSI/ISOSQL92标准定义了一些数据库操作的隔离级别:

???????????未提交读(readuncommitted)

???????????提交读(readcommitted)

???????????重复读(repeatableread)

???????????序列化(serializable)

??????????通过一些现象,可以反映出隔离级别的效果。这些现象有:

???????????更新丢失(lostupdate):当系统允许两个事务同时更新同一数据是,发生更新丢失。

???????????脏读(dirtyread):当一个事务读取另一个事务尚未提交的修改时,产生脏读。

???????????非重复读(nonrepeatableread):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。(Atransaction rereads data it has previously read and finds thatanother committed transaction has modified or deleted the data.?)

???????????幻像(phantomread):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。(Atransaction reexecutes a query returning a set of rows that satisfiesa search condition and finds that another committed transaction hasinserted additional rows that satisfy the condition.? )

??????????下面是隔离级别及其对应的可能出现或不可能出现的现象

?

DirtyRead?

NonRepeatableRead?

PhantomRead?

Readuncommitted

Possible

Possible

Possible

Readcommitted

Notpossible

Possible

Possible

Repeatableread

Notpossible

Notpossible

Possible

Serializable

Notpossible

Notpossible

Notpossible

?

?

ORACLE的隔离级别

?

??????????ORACLE提供了SQL92标准中的readcommitted和serializable,同时提供了非SQL92标准的read-only。

???????????readcommitted:

??????????这是ORACLE缺省的事务隔离级别。

??????????事务中的每一条语句都遵从语句级的读一致性。

读书人网 >编程

热点推荐