写点什么

Java 常见的 30 个误区与细节!,java 面试刷题

用户头像
极客good
关注
发布于: 刚刚

11 float 类型可以保留 7~8 个有效数字,而 double 类型可以保留 15~16 个有效数字,因而当 int 类型或 long 类型数值多于 double 或 float 地有效数字时,该值的一些最低有效位就会丢失,从而造成精度丢失,这时,就会采用 IEEE754 最近舍入模式,提取与该整型值最接近的浮点值。尽管整型向浮点型的转换属于扩展转换,但当数值很大或很小(绝对值很大)时,就会产生一定的精度丢失。


12 i+++j如何计算?(这个问题在 C/C++)中讨论是没有多大意义的,因为 C/C++依赖于实现的硬件结构,不同的环境结果也会不同。不过在 Java 中,这个结果是固定的,不受其运行的硬件环境与平台的影响) 答:根据贪心规则,前置++优于后置++,结果是(i++)+j


13??i++和++i 其实都是先+1,再赋值。++i,没什么好说的;i++,以j=i++;为例在底层的实现是:temp = i;i = i + 1; j = temp; 所以,i=15;i=i++;这个表达式的结果是 15.(因为加一之后又执行了一次赋值,从 16 变回 15)


14 ? +0 与-0 在浮点类型变量存储中,符号位是不同的。当-0 和+0 参与浮点类型的相关运算(例如相除与求余运算)时,可以产生不同的结果。


15 ? 浮点的相除与求余运算不同与整型的相除与求余运算,当除数为 0 时,浮点运算不会产生ArithmeticException异常。


16 String类是非可变类,其对象一旦创建,就不可销毁。String类那些看似修改字符序列的方法实际上都是返回新创建的String对象,而不是修改自身对象。


17 ? 由于String对象是不可改变的,因此具有线程安全性,可以自由地实现共享。


18 ? 在String类内部,是使用一个字符数组(char[])来维护字符序列的。String的最大长度也就是字符数组的最大长度,理论上最大长度为 int 类型的最大值,即 2147483647.在实际中,一般可获取的最大值小于理论最大值。


19 main()方法在表现行为上,与其他方法基本相同,可以重载,由其他方法调用,继承,隐藏,也可以抛出异常,带有类型参数。我们也可以在一个程序中通过反射来调用main方法(或其他方法)。


20 当两个或多个方法的名称相同,而参数列表不同时,这几个方法就构成了重载。重载方法可以根据参数列表对应的类型与参数的个数来区分,但是,参数的名称、方法的返回类型,方法的异常列表与类型参数不能作为区分重载方法的条件。


21?? 究竟选择哪个方法调用,顺序是这样的:


  • 在第一阶段,自动装箱(拆箱)与可变参数不予考虑,搜索对应形参类型可以匹配实参类型并且形参个数与实参个数相同的方法;

  • 如果在步骤一不存在符合条件的方法,在第二阶段,自动装箱与拆箱将会执行。

  • 如果在步骤二中


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


不存在符合条件的方法,在第三阶段,可变参数的方法将会考虑。


  • 如果 3 个阶段都没有搜索到符合条件的方法,将会产生编译错误。如果如何条件的方法多于一个,将会选择最明确的方法。最明确的方法定义为:如果 A 方法的形参列表类型对应的都可以赋值给 B 方法的形参列表类型,则 A 方法比 B 方法明确。如果无法选出最明确的方法,则会产生编译错误。


22 ? 重写和隐藏的本质区别是:重写是动态绑定的,根据运行时引用所指向对象的实际类型来决定调用相关类的成员。而隐藏是静态绑定的,根据编译时引用的静态类型来决定调用的相关成员。换句话说,如果子类重写了父类的方法,当父类的引用指向子类对象时,通过父类的引用调用的是子类方法。如果子类隐藏了父类的方法(成员变量),通过父类的引用调用的仍是父类的方法(成员变量)。


23 ? 构造器是递归调用的,子类的构造器会调用父类的构造器,直到调用 Object 类的构造器为止。


24 ? 构造器没有创建对象,构造器是使用 new 创建对象时由系统调用的,用来初始化类的实例成员。从顺序上说,先是创建对象,然后再调用构造器的。(构造器并没有产生新的对象)


25 ? 默认的构造器不为空,该构造器会调用父类的无参构造器,并可能执行实例成员变量的初始化。所以,默认的构造器至少调用了父类的构造器,它做的工作还可能更多,包括实例变量声明初始化与实例初始化块,都是在构造器中执行的。


26 ? 当==或!=运算符的两个操作数的类型一个是基本数据类型,另一个是包装类引用类型时,将引用类型拆箱转换为基本数据类型,然后比较两个基本数据类型的值是否相等。


27 ? 在 Java 中,数组也是类,数组声明的引用变量指向数组类型的对象。所有的数组都继承Object类,并且实现了java.lang.Cloneablejava.io.Serializable接口。数组的成员包括变量length(隐式存在)与从 Object 类继承的成员。CloneableSerializable是两个标记的接口,这两个接口中没有显式声明任何成员。


28 ? 接口是完全抽象的设计,不能实例化。使 A 用new方式创建的借口类型,实际上是创建了一个匿名类,该匿名类实现了接口类型。


29 ? 如果两个接口声明了相同的变量 x,则当某接口同时继承这两个接口,或者某类同时实现这两个接口时,通过简单名称访问会产生编译错误。

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
Java 常见的 30 个误区与细节!,java面试刷题