1.JDK 和 JRE 的区别
JDK包含JRE。JDK 用于开发 ,JRE 用于运行。
JDK (Java Development Kit)是Java开发工具包 ,用于开发 和编译java程序 。它包含了编译器 、调试器 等开发工具,以及Java的类库。
JRE (ava Runtime Environment)是Java运行时环境 ,用于运行已编译的 Java程序 。它包含Java虚拟机(JVM) 和运行时类库。
2."=="和equals()方法的区别和联系
"=="是运算符,而"equals()"是方法。
对于基本数据类型,"=="比较的是它们的值是否相等,而equals()不能用于基本数据类型的比较。
对于引用数据类型 ,"=="比较的是它们在内存中 的地址 是否相等,而"equals()"方法比较的是对象的内容是否相等。
在类中,如果equals()方法没有重写 ,默认 情况下equals()方法与"=="运算符是相同的 。重写 equals()方法可以实现 自定义 的比较逻辑。
Interger在常量池中的范围-128~127
3.hashcode()和 equals() 的关系
在Java中,hashCode()和equals()方法用于判断对象是否相等。
1.如果两个对象通过 equals() 比较 相等,它们的hashCode() 必须相同;但hashCode()相同,不保证对象一定相等(可能哈希冲突)。
2.hashCode()通常比equals()高效。
3.重写 equals() 时,也应重写 **hashCode()**以保持一致性。
这两个方法的正确实现对集合操作很重要。
4.final 在java 中的作用
final关键字在java中,可以优化代码执行效率。
final关键字可以修饰变量、方法和类。
修饰变量时,该变量是只能被赋值一次 的常量。
修饰方法时,该方法不能被子类重写。
修饰类时,该类不能被继承。
5.Math.round(-1.5)的结果是?
Math.round(-1.5)结果是-1,该方法对小数 四舍五入,-1.5四舍五入之后是-1。
6.Sring属于基本数据类型吗?Java中数据类型有哪些?
String不属于基本数据类型,它是对象。
数据类型分为 基本数据类型和引用数据类型。
1.基本 数据类型:分为四类八种。
整型 :byte (1 字节,-27 ~ 27-1)、short(2字节,-215 ~ 215-1)、
int (4 字节,-231 ~ 231-1)、long (8字节,-263 ~ 263-1)
浮点型 :float (4 字节,-2128 ~ 2128)、double (8字节,-21024 ~ 21024)
布尔型 :boolean (1字节)
字符型 :char (2字节)
2.引用 数据类型:(类 、数组 、接口 、枚举)
7.Java 中操作字符串都有哪些类?它们之间有什么区别?
String\StringBuffer\StringBuilder 三者之间的区别 (必会)
操作字符串 的类 有 String 、StringBuilder 和StringBuffer。
String是不可变 的,每次修改 都会生成 新的String对象(指针也会指向它) ,适合不经常修改的情况。
StringBuilder和StringBuffer是可变 的,可以在原有对象的基础上操作。
StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,所以StringBuilder 适用于单线程 环境,而StringBuffer 适用于多线程环境。
8. String str="i" 和 String str=new String("i") 一样吗?区别?
直接为String对象赋值和创建一个String对象的区别:
不一样,因为内存的分配方式不一样。
String str="i"的方式,Java 虚拟机会将其分配到常量池中;如果池中已存在则返回引用,否则创建新引用。
而 String str=new String("i") 则会被分到堆内存中。不论池中是否已存在相同字符串。
(首先在方法区加载这个类,然后再堆内存中创建对象,进行属性的初始化,不管池中是否存在相同的对象都会创建。)
对象创建流程:p对象(p引用指向的这个对象)
流程步骤:堆里放着的是对象
栈里的p就是对象的引用/对象名(好比一个人有多个名字,栈---代名词)
Person p = new Person("小倩",20);:
第一步:先在方法区加载Person类
第二步:new: 先在 堆 里面开辟带有地址的一个空间
第三步:先对属性默认初始化 看Person类里有几个属性(age 0,name null)
然后显示的初始化,Person类里有对age赋值(age 90,name null)引用数据类型不能直接存放在栈中,基本数据类型可以。
第四步:Person("小倩",20) 对构造器(对 对象的初始化,而不是创建对象)进行处理
①把构造器里的形参与实参对应,把小倩给n,最后给name属性。
此时,在方法区的常量池里开辟一个空间有一个地址,小倩就放在这里。
与此同时堆里面对应的 属性地址 里的name属性 的属性值 就有一个对应的地址,此时这个地址就指向它。
就把name的null 换成小倩了。
同比:
把20传给a,a赋给age,此时age就换成了20。
第五步:new Person("小倩",20)加载完成后
在栈里开辟空间时 空间里放着p
把堆里的地址返回给p,p就是对象的引用
p就指向了堆里的对应的空间
9.如何将字符串反转?
使用StringBuilder 或者StringBuffer 的**reverse()**方法。
10. string 常用的方法有哪些?(必会)
- indexOf():返回指定字符的索引。
- charAt():返回指定索引处的字符。
- replace():字符串替换。
- trim():去除字符串两端空白。
- split():分割字符串 ,返回一个分割后的字符串数组。左闭右开。
- getBytes():返回字符串的 byte 类型数组。
- length():返回字符串长度。
- toLowerCase():将字符串转成小写字母。
- toUpperCase():将字符串转成大写字母。
- substring():截取字符串。
- equals():字符串比较 。
- concat():连接字符串。
11.普通类和抽象类有哪些区别?
普通类可以(实例化)创建对象 。而抽象类只能被继承。
普通类不能包含抽象方法,抽象类有抽象和 非抽象的方法。
子类继承 普通类时,可以不需要实现 父类的方法。而继承抽象类时必须实现父类的抽象方法。
12.抽象类能使用 final 修饰吗?
final 不能修饰抽象类,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,编辑器也会提示错误信息。
13.接口和抽象类有什么区别?
接口、抽象类 都是用来实现多态 和 制定规范的。
区别有:
一个类 只能继承一个 抽象类 ,但可以实现多个 接口 。
抽象类 可以有构造方法、 抽象 和非抽象的方法, 但接口 只能有抽象方法。
抽象类中的方法 可以有任意修饰符,而 接口中的方法默认使用public修饰。
14.java中IO流分为几种?
按功能 来分:输入流 (input)、输出流(output)。
按类型 来分:字节流 和字符流。
字节流和字符流的区别是:
字节流按 8 位传输 以字节为单位输入输出数据,
字符流按 16 位 传输以字符为单位输入输出数据。
15.BIO、NIO、AIO 有什么区别?
- BIO:Block IO 同步阻塞式IO,就是我们平常使用的传统 IO,
它的特点是模式简单 使用方便 ,并发处理能力 低。
- NIO:Non IO 同步非阻塞 IO,是传统 IO 的升级,
客户端 和服务器端 通过 Channel(通道 )通讯 ,实现了多路复用。
- AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,
实现了异步非堵塞 IO ,
异步 IO 的操作 基于事件 和回调机制。
16.Files的常用方法有哪些?
Files类是 java.nio.file包下用于操作文件 和目录 的工具类。
- Files. exists():检测文件路径是否存在。
- Files. createFile():创建文件。
- Files. createDirectory():创建文件夹。
- Files. delete():删除一个文件或目录。
- Files. copy():复制文件。
- Files. move():移动文件。
- Files. size():查看文件个数。
- Files. read():读取文件
- Files.write():写入文件