Java口试笔试高频题目详解
一、静态变量和实例变量有啥不一样
区别角度静态变量实例变量内存分配类第一次加载时分配内存,位于方法区对象实例化时分配内存,位于堆中生存周期类加载后一直存在,险些不被垃圾回收取决于对象生命周期,对象失去引用后可被垃圾回收调用方式使用类名直接访问(类名.静态变量名)需要通过对象实例访问(对象实例.实例变量名)所属关系属于类对象,所有实例共享属于详细类实例化后的对象,各对象独立拥有共享方式全局唯一一份,写操作会影响其他访问对象独占,只有对象的持有者才可以举行实例变量的读写访问访问限制静态成员不能访问非静态成员非静态成员可以访问静态成员 二、==、equals 和 hashCode 到底有啥不同
区别角度==equalshashCode作用比力两个对象的内存地址是否相同比力两个对象的值是否相同返回对象的哈希码,用于哈希集合中快速定位对象使用场景判断两个引用是否指向同一个对象判断两个对象的值是否相称在哈希表中用于快速定位对象相互关系假如两个对象equals相称,它们的hashCode必须相称;反之不肯定成立假如两个对象equals不相称,它们的hashCode大概相称,也大概不等假如两个对象hashCode相称,它们的equals不肯定相称;反之肯定不相称 三、深复制和浅复制有啥区别
区别角度浅复制深复制复制范围只复制对象自己,不复制引用对象完全复制对象及其引用的所有对象对象关联复制后的对象与原对象共享引用对象复制后的对象与原对象无关联实现难度实现简单,Java默认提供clone()方法实现复杂,通常需要手动实现或借助工具(如JSON序列化与反序列化)内存占用内存占用相对较小,由于共享引用对象内存占用较大,由于完全复制了所有对象使用场景对象之间可以共享引用对象,且不需要完全独立时使用需要完全独立的对象副本,且不希望对象之间有任何关联时使用 四、this 和 super 关键字有啥不一样
区别角度thissuper作用代表当前实例对象代表父类对象访问属性/方法访问本类属性或方法,若本类无则查找父类直接访问父类属性或方法构造方法使用构造方法中调用本类其他构造器,必须位于首行构造方法中调用父类构造器,必须位于首行特别用法可作为方法返回值返回当前对象无此类用法 五、Java代码执行顺序示例
- class C1 {
- static { System.out.println("C1A"); }
- { System.out.println("C1B"); }
- public C1() { System.out.println("C1C"); }
- }
- class C2 extends C1 {
- static { System.out.println("C2A"); }
- { System.out.println("C2B"); }
- public C2() { System.out.println("C2C"); }
- }
- public class Main {
- public static void main(String[] args) {
- new C2();
- }
- }
复制代码 执行结果:C1A C2A C1B C1C C2B C2C
六、为啥浮点型计算不准确,咋整
1. 原因
2. 解决办法
- 用BigDecimal来计算,它能准确到小数点后许多位。
七、Java虚拟机(JVM)是啥玩意儿
1. 类加载子系统
2. 运行时数据区
- 线程共享区:堆(存对象)和方法区(存类信息)。
- 线程私有区:虚拟机栈(存方法调用信息)、步伐计数器(记载执行位置)、本地方法栈(存本地方法调用信息)。
3. 执行引擎
八、Java垃圾回收算法有啥
1. 标记-清除算法
2. 复制算法
- 把内存分成两块,用一块,回收时复制存活对象到另一块。
3. 标记-整理算法
- 标记垃圾对象,把存活对象往一边挪,清算界限外的垃圾。
九、Java内存泄露有啥场景
1. 静态集合类
2. 未释放的毗连/IO
3. 不合理的变量作用域
4. 未设置过期的缓存
5. 交叉引用/循环引用
6. 单例模式
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |