没有。因为 String 被设计成不可变 (immutable) 类,所以它的所有对象都是不可变对象。在这段代码中, s 原先指向一个 String 对象,内容是 "Hello" ,然后我们对 s 进行了 + 操作16.String s = "Hello";s = s + " world!";这两行代码执行后,原始的 String 对象中的内容到底没有?
String 类是 final 类故不可以继承。17.是否可以继承 String 类?
18.String s = new String("xyz");创建了几个 String Object? 二者之间有什么区 别? xyz 是字量
两个,一个放在常量区,不管写多少遍,都是同一个。New String 每写一遍,就创建一个新。
Strirng a=new String("a");
Strirng b=new String("b");
内存存放的地址不同:当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间。
19.String 和 StringBuffer 的区别
JAVA 平台提供了两个类:String 和 StringBuffer,它们可以储存和操作字符串,即包含多个字符字符数据。这个 String 类提供了数值不可改变的字符串,而这个StringBuffer类提供的字符串进行改当你知道字符数据要改变的时候你就可以使用StringBuffer,典型地,你可以使用 StringBuffers 来动态构造字符数据。
会执行,在 return 前执行。 如下列:20.try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,么时候被执行,在 return 前还是后?
public static void main(String[] arag){
System.out.println(test1());
}
private static int test1(){
int i=1;
try{
return i;
}catch(Exception e){
}finally{
System.out.println("finally:"+(++i));
}
retrun 0;
}
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 内部类要访问局部变量,局部变量必须定义成 final 类型。 // 析构函数 finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回 收,例如关闭文件等。 JVM 不保证此方法总被调用。21.final, finally, finalize 的区别。
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。 java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。22.运行时异常与一般异常有何异同?
public static void test2() terows Exception {
throw new Exception;
}
public static void test3(){
throw new RuntimeException;
}
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示 ,一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。23.error 和 exception 有什么区别?
ArithmeticException,ArrayStoreException,,BufferOverflowException,BufferUnderflowException,CannotRedoException,CannotUndoException, ClassCastException, CMMException,ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException,IllegalMonitorStateException, IllegalPathStateException,IllegalStateException,ImagingOpException,IndexOutOfBoundsException,MissingResourceException,NegativeArraySizeException, NoSuchElementException,NullPointerException,ProfileDataException, ProviderException,RasterFORMatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException。24.给我一个你最常见到的 runtime exception。
25.sleep() 和 wait() 有什么区别?sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会 ,自动恢复。调用 sleep 不会释放对象锁。 线程: 是什么?: 程序运行最小单元 如何实现?: extends,Thread,implement,Runnable 线程的状态?: 准备,运行,休眠,等待,阻塞,停止 常用的方法?:Thread t1 =new Thread(); t1.start(); t1.sleep(1000); t1.wait(),进入等待状态,t2.notifyall();唤醒等待的线程 死锁?: ab两个线程,a线程要抢占A锁,b线程要抢占B锁,锁都得不到释放,线程呈现僵持状态。
26.同步和异步有何异同,在什么情况下分别使用他们?举例说明。如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那 么这些数据就是共享数据,必须进行同步存取。 当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很 多情况下采用异步途径往往更有效率。
27.当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此对 象的其它方法?分几种情况: 1. 其他方法前是否加了 synchronized 关键字,如果没加,则能。 2. 如果这个方法内部调用了 wait ,则可以进入其他 synchronized 方法。 3. 如果其他个方法都加了 synchronized 关键字,并且内部没有调用 wait ,则不能。
28.多线程有几种实现方法?同步有几种实现方法?多线程有两种实现方法,分别是继承 Thread 类与实现 Runnable 接口 同步的实现方面有两种,分别是 synchronized,wait 与 notify wait(): 使一个线程处于等待状态,并且释放所持有的对象的 lock 。 sleep(): 使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉 InterruptedException 异常。 notify(): 唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由 JVM 确定唤 醒哪个线程,而且不是按优先级。 Allnotity(): 唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。



