Java基础面试题突击系列5

2023-05-26 0 979

Java基础面试题突击系列5

一、java散射

1、表述:

散射监督机制是在运转时,对任一两个类,都能晓得那个类的大部份特性和方式;对任两个第一类,都能初始化它的任一两个方式。在java中,如果取值类的英文名字,就能透过散射监督机制来赢得类的大部份重要信息。

2、这儿会加进散射监督机制?

jdbc是众所周知的散射

Class.forName(com.mysql.jdbc.Driver.class);//读取MySQL的驱动力类这是散射。如mybatis等架构采用散射同时实现的。

1)初始化某一第一类的 getClass()方式

3)采用 Class 类中的 forName()静态方式(最安全可靠/操控性最合适)

二、instanceof 关键字的作用

instanceof 严格来说是Java中的两个双目运算符,用来测试两个第一类是否为两个类的实例,用法为:

Java基础面试题突击系列5

其中 obj 为两个第一类,Class 表示两个类或者两个接口,当 obj 为 Class 的第一类,或者是其直接或间接子类,或者是其接口的同时实现类,结果result 都返回 true,否则返回false。注意:编译器会检查 obj 是否能转换成右边的class类型,如果不能转换则直接报错,如果不能确定类型,则透过编译,具体看运转时定。

int i = 0;

System.out.println(i instanceof Integer);//编译不透过 i必须是引用类型,不能是基本类型

System.out.println(i instanceof Object);//编译不透过

Integer integer = new Integer(1);

System.out.println(integer instanceof Integer);//true

//false ,在 JavaSE规范 中对 instanceof 运算符的规定是:如果 obj 为 null,那么将返回false。

System.out.println(null instanceof Object)

三、Java 序列化中如果有些字段不想进行序列化,怎么办?

对不想进行序列化的变量,采用 transient 关键字修饰。

transient 关键字的作用是:阻止实例中那些用此关键字修饰的的变量序列化;当第一类被反序列化时,被 transient 修饰的变量值不会被持久化和恢复。transient 只能修饰变量,不能修饰类和方式。

四、&和&&的区别?

&运算符有两种用法:(1)按位与;(2)逻辑与。

&&运算符是短路与运算。

逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是 true 整个表达式的值才是 true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是 false,右边的表达式会被直接短路掉,不会进行运算。

很多时候我们可能都需要用&&而不是&,例如在验证用户登录时判定用户名不是 null 而且不是空字符串,应当写为:username != null &&!username.equals(“”),二者的顺序不能交换,更不能用&运算符,因为第两个条件如果不成立,根本不能进行字符串的 equals 比较,否则会产生 NullPointerException 异常。注意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。

五、3*0.1 == 0.3返回值是什么

false,因为有些浮点数不能完全精确的表示出来。

在计算机中浮点数的表示是误差的。所以一般情况下不进行两个浮点数是否相同的比较。而是比较两个浮点数的差点绝对值,是否小于两个很小的正数。如果条件满足,就认为这两个浮点数是相同的。

六、用最有效率的方式计算 2 乘以 8?

2 << 3(左移 3 位相当于乘以 2 的 3 次方,右移 3 位相当于除以 2 的 3 次方)。

七、float f=3.4;是否正确?

不正确。3.4 是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换 float f =(float)3.4; 或者写成 float f =3.4F;。

八、Java 中的Math.round(11.5) 等于多少?Math.round(-11.5)等于多少?

Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加 0.5 然后进行向下取整。

九、switch 是否能作用在 byte 上,是否能作用在 long 上?

在 Java 5 以前,switch(expr)中,expr 只能是 byte、short、char、int。从 Java

5 开始,Java 中引入了枚举类型,expr 也能是 enum 类型,从 Java 7 开始,

expr 还能是字符串(String),但是长整型(long)在目前大部份的版本中都是不能的。

十、char 型变量中能不能存贮两个中文汉字?

char 类型能存储两个中文汉字。

因为 Java 中采用的编码是 Unicode(不选择任何特定的编码,直接采用字符在字符集中的编号,这是统一的唯一方式),一 个 char 类型占 2 个字节(16 比特),所以放两个中文是没问题的。

补充:采用 Unicode 意味着字符在 JVM 内部和外部有不同的表现形式,在 JVM内部都是 Unicode,当那个字符被从 JVM 内部转移到外部时(例如存入文件系统中),需要进行编码转换。所以 Java 中有字节流和字符流,以及在字符流和字节流之间进行转换的转换流,如 InputStreamReader 和 OutputStreamReader,这两个类是字节流和字符流之间的适配器类,承担了编码转换的任务;对 C 程序员来说,要完成这样的编码转换恐怕要依赖于 union(联合体/共用体)共享内存的特征来同时实现了。

十一、String s = new String(“xyz”);创建了几个字符串第一类?

两个第一类,两个是静态区的”xyz”,两个是用 new 创建在堆上的第一类。

十二、如何同时实现字符串的反转及替换?

能自己写同时实现也能采用 StringBuilder 或者 stringBuffer 的 reverse() 方式。

示例代码:

// StringBuffer reverse

StringBuffer stringBuffer = new StringBuffer();

stringBuffer. append(“abcdefg”);

System. out. println(stringBuffer. reverse()); // gfedcba

// StringBuilder reverse

StringBuilder stringBuilder = new StringBuilder();

stringBuilder. append(“abcdefg”);

System. out. println(stringBuilder. reverse());

有一道很常见的丘托韦是用递归同时实现字符串反转,代码如下所示:

public static String reverse(String originStr) {

if(originStr == null || originStr.length() <= 1)

return originStr;

return reverse(originStr.substring(1)) + originStr.charAt(0);

}

十三、怎样将 GB2312 编码的字符串转换为 ISO-8859-1 编码的字符串?

String s1 = “你好”;

String s2 = new String(s1.getBytes(“GB2312”), “ISO-8859-1”);

十四、阐述 final、finally、finalize 的区别

final:修饰符(关键字)有三种用法:如果两个类被声明为 final,意味着它不能再派生出新的子类,即不能被继承,因此它和 abstract 是反义词。将变量声明为 final,能保证它们在采用中不被改变,被声明为 final 的变量必须在声明时取值初值,而在以后的引用中只能读取不可修改。被声明为 final 的方式也同样只能采用,不能在子类中被重写。

finally:通常放在 try…catch…的后面构造总是执行代码块,这就意味着程序无论正常执行还是发生异常,这里的代码如果 JVM 不关闭都能执行,能将释放外部资源的代码写在 finally 块中。

finalize:Object 类中表述的方式,Java 中允许采用 finalize()方式在垃圾收集器将第一类从内存中清除出去之前做必要的清理工作。那个方式是由垃圾收集器在销毁第一类时初始化的,透过重写 finalize()方式能整理系统资源或者执行其他清理工作。

十五、是否能继承 String 类?

String 类是 final 类,不能被继承。

Java基础面试题突击系列5

#java丘托韦#

举报/反馈

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务