拆箱装箱
Java中的自动拆装箱_骐骥一跃,不能十步;驽马十驾,功在不舍。-CSDN博客
自动装箱的缓存
自动装箱与缓存_骐骥一跃,不能十步;驽马十驾,功在不舍。-CSDN博客
String、StringBuffer、StringBuilder区别
String、StringBuffer和StringBuilder的区别_骐骥一跃,不能十步;驽马十驾,功在不舍。-CSDN博客
字符串常量池和String类的 intern()方法
字符串常量池和String类的intern()方法_骐骥一跃,不能十步;驽马十驾,功在不舍。-CSDN博客
String str=new String("a"+"b")创建了几个对象
4个 "a"在字符串常量池创建,这是第一个对象 "b"在字符串常量池创建,这是第二个对象 “a”+"b"组合"ab"在字符串常量池创建,这是第三个对象 new String(),在堆中分配内存,里面存着这字符串"ab"在字符串常量池中的地址,这是第四个对象 str 存储在栈中,里面存储着指向堆中new String()的地址 如果以 String str1=“ab"这种方式创建字符串,则只产生一个对象,即字符串常量池中的"ab”,栈中的str中存储着直接指向字符串常量池中的"ab"的地址值。
如果以String str2=“a”+“b”;这种方式创建字符串,同样是只产生一个对象,java在编译时会将a,b自动转换成ab,而不会经过加法的过程,也就是说str1=str2.
ps:
Strin str = new String(“a”) + new String(“b”) 在堆中创建了三个字符串对象(a字符串对象,b字符串对象,ab字符串对象),在堆中的常量池中创建了2个字符串对象(a字符串对象,b字符串对象),一共创建了5个字符串对象。
泛化、实现、依赖、关联、组合、聚合
泛化,实现,依赖,关联(聚合,组合)_骐骥一跃,不能十步;驽马十驾,功在不舍。-CSDN博客
反射
Java 反射 -超详细讲解(附源码)_lililuni的博客-CSDN博客_反射java
== 和 equals 的区别
== 和 equals 的区别是什么_骐骥一跃,不能十步;驽马十驾,功在不舍。-CSDN博客
hashCode与equals
hashCode与equals_骐骥一跃,不能十步;驽马十驾,功在不舍。-CSDN博客
动态代理
Java动态代理_骐骥一跃,不能十步;驽马十驾,功在不舍。-CSDN博客
什么是 java 序列化?什么情况下需要序列化?
简单说就是为了保存在内存中的各种对象的状态(也就是实例变量,不是方法),并且可以把保存的对象状态再读出来。虽然你可以用你自己的各种各样的方法来保存object states,但是Java给你提供一种应该比你自己好的保存对象状态的机制,那就是序列化。
什么情况下需要序列化:
a)当你想把的内存中的对象状态保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
throw 和 throws 的区别?
throws是用来声明一个方法可能抛出的所有异常信息,throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理。而throw则是指抛出的一个具体的异常类型。
final、finally、finalize 有什么区别?
- final可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能被重写、修饰变量表示该变量是一个常量不能被重新赋值。
- finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代码方法finally代码块中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
- finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾回收器来调用,当我们调用System的gc()方法的时候,由垃圾回收器调用finalize(),回收垃圾。
JDK 和 JRE 有什么区别?
- JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。
- JRE:Java Runtime Environment 的简称,java 运行环境,为 java 的运行提供了所需环境。
具体来说 JDK 其实包含了 JRE,同时还包含了编译 java 源码的编译器 javac,还包含了很多 java 程序调试和分析的工具。简单来说:如果你需要运行 java 程序,只需安装 JRE 就可以了,如果你需要编写 java 程序,需要安装 JDK。
final 在 java 中有什么作用?
- final 修饰的类叫最终类,该类不能被继承。
- final 修饰的方法不能被重写。
- final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。
java 中的 Math.round(-1.5) 等于多少?
加0.5向下取整,等于 -1。
如何将字符串反转?
使用 StringBuilder 或者 stringBuffer 的 reverse() 方法。
// StringBuffer reverse
StringBuffer stringBuffer = new StringBuffer();
stringBuffer.append("abcdefg");
System.out.println(stringBuffer.reverse()); // gfedcba
// StringBuilder reverse
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("abcdefg");
System.out.println(stringBuilder.reverse()); // gfedcba
String 类的常用方法都有那些?
- indexOf():返回指定字符的索引。
- charAt():返回指定索引处的字符。
- replace():字符串替换。
- trim():去除字符串两端空白。
- split():分割字符串,返回一个分割后的字符串数组。
- getBytes():返回字符串的 byte 类型数组。
- length():返回字符串长度。
- toLowerCase():将字符串转成小写字母。
- toUpperCase():将字符串转成大写字符。
- substring():截取字符串。
- equals():字符串比较。
抽象类必须要有抽象方法吗?
不需要,抽象类不一定非要有抽象方法。
abstract class Cat {
public static void sayHi() {
System.out.println("hi~");
}
}
上面代码,抽象类并没有抽象方法但完全可以正常运行。
普通类和抽象类有哪些区别?
- 普通类不能包含抽象方法,抽象类可以包含抽象方法。
- 抽象类不能直接实例化,普通类可以直接实例化。
抽象类能使用 final 修饰吗?
不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类
接口和抽象类有什么区别?
- 实现:抽象类的子类使用 extends 来继承;接口必须使用 implements 来实现接口。
- 构造函数:抽象类可以有构造函数;接口不能有。
- main 方法:抽象类可以有 main 方法,并且我们能运行它;接口不能有 main 方法。
- 实现数量:类可以实现很多个接口;但是只能继承一个抽象类。
- 访问修饰符:接口中的方法默认使用 public 修饰;抽象类中的方法可以是任意访问修饰符。
java 中 IO 流分为几种?
按功能来分:输入流(input)、输出流(output)。
按类型来分:字节流和字符流。
字节流和字符流的区别是:字节流按 8 位传输以字节为单位输入输出数据,字符流按 16 位传输以字符为单位输入输出数据。
https://blog.csdn.net/sinat_37064286/article/details/86537354
各种读写文件的方式
【Java基础-3】吃透Java IO:字节流、字符流、缓冲流_云深不知处-CSDN博客_字节流字符流缓冲流
BIO、NIO、AIO 有什么区别?
- BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。
- NIO:New IO 同步非阻塞 IO,是传统 IO 的升级,客户端和服务器端通过 Channel(通道)通讯,实现了多路复用。
- AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。
完全理解同步/异步与阻塞/非阻塞
完全理解同步/异步与阻塞/非阻塞 - 知乎随便翻开一本Node.js入门书籍的绪论部分,一般都可以看到「异步」、「单线程」、「非阻塞」这样的字眼。因其采用异步非阻塞的模型而构建,Node.js得以能充分利用CPU资源,具有极强的处理高并发请求的能力。 可是到…https://zhuanlan.zhihu.com/p/22707398I/O多路复用—— select、poll和epoll
零拷贝(Zero-copy)及其应用详解
Files的常用方法都有哪些?
- Files.exists():检测文件路径是否存在。
- Files.createFile():创建文件。
- Files.createDirectory():创建文件夹。
- Files.delete():删除一个文件或目录。
- Files.copy():复制文件。
- Files.move():移动文件。
- Files.size():查看文件个数。
- Files.read():读取文件。
- Files.write():写入文件。