目录
1.String s="Hello"; s = s +"world";这两行代码执行后。原始的String 对象中的类容变了吗?
3.String s = new String("xyz");创建了几个 String Object? 二者之间有什么区 别? xyz 是字面量
2.1 try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后
2.2.final, finally, finalize 的区别
2.5.给我一个你最常见到的 runtime exception。
如何实现?
3.2同步和异步有何异同,在什么情况下分别使用他们?举例说明。
3.3当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此对 象的其它方法?
4.3.List, Set, Map 是否继承自 Collection
一.String&StringBuffer
1.String s="Hello"; s = s +"world";这两行代码执行后。原始的String 对象中的类容变了吗?
没有,类容是不变的只是新增加了一个对象。如下图:
示例:
2.是否可以继承 String 类?
String 类是 final 类故不可以继承。
3.String s = new String("xyz");创建了几个 String Object? 二者之间有什么区 别? xyz 是字面量
两个,一个放在常量区,不管写多少遍,都是同一个。 New String 每写一遍,就创建一个新。
示例:
4.String 和 StringBuffer 的区别
String 和 StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。
但是因为StringBuffer只创建了一个 StringBuffer 对象,而String效率很低,因为创建了 101 个对象 如下图:
public class Test2 {
public static void main(String[] args) {
String s="a";
for (int a = 0; a < 100; a++) {
s+=a;
}
StringBuffer ss=new StringBuffer("a");
for (int a = 0; a < 100; a++) {
ss.append(a);
}
System.out.println(ss);
}
}
二,异常
2.1 try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会 不会被执行,什么时候被执行,在 return 前还是后
会执行,在 return 前执行。
public static void main(String[] args) {
System.out.println(new Test2().test());
}
static int test() {
int x =1;
try {
return x;
}
finally {
System.out.println(++x);
}
}
2.2.final, finally, finalize 的区别
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally 是异常处理语句结构的一部分,表示总是执行。finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回
2.3.运行时异常与一般异常有何异同?
异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。
2.4 error 和 exception 有什么区别?
error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
2.5.给我一个你最常见到的 runtime 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
三,线程
前言:
线程是什么 ?
:程序运行的最小单位
如何实现?
:extends Thread
:implement Runnable
线程的状态?
准备,运行,休眠,等待,阻塞,停止
常用方法?
Thread t1 =new Thread();
t1.start();
t1.sleep(1000);
t1.wait(),进入等待状态,t2.notifyall();
死锁
ab两个线程,a线程要抢占A索,b线程要抢占B锁。锁都得不到释放,线程呈现僵直状态
3.1 sleep() 和 wait() 有什么区别?
sleep 是线程类( Thread )的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会 自动恢复。调用 sleep 不会释放对象锁。wait 是 Object 类的方法,对此对象调用 wait 方法导致本线程放弃对象锁,进入等待此对的 等待锁定池,只有针对此对象发出 notify 方法(或 notifyAll )后本线程才进入对象锁定池准备获得对象锁进入运行状态。
3.2同步和异步有何异同,在什么情况下分别使用他们?举例说明。
如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那 么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很 多情况下采用异步途径往往更有效率。
3.3当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此对 象的其它方法?
分几种情况:1.其他方法前是否加了 synchronized 关键字,如果没加,则能。2.如果这个方法内部调用了 wait ,则可以进入其他 synchronized 方法。3.如果其他个方法都加了 synchronized 关键字,并且内部没有调用 wait ,则不能
3.4.启动一个线程是用 run()还是 start()?
启动一个线程是调用 start() 方法,使线程就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的执行代码, run() 方法 是该线程所关联的执行代码。
3.5线程的基本概念、线程的基本状态以及状态之间的关系
Java 线程在运行的生命周期中的指定时刻只可能处于下面 6 种不同状态的其中一个状态

四,集合
前言:
集合与集合之间的区别: LIst, set ,Map
集合子类之间的区别:
ArrayList与Linkedlist区别:
hashSet与 treeset 的区别:
hashmap与hashtable的区别:
某集合子类的特点
如何对set集合/List集合去重
set.add(new person("zs"))
set.add(new person("zs"))
经典实例:
public static void main(String[] args) {
Set<Person> set=new HashSet<>();
// set.add(new Person(12, "zs"));
// set.add(new Person(12, "zs"));
// System.out.println(set.size());
List<Person> list =new ArrayList<>();
list.add(new Person(12, "zs"));
list.add(new Person(12, "zs"));
List<Person> list2 =new ArrayList<>();
for (Person person : list2) {
if (!list2.contains(person)) {
list2.add(person);
}
}
System.out.println(list2.size());
}
}
class Person{
private int age;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(int age, String name) {
super();
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Person [age=" + age + ", name=" + name + "]";
}
@Override
public int hashCode() {
System.out.println("jjjjjjjj");
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
4.1ArrayList 和 LinkedList 的区别
1 .对 ArrayList 和 LinkedList 而言,在列表末尾增加一个元素所花的开销都是固定的。对 ArrayList 而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对 LinkedList 而言,这个开销是统一的,分配一个内部 Entry 对象。2 .在 ArrayList 的中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在 LinkedList 的中间插入或删除一个元素的开销是固定的。3 . LinkedList 不支持高效的随机元素访问。4 . ArrayList 的空间浪费主要体现在在 list 列表的结尾预留一定的容量空间,而 LinkedList 空间花费则体现在它的每一个元素都需要消 耗相当的空间
4.2 HashMap 和 Hashtable 的区别
一 . 历史原因 :Hashtable 是基于陈旧的 Dictionary 类的, HashMap 是 Java 1.2 引进的 Map 接口的一个实现二 . 同步性 :Hashtable 是线程安全的,也就是说是同步的,而 HashMap 是线程序不安全的,不是同步的三 . 值:只有 HashMap 可以让你将空值作为一个表的条目的 key 或 value
4.3.List, Set, Map 是否继承自 Collection
List , Set 是, Map 不是
4.4 List、Map、Set 三个接口,存取元素时,各有什么特点?
List 以特定次序来持有元素,可有重复元素。 Set 无法拥有重复元素 , 内部排序。 Map 保存 key-value 值, value 可多值。
总结
今天又是秃头的一天明天也要继续啊!!!QWQ