java进阶知识

java进阶知识

1. 为什么要使用final修设String类?new String(“abc”)创建了几个对象?

·安全性问题:避免String类被继承,防止它的方法被重写,避免经常给操作系统打交道的String类被篡改。(String类内部中的好多方法的实现都不是java编程语言本身编写的,而是调用的操作系统本地的API,这种类是非常底层的,和操作系统交流频繁的,所以应该避免它的方法被重写,防止给操作系统带来安全问题。)

·效率问题:String属于高频率引用类型,避免其被继承,可以提高效率。

如果abc这个字符串常量不存在,则创建两个对象,分别是abc这个字符串常量,以及new String这个实例对象。如果存在,则创建一个对象。

(在JVM1.8中,内存划分为堆、程序计数器、本地方发栈、方法区(元空间)、虚拟机栈。)

当我们通过Object o=new Object()创建一个对象时,在JVM中会分配一块内存用来存储该对象的信息,实现原理如下图所示。
在main方法中,创建了一个局部变量o,当main方法运行时,首先会把main方法压入到栈帧中,接着执行该方法的Object o =new Object()创建对象。
1.在局部变量表中创建一个局部变量o。
2. 在堆内存中分配一块内存地址,用来存储object对象。
3. 变量o指向堆内存中的内存地址。
在这里插入图片描述

在这里插入图片描述
2. io与nio的区别
·面向流与面向缓冲区
·阻塞与非阻塞
·选择器(selector)

NIO(JDK1.4)模型是一种同步非阻塞IO,主要有三大核心部分:Channel(通道),Buffer(缓冲区), Selector(多路复用器)。传统IO基于字节流和字符流进行操作,而NIO基于Channel和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(多路复用器)用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。
NIO和传统IO(一下简称IO)之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值