预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10
亲,该文档总共11页,到这已经超出免费预览范围,如果喜欢就直接下载吧~
如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
Java问答面试题Java问答面试题引导语:应聘Java相关岗位的工作都会面对怎么样的考题考察自己呢?以下是小编整理的Java问答面试题,欢迎参考阅读!Q.下面的代码片段中,行A和行B所标识的代码有什么区别呢?publicclassConstantFolding{staticfinalintnumber1=5;staticfinalintnumber2=6;staticintnumber3=5;staticintnumber4=6;publicstaticvoidmain(String[]args){ intproduct1=number1*number2; //lineA intproduct2=number3*number4; //lineB}}A.在行A的代码中,product的值是在编译期计算的,行B则是在运行时计算的。如果你使用Java反编译器(例如,jd-gui)来反编译ConstantFolding.class文件的话,那么你就会从下面的结果里得到答案。publicclassConstantFolding{staticfinalintnumber1=5;staticfinalintnumber2=6;staticintnumber3=5;staticintnumber4=6;publicstaticvoidmain(String[]args){intproduct1=30;intproduct2=number3*number4;}}常量折叠是一种Java编译器使用的优化技术。由于final变量的值不会改变,因此就可以对它们优化。Java反编译器和javap命令都是查看编译后的代码(例如,字节码)的利器。Q.你能想出除了代码优化外,在什么情况下,查看编译过的代码是很有帮助的?A.Java里的泛型是在编译时构造的,可以通过查看编译后的class文件来理解泛型,也可以通过查看它来解决泛型相关的问题。Q.下面哪些是发生在编译时,运行时,或者两者都有?A.方法重载:这个是发生在编译时的。方法重载也被称为编译时多态,因为编译器可以根据参数的类型来选择使用哪个方法。publicclass{publicstaticvoidevaluate(Stringparam1);//method#1publicstaticvoidevaluate(intparam1);//method#2}如果编译器要编译下面的语句的话:evaluate(“MyTestArgumentpassedtoparam1”);它会根据传入的参数是字符串常量,生成调用#1方法的字节码方法覆盖:这个是在运行时发生的。方法重载被称为运行时多态,因为在编译期编译器不知道并且没法知道该去调用哪个方法。JVM会在代码运行的时候做出决定。publicclassA{publicintcompute(intinput){ //method#3return3*input;}}publicclassBextendsA{@Overridepublicintcompute(intinput){ //method#4return4*input;}}子类B中的compute(..)方法重写了父类的compute(..)方法。如果编译器遇到下面的代码:publicintevaluate(Areference,intarg2){intresult=reference.compute(arg2);}编译器是没法知道传入的参数reference的类型是A还是B。因此,只能够在运行时,根据赋给输入变量“reference”的对象的类型(例如,A或者B的实例)来决定调用方法#3还是方法#4.泛型(又称类型检验):这个是发生在编译期的。编译器负责检查程序中类型的正确性,然后把使用了泛型的代码翻译或者重写成可以执行在当前JVM上的非泛型代码。这个技术被称为“类型擦除“。换句话来说,编译器会擦除所有在尖括号里的类型信息,来保证和版本1.4.0或者更早版本的JRE的兼容性。ListmyList=newArrayList(10);编译后成为了:ListmyList=newArrayList(10);注解(Annotation):你可以使用运行时或者编译时的`注解。publicclassBextendsA{@Overridepublicintcompute(intinput){ //method#4return4*input;}}@Override是一个简单的编译时注解,它可以用来捕获类似于在子类中把toString()写成tostring()这样的错误。在Java5中,用户自定义的注解可以用注解处理工具(AnotationProcessToo