Java一些基础知识

浅拷贝与深拷贝的区别

基本数据类型:直接存储在栈中数据

引用型数据类型:存储的是该对象在栈中引用,真实数据存放在堆内存中

浅拷贝:只复制某个对象的指针,不复制对象本身,新旧对象还是共存同一块内存(分支)

                按位拷贝对象,会创建一个新的对象

深拷贝:会创造一个完全一模一样的对象,新旧对象不共享内存,修改新数据不会影响到旧数据

赋值:其实就是把一个对象在栈中的内存地址赋值给它,无论哪个对象发生改变,其实都是改变的存储空间的内容

sleep和wait区别

sleep:释放cpu给其他线程使用,不释放锁资源,属于Thread类中的方法

wait:释放cpu给其他线程使用,同时释放锁资源,属于Object类中方法,wait() 一直等待需要通过notify或者notifyAll进行唤醒,需要配合synchronized 一起使用

==和equals区别 

1.==

如果是基本数据类型,比较的是俩个变量的值

如果是引用数据类型,比较的是地址值(俩个对象是否指向同一个地址)

2.equals

如果没重写equals方法,比较的是俩个对象的地址值

如果重写了equals方法,比较的是对象中属性的值,equals在object类继承的,默认实现方式就是==

final、finally、finalize 

final:修饰类/方法/变量,

修饰类后,不能被继承;修饰方法,不能被重写;修饰变量,不能被改变;

finally:通常放在try…catch的后面构造最终执行代码块

finalize:Java中允许使用finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作

线程的创建方式

1.继承Thread类创建线程

        ThreadClass thread = new ThreadClass();
        thread.start();
        Thread.sleep(100);
        System.out.println("#####################");

2.实现Runnable接口创建线程

        RunnableClass runnable = new RunnableClass();
        new Thread(runnable).start();
        Thread.sleep(100);
        System.out.println("#####################");

3.使用Callable和Future创建线程,有返回值


        FutureTask futureTask = new FutureTask(new CallableClass());
        futureTask.run();
        System.out.println("callable返回值:" + futureTask.get());
        Thread.sleep(100);
        System.out.println("#####################");

4.使用线程池创建线程


        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 2,TimeUnit.SECONDS, new ArrayBlockingQueue<>(10));
        threadPoolExecutor.execute(thread);
        threadPoolExecutor.shutdown();
        Thread.sleep(100);
        System.out.println("#####################");

Java中有几种类型的流  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值