java笔试经典(题及答案)2013.doc
Java笔试经典(基础部分及答案和分析)1、一个“.java“源文件中是否可以包括多个类(不是内部类)?有什么限制?7答:可以包括多个类,但是最多只能有一个public修饰的类。2、Java有没有goto?7答:java中有goto,但只是保留字,用来兼容以前版本的再无其他用途。3、说说s1=s1+1;有什么错?shorts1=1;s1+=1;有什么错?9答:前一个错了,s1=s1+1处s1+1会使short型s1转化成int型,但是在将int型的值赋给short型的变量将会报错。后一个是对的,因为+=是一个复合型运算符,复合赋值运算符会自动地将运算结果转型为其左操作数的类型,不会对s1的类型进行改变。7、char型变量中能不能存贮一个中文汉字?为什么?9答:char型的变量可以存贮一个中文字。应为Java是用Unicode来编码的,而Unicode编码是用16个字节来存贮char型的变量的,而一个汉字正好是用16个字节来存储的,所以可以。8、用最有效率的方法算出2乘以8等於几?9答:2<<3,将2左移3位。因为位运算是cpu直接运算的,所以效率最高。9、请设计一个一百亿的计算器9答:10、使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?11答:final关键字修饰一个变量是引用不能变,引用的对象还是可以改变的。如:StringBufferstb=newStringBuffer(“abc”);Stb=newStringBuffer(“bcd”);//会报错。但是运行stb.append(“abdeae”);不会报错。11、“==“和equals方法究竟有什么区别?11答:==是专门用来比较两个变量是否相等的,也就是比较两个变量对应的内存中的数值是否相等。用来比较基本类型的数据是否相等,两个引用是否相等(是否指向同一个对象),只能用“==”。对于equal方法,主要是用来比较对象是否相等。在Object类里的equal()方法没有重写的情况下,equal和==是一样的。但是重写后equal()是指的连个对象是否相等,即其对应的数据以及类型是否相等(hashCode()是否相等)。12、静态变量和实例变量的区别?12答:在语法定义上看:静态变量在定义时需要加上static,而实例变量不需要。在程序运行上看:实例变量是属于一个实例的,当一个实例创建时系统才为之分配内存空间。而静态变量是属于一个类的,当程序加载到该类字节码时,就会开辟对应的静态空间,就可以是使用静态变量了,而不需要创建实例。实例变量需要通过对象才能使用,但是静态变量直接通过类来就还可以使用了。13、是否可以从一个static方法内部发出对非static方法的调用?12答:不能,一个static方法只能调用static方法。应为非静态方法是通过实例来调用的,使用前必须先创建实例。但是static方法但调用可以不用创建实例的,所以在static方法中使用非static方法时,该非static方法没有创建对应的实力,这时是会报错的。14、Integer与int的区别13答:int是Java提供的8中原始数据类型之一。Java为每个原始数据类型都提供了封装类,Integer是Java为int提供的封装类。Int的默认值为0,而integer的默认值为null,即integer可以区分null和0的区别,int则无法表示处为复制的情况,例如想要表达出没有参加考试和参加了考试但是成绩为0分的区别,只能用Integer了。在JSP开发中Integerde默认值为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果为0,所以,int不适合作为web层的表单数据的类型。在Hibernate中,如果将OID定义为Integer类型,那么Hibernate就可以根据其值是否为null而判断一个对象是否是临时的,如果将OID定义为了int类型,还需要在hbm映射文件中设置其unsaved-value属性为0。15、Math.round(11.5)等於多少?Math.round(-11.5)等於多少?13答:12和-11。Math类中提供了三个与取整有关的方法:ceil、floor、round,这些方法的作用与它们的英文名称的含义相对应,例如,ceil的英文意义是天花板,该方法就表示向上取整,Math.ceil(11.3)的结果为12,Math.ceil(-11.3)的结果是-11;floor的英文意义是地板,该方法就表示向下取整,Math.ceil(11.6)的结果为11,Math.ceil(-11.6)的结果是-12;最难掌握的是round方法,它表示“四舍五入”,算法为Math.floor(x+0.5),即将原来的数字加上0.5后再向下取整,所以,Math.round(11.5)的结果为12,Math.round(-11.5)的结果为-11。16、下面的代码有什么不妥之处?131.if(username.equals(“zxx”){}2intx=1;returnx==1?true:false;答:1可能报错(NullPointerException),因为username可能为null。2中不知道返回类型是否是int型,而且返回值一定是true,没有必要写成三元运算符。17、请说出作用域public,private,protected,以及不写时的区别13答:作用域当前类同一package子类其他packagePublicYYYYProtectedYYYN默认(Friendly)YYNNPrivateYNNN18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?14答:overload是重载,表示同一个类中可以有多个同名的方法,但是这些方法的参数列表不相同(参数的个数或者是类型不同)。Override是重写,表示子类中的方法可以与父类中的某个方法的名称和参数完全一样,通过子类创建实例对象调用这个方法时,将会调用子类中的定义方法,而将父类中的这个方法覆盖掉,这也是面向对象的一种表现形式。o