目录
一、String&StringBuffer&StringBuilder复习
一、String&StringBuffer&StringBuilder复习
1.String s = "Hello";s = s + " world!";这两行代码执行后,原始的 String 对象中的内容到底变了没有?
提示:
没有。因为 String 被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。:
例如:下面图案可供参考。
答案:
2.String s = new String("xyz");创建了几个 String Object? 二者之间有什么区别? xyz 是字面量
两个,一个放在常量区,不管写多少遍,都是同一个。New String 每写一遍,就创建一个新。
以下图文即可表达:
New String 每次每写一遍的值都是放在常量区的,无论写多少遍。
String代码演示:
String s = "a";
for(int a = 0;a<100;a++){
s+=a;
}
StringBuffer代码演示:
StringBuffer s = new StringBuffer("a");
for(int a = 0;a<100;a++){
s.append(a);
}
二.异常Exception复习
1.try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行,什么时候被执行,在 return 前还是后?
package com.wangdongsheng.demo;
public class demo {
public static void main(String[] args) {
System.out.println(test1());
}
private static int test1() {
int i =1;
//try catch结构,finally的代码必然会执行,try先执行
//里面有返回值teturn,那么中断,执行完finally中代码
//再唤醒中断代码
try {
// i++;
// int a = i/0;
// System.out.println("当前1="+i);
return i;
} catch (Exception e) {
}finally {
System.out.println("finally"+(++i));
}
return 0;
}
}
输出为:
2.final, finally, finalize 的区别
//普通异常
public static void test2() throws Exception {
throw new Exception();
}
运行时异常代码演示:
//运行时异常
public static void test3(){
throw new RuntimeException();
}
3.error 和 exception 有什么区别?
三、线程复习
线程是什么?
答案:程序运行的最小单元
线程如何实现?
答案:extends Thread
implement Runnable
线程的状态?
答案:
准备、运行、休眠、等待、阻塞、停止
线程常用的方法?
thread t1 = new Thread();
t1.start();
t1.sleep(1000);
t1.wait(),进入等待状态,t2.notifyall();唤醒等待的线程
线程的死锁?
1.什么是死锁?
死锁是指两个或两个以上的线程在执行过程中,因争夺资源而造成的互相等待的现象,在无外力作用的情况下,这些线程会一直相互等待而无法继续运行下去。
2.死锁的案例:
ab两个线程,a线程要抢占A锁,b线程要抢占b
锁,锁都得不到释放,线程呈现僵持状态 。
如例:
4.多线程有几种实现方法?同步有几种实现方法?
四、List集合复习
list集合
集合与集合之间的区别:List、set、Map
集合子类之间的区别:数据结构
ArrayList与Linkedlist区别:
hashSet与treeset的区别:
hashMap与hashtabel的区别:
某集合子类的特点
如何对set集合/List集合去重
代码演示:
package com.wangdongsheng.demo;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class demo2 {
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());
// Set<String> set = new HashSet<>();
// set.add("zs");
// set.add("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> listnew = new ArrayList<>();
for (Person p : list) {
if (!listnew.contains(p)) {
listnew.add(p);
}
}
System.out.println(listnew.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 int hashCode() {
System.out.println("======hashCode=====");
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) {
System.out.println("=====equals====");
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;
}
}