Java面试题总结
1.基本类型之间的比较,应该会将低精度类型自动转为高精度类型再比较。
long x=42; float f1[]=new float[2]; f1[0]=42.0f; x==f1[0]; //true
2.a=a+b 和a+=b之间的区别
(1)性能方面:a=a+b是加法运算 需要两次寻找地址而a+=b是增量运算有寄存器优先时 只有一次地址查找。效率方面后者略高于前者 基于现在计算机的发展可忽略不计。
(2)可读性方面:前者比后者更容易理解
(3)数据类型方面:
byte a=1; a= a+4 ; //类型不匹配:不能从int转换为byte //原因:a是byte类型数据,4默认是int类型,a+4后默认转换成int类型,再赋值给a时相当于把int类型赋值给byte类型的数据,所以会报错。 a += 4; // 不会报错 //“+=”是java中的一个运算符,而不是两个,所以在运算时 会进行自动类型转换。所以在编译时没有报错。 System.out.println(a);
在两个变量的数据类型一样时:a+=b 和a=a+b 是没有区别的。但是当两个变量的数据类型不同时,就需要考虑一下数据类型自动转换的问题了。也就是涉及到精度了。
3.System是java.lang中的类,out为System中的一个静态成员,out是java.io.PrintStream类的对象,而println()是java.io.PrintStream类的方法,所有可以调用类.静态方法.println()方法。
4.泛型只是提高了数据传输安全性,并没有改变程序运行的性能
使用泛型的好处 (1)类型安全。 泛型的主要目标是提高 Java 程序的类型安全。通过知道使用泛型定义的变量的类型限制,编译器可以在一个高得多的程度上验证类型假设。没有泛型,这些假设就只存在于程序员的头脑中(或者如果幸运的话,还存在于代码注释中)。(2)消除强制类型转换。 泛型的一个附带好处是,消除源代码中的许多强制类型转换。这使得代码更加可读,并且减少了出错机会。
(3)潜在的性能收益。 泛型为较大的优化带来可能。在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。但是更多类型信息可用于编译器这一事实,为未来版本的 JVM 的优化带来可能。由于泛型的实现方式,支持泛型(几乎)不需要 JVM 或类文件更改。所有工作都在编译器中完成,编译器生成类似于没有泛型(和强制类型转换)时所写的代码,只是更能确保类型安全而已。
5.Java数据库连接库JDBC用到桥接模式
桥接模式:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
对于jdbc技术来说,它解耦了业务与数据库通信协议这两个纬度之间的关系,所以这两个纬度之间的关系就需要一个桥,即Driver,至于DriverManager把这个关系接到哪里就是运行时的事情了。
微观上,从connection的创建来看,它更像一个抽象工厂模式,特定的Driver创建对应的connection。
宏观上,从业务代码与connection的关系来看,关键点在于一个sql怎么转化为对应的通信协议,就属于桥接。
6.throws是写在方法上,申明要抛出的异常。throw是抛出异常。
7.局部内部类是放在代码块或方法中的,不能有访问控制修饰符,且不能用static修饰