Java基础--经典问题--知识点

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 三者之间的区别 (必会)

操作字符串StringStringBuilderStringBuffer

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 常用的方法有哪些?(必会)

  1. indexOf():返回指定字符的索引。
  2. charAt():返回指定索引处的字符。
  3. replace():字符串替换。
  4. trim():去除字符串两端空白。
  5. split():分割字符串 ,返回一个分割后的字符串数组。左闭右开。
  6. getBytes():返回字符串的 byte 类型数组。
  7. length():返回字符串长度。
  8. toLowerCase():将字符串转成小写字母。
  9. toUpperCase():将字符串转成大写字母。
  10. substring():截取字符串。
  11. equals():字符串比较 。
  12. 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包下用于操作文件目录工具类

  1. Files. exists():检测文件路径是否存在。
  2. Files. createFile():创建文件。
  3. Files. createDirectory():创建文件夹。
  4. Files. delete():删除一个文件或目录。
  5. Files. copy():复制文件。
  6. Files. move():移动文件。
  7. Files. size():查看文件个数。
  8. Files. read():读取文件
  9. Files.write():写入文件
相关推荐
一点媛艺2 小时前
Kotlin函数由易到难
开发语言·python·kotlin
姑苏风2 小时前
《Kotlin实战》-附录
android·开发语言·kotlin
奋斗的小花生3 小时前
c++ 多态性
开发语言·c++
魔道不误砍柴功3 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
闲晨3 小时前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
老猿讲编程3 小时前
一个例子来说明Ada语言的实时性支持
开发语言·ada
Chrikk4 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*4 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue4 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man4 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang