1、实例化Thread
package test.t4;
public class T4 {
public static void main(String[] args) {
//方式一:
Thread t=new Thread(){
@Override
public void run() {
System.out.println(1);
}
};
t.start();
//方式二:
new Thread(){
@Override
public void run() {
System.out.println(2);
}
}.start();
//方式三:
Demo demo=new Demo();
demo.start();
}
}
class Demo extends Thread {
@Override
public void run() {
System.out.println(3);
}
}
2、Runnable
package test.t4;
public class T4 {
public static void main(String[] args) {
//方式一:
Runnable r1=new Demo();
Thread t1=new Thread(r1);
t1.start();
//方式二:
Runnable r2=new Runnable() {
@Override
public void run() {
System.out.println(2);
}
};
Thread t2=new Thread(r2);
t2.start();
//方式三:
Runnable r3=()->System.out.println(3);
Thread t3=new Thread(r3);
t3.start();
//方式四:
new Thread(()-> System.out.println(4)).start();
}
}
class Demo implements Runnable{
@Override
public void run() {
System.out.println(4);
}
}
3、不管是引用类型还是基本类型,数组必须声明并指定长度,即使是空数组,也需要。
4、堵塞方法:
Scan.nextLine()、serverSocket.accept()、br.readLine();
5、集合也需要声明并初始化
6、static修饰的成员方法和变量只能被继承,不能被重写,因为属于类,对子类隐藏,不显示,所以子类如果写了一个方法签名相同的方法,是一个独立的普通方法
7、原数组长度小于要覆盖的元素个数
8、空格是空白字符的一种,使用正则表达式的三种方法时,需要双杠
9、作用是复用代码的方法中,如果需要处理异常时,通常是抛出异常给调用方处理。
10、Collection.reverse的反转原理
List<String> list=new ArrayList<>();
list.add("one");
list.add("two");
list.add("three");
for (int i = 0; i <list.size()/2; i++) {
String str=list.set(i,list.get(list.size()-1-i));
list.set(list.size()-1-i,str);
}
System.out.println(list);
11、关于构造器中的重复声明问题:
如果成员变量在类中已经声明,如果在构造器中再次声明,则是一个新的变量,。
12、java进程干掉了,常量池才被干掉
13、整理线程内存图
(1)demo
package Test2;
public class T7 {
public static void main(String[] args) {
Thread t1=new Thread(){
@Override
public void run() {
int a=1;
a=dosome(a);
System.out.println(a);
}
};
Thread t2=new Thread(){
@Override
public void run() {
int a=3;
a=dosome(a);
System.out.println(a);
}
};
t1.start();
t2.start();
}
public static int dosome(int a){
a++;
return a;
}
}
(2)流程理解:
① 主线程调用t1,t2的start方法后,运行结束,栈和堆内存空间被gc干掉,两个分配到时间片的子线程,继续执行
② 两个子线程的运行状态:NEW->RUNNABLE->RUNNING->RUNNABLE->RUNNING
14、关闭流一定要放在finally中
15、try也是一个区域,里面定义的变量是局部变量,对外不可显示
16、关于lambda表达式的异常,throws抛出没有作用,还会报错,需要try-catch处理异常不会上报问题解析:
在http流程设计中,需要方法把异常抛出,上报给流程,让用户知道发送有问题,而如果使用lambda就只能在方法中try-catch了,就不会进行上报给流程,所以不太适合使用在流程设计中,使用普通的for和强for即可
17、不发类型,浏览器会自己思考什么类型。
18、速度:三目>switch.。。。case>if.。。。。。else
19、业务和流程异常处理问题?
业务方法异常需要自己try-catch解决,而流程方法中的则需要抛出给调用方处理
20、关于BIO客户端和服务端关系是一问一答,一个客户端一个输出流,一个输入流,一个socket
21、
(1)堆是线程共享的内存区域,栈是线程独享的内存区域。
(2)堆中主要存放对象实例,栈中主要存放各种基本数据类型、对象的引用。
题目:关于下列说法不正确的是___
A.每个线程都有自己的堆内存
B.每个线程都有自己的栈内存
C.线程共享进程内存
D.线程从属于进程
【正确答案】A