java常用知识点系列-20

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爷叫曹小仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值