栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java基础的复习(二)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java基础的复习(二)

final和static关键字

final:是一个“终结器”,任何代码被final修饰,都不能更改。Final可以修饰类、字段、方法、方法形参、局部变量。被final修饰的类不能被继承;字段不能重新赋值;方法不能重写、方法形参不能二次赋值、局部变量不能二次修改。

Static:可以修饰变量、方法、代码块,static节省空间,没有必要对每一个对象都存储一份,static修饰的变量一旦被更改,其他属于该类的变量也会同步更改。

Synchronized和lock
1.lock是一个接口,而synchronized是个关键字,synchronized是内置的语言实现;

2.异常是否释放锁:synchronized在发生异常时候会自动释放占有的锁,因此不会出现死锁;而lock发生异常时候,不会主动释放占有的锁,必须手动unlock来释放锁,可能引起死锁的发生。(所以最好将同步代码块用try catch包起来,finally中写入unlock,避免死锁的发生。

3.是否响应中断:lock等待锁过程中可以用interrupt来中断等待,而synchronized只能等待锁的释放,不能响应中断;

4.是否知道获取锁:Lock可以通过trylock来知道有没有获取锁,而synchronized不能;

5.synchronized使用Object对象本身的wait 、notify、notifyAll调度机制,而Lock可以使用Condition的await、signal、signalAll来进行线程之间的调度。

6.用法:Synchronized:需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象。

lock:一般使用ReentrantLock类做为锁。在加锁和解锁处需要通过lock()和unlock()显示指出。所以一般会在finally块中写unlock()以防死锁。

7.ReentrantLock可以实现公平锁,也可以实现非公平锁,多个线程在等待同一个锁时,必须按申请锁的顺序排队等待,但是非公平锁不保证这点,在锁释放的时候,任何一个等待锁的线程都可以去枪锁。而sychronized是非公平锁。Lock两者都可以,默认是非公平,可以设置RenntrantLock(true)变为公平锁。

堆和栈的区别

程序内存分区中:

1.栈是由操作系统自动分配释放的,无需我们手动控制,堆的申请和释放是由程序员控制的。

2.空间大小不同,栈比堆小很多。

3.栈是一块连续的内存区域,堆不连续,所以堆会造成大量碎片。

4.生长方向不同,栈的内存地址由高到低,堆的内存地址由低到高。

数据结构中:

  1. 栈是一种线性表,这个线性表只允许在表的顶端进行插入和删除操作,特点是先进后出。
  2. 堆是一种树形结构,是一种特殊的完全二叉树。父节点的值大于子节点的值称为大顶堆,反之叫小顶堆。

深拷贝和浅拷贝

深拷贝:既能拷贝基本数据类型的值,又能拷贝实例对象的引用地址所指向的对象

浅拷贝:只能拷贝基本数据类型和实例对象的引用地址,不能复制引用地址所指向的对象。

值传递和引用传递

值传递:基本数据类型的赋值属于值传递,值传递传递的是实实在在的值,是传递原参数的拷贝,值传递后,实参传递给形参的值,形参发生改变而不影响实参。

引用传递:引用类型之间赋值属于引用传递,引用传递传的是对象的引用地址,也就是它本身。也就是将实参的地址传递给形参,形参改变了,实参当然也改变,因为它们指向的是相同的地址。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1035822.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号