行业知识
[Java面试]JavaSE知识回顾
���迎来到@边境矢梦°的csdn博文
本文主要梳理Java面试中JavaSE中会涉及到的知识点
我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生
喜欢的朋友可以关注一下,下次更新不迷路
目录
变量
基本数据类型与包装类型
运算符
️数组
方法
面向对象编程
面对象和面向过程的区别
面向对象三大特征
封装
继承
多态
接口和抽象类的共同点和区别
拷贝的区别
Object
Object 类的常见方法有哪些?
== 和 equals() 的区别
hashCode() 方法
hashCode() 和 equals()
toString()
finalize()
String
String不可变的原因
Java SE(Java Platform,Standard Edition): Java 平台标准版,Java 编程语言的基础,它包含了支持 Java 应用程序开发和运行的核心类库以及虚拟机等核心组件。Java SE 可以用于构建桌面应用程序或简单的服务器应用程序。
变量
变量的概念 : 变量相当于内存中一个数据存储空间 的表示,你可以把变量看做是一个房间的门牌号,通过 门牌号 我们可以找到房间,而通过变量名可以访问到变量( 值 ) 。| 成员变量 | 局部变量 | |
| 语法方式 | 从语法形式上看,成员变量是属于类的,可以被 public,private,static 等修饰符所修饰. | 局部变量是在代码块或方法中定义的变量或是方法的参数, 局部变量不能被访问控制修饰符及 static 所修饰;final可以修饰. |
| 存储方式 | 存储在对象的内存空间中, 对空间中. | 存储在栈内存中的局部变量表 |
| 生存空间 | 随着对象的创建而存在,随着对象的销毁而消亡 | 随着方法的调用而自动生成,随着方法的调用结束而消亡 |
| 默认值 | 成员变量如果没有被赋初始值,则会自动以类型的默认值而赋值 | 不会自动赋值 |
基本数据类型与包装类型
Java 中有 8 种基本数据类型,分别为:
- 6 种数字类型:
- 4 种整数型:byte、short、int、long
- 2 种浮点型:float、double
- 1 种字符类型:char
- 1 种布尔型:boolean。
基本数据类型
基本类型 位数 字节 默认值 取值范围 byte 8 1 0 -128~127 short 16 2 0 -32768(-2^15)~32767(2^15-1) int 32 4 0 -2147483648(-2^31)~2147483647(2^63 - 1) long 64 8 0L -9223372036854775808(-2^63) ~ 9223372036854775807(2^63 -1) char 16 2 'u0000'(Unicode编码) 0 ~ 65535(2^16 - 1) float 32 4 0f 1.4E-45 ~ 3.4028235E38 double 64 8 0.0 4.9E-324 ~ 1.7976931348623157E308 boolean 1 false true, false 取值范围减 1 的原因 : 因为在二进制补码表示法中,最高位是用来表示符号的(0 表示正数,1 表示负数),其余位表示数值部分。
所以,如果我们要表示最大的正数,我们需要把除了最高位之外的所有位都设为 1。
如果我们再加 1,就会导致溢出,变成一个负数。
所以就是最高位为1, 再减 1 , 得到的就是取值范围。
基本数据类型与包装类型的区别
基本数据类型 包装类型 用途 较少使用(工程中) 较多使用(泛型中也可以使用) 存储方式 基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中;基本数据类型的成员变量(未被 static 修饰 )存放在 Java 虚拟机的堆中。
包装类型属于对象类型,几乎所有对象实例都存在于堆中。(如果是在缓存范围的,就在方法区中的运行时常量池中) 占用空间 非常小 引用+实例所占的空间 默认值 基本类型有默认值且不是 null。 成员变量包装类型不赋值就是 null 比较方式 对于基本数据类型来说,== 比较的是值。 对于包装数据类型来说,== 比较的是对象的内存地址。所有整型包装类对象之间值的比较,全部使用 equals() 方法。 为什么说是几乎所有对象实例都存在于堆中呢? 这是因为 HotSpot 虚拟机引入了 JIT 优化之后,会对对象进行逃逸分析,如果发现某一个对象并没有逃逸到方法外部,那么就可能通过标量替换来实现栈上分配,而避免堆上分配内存。
⚠️ 注意:基本数据类型存放在栈中是一个常见的误区! 基本数据类型的存储位置取决于它们的作用域和声明方式。如果它们是局部变量,那么它们会存放在栈中;如果它们是成员变量,那么它们会存放在堆中。
包装类型的缓存机制
Java 基本数据类型的包装类型的大部分都用到了缓存机制来提升性能。
Byte,Short,Integer,Long 这 4 种包装类默认创建了数值 [-128,127] 的相应类型的缓存数据,Character 创建了数值在 [0,127] 范围的缓存数据,Boolean 直接返回 True or False。
如果超出对应范围仍然会去创建新的对象,缓存的范围区间的大小只是在性能和资源之间的权衡。
两种浮点数类型的包装类 Float, Double 并没有实现缓存机制。
public static Character valueOf(char c) { if (c {值 1,值 2..},{值 1,值 2..},{值 1,值 2..}}