java笔试经典(题及答案)2013

更新时间:2023-10-19 06:30:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Java笔试经典(基础部分 及答案和分析)

1、一个\源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 答:可以包括 多个类,但是最多只能有一个public修饰的类。

2、Java有没有goto? 7

答:java中有goto ,但只是保留字,用来兼容以前版本的再无其他用途。

3、说说&和&&的区别。 8

答:&是按位与,左右两边同时为1这得1,其他情况都为0,而&&是逻辑与,左右两边都为true这结果为true否则为false,并且&&会发生短路,而& 不会发生短路

4、在JAVA中如何跳出当前的多重嵌套循环? 8

答:有两种方法:①在循环体中boolean值和break搭配使用;②使用continue和break对应的标识,运行到bcontinue或break处时跳出到对应标识处

5、switch语句能否作用在byte上,能否作用在long上,能否作用在String上? 9 答:switch语句是使用int 型和枚举型的,而精度比int 型低的byte char short 都可以转化成int 型,所以byte是可以用在switch上的,但是系统不会将long型的转化成int型,所以不能使用long.而String是个类,而不是基本数据类型,系统也不会自动将String 转化成int的。

6、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 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关键字修饰一个变量是引用不能变,引用的对象还是可以改变的。如: StringBuffer stb=new StringBuffer(“abc”); Stb=new StringBuffer(“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、下面的代码有什么不妥之处? 13 1. if(username.equals(“zxx”){} 2. . int x = 1;

return x==1?true:false;

答:1可能报错(NullPointerException),因为username可能为null。

2中不知道返回类型是否是int型,而且返回值一定是true,没有必要写成三元运算符。

17、请说出作用域public,private,protected,以及不写时的区别 13

答:作用域 当前类 同一package 子类 其他package Public Y Y Y Y Protected Y Y Y N 默认(Friendly) Y Y N N Private Y N N N

18、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型? 14 答:overload是重载,表示同一个类中可以有多个同名的方法,但是这些方法的参数列表不相同(参数的个数或者是类型不同)。

Override是重写,表示子类中的方法可以与父类中的某个方法的名称和参数完全一

样,通过子类创建实例对象调用这个方法时,将会调用子类中的定义方法,而将父类中的这个方法覆盖掉,这也是面向对象的一种表现形式。

override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。在覆盖要注意以下的几点:

1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果; 2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;

3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类; 4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。在使用重载要注意以下的几点:

1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));

2、不能通过访问权限、返回类型、抛出的异常进行重载; 3、方法的异常类型和数目不会对重载造成影响;

4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

19、构造器Constructor是否可被override? 15

答:不能,应为构造器不能被继承,所以不能被重写,但是可以被重载。

20、接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)? 抽象类中是否可以有静态的main方法? 15

答:接口可以继承接口,抽象类可以实现接口,抽象类可以继承具体类,抽象类中

可以有静态的main方法。

21、写clone()方法时,通常都有一行代码,是什么? 15

答:clone有缺省行为,Super.clone();因为首先要把父类中的成员复制到位,然后

才是复制自己的成员。

22、面向对象的特征有哪些方面 15

答:封装:封装是保证软件部件具有优良的模块性的基础,封装的目标就是要实现

软件部件的“高内聚、低耦合”,防止程序相互依赖性而带来的变动影响。把对同一事物进行操作的方法和相关的方法放在同一个类中,把方法和它操作的数据放在同一个类中。

继承:在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进

行,把这个已经存在的类所定义的内容作为自己的内容,并可以加入若干新的内容,或修改原来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。

多态:多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发

出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。多态性增强了软件的灵活性和扩展性。

抽象:抽象就是找出一些事物的相似和共性之处,然后将这些事物归为一个类,

这个类只考虑这些事物的相似和共性之处,并且会忽略与当前主题和目标无关的那些方面,将注意力集中在与当前目标有关的方面。

23、java中实现多态的机制是什么? 17

答:靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,

而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。

24、abstract class和interface有什么区别? 17

答:含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对

象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。

接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是

抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static 。

25、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized? 18

答:不能。abstract需要重载,static为类方法,没有重载一说 abstract为没有实现的方法,native为本机实现的方法,自相矛盾

abstract方法没有实现,也不可能实际调用抽象方法,没有必要synchronized修饰,当然子类可以根据需要同步该方法.

26、什么是内部类?Static Nested Class 和 Inner Class的不同。 19 答:定义在封装类内部的类就是内部类。

27、内部类可以引用它的包含类的成员吗?有没有什么限制? 20

答:内部内可以引用它的包含类的成员,如果不是静态内部类,就没有什么限制;但是如果是静态嵌套类当作内部类的一种特例,那在这种情况下不可以访问外部类的普通成员,而只能访问外部类中的静态成员。

28、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)? 21

答:可以继承其他内,或者是想接口,但是不能用extends和implement关键词。

29、super.getClass()方法调用 21

30、String是最基本的数据类型吗? 22

答:不是。最基本的数据类型是byte char short int long float double boolean这八种。而String是一个final类。

31、String s = \这两行代码执行后,原始的String对象中的内容到底变了没有? 22 答:没有。原来的对象中的内容还是“Hello”,只是后来的s引用指向的是另一个对象“Hello world”而已。

32、是否可以继承String类? 23

答:不能继承String类,因为String 类是final的不能继承。

33、String s = new String(\创建了几个String Object? 二者之间有什么区别? 23 答:创建了两个Stirng Object ,一个是对象“xyz”,一个是new String()来创建的。但是由new String()创建的对象是“xyz”的一个拷贝内容是完全一样的,使用equal()比较是true的,但是使用“==”比较是false的。

34、String 和StringBuffer的区别 23 答:StringBuffer是可变的,但是String是不可变的。String实例化以后所有的属性都是final的,而StringBuffer确不是。

35、如何把一段逗号分割的字符串转换成一个数组? 24

36、数组有没有length()这个方法? String有没有length()这个方法? 24 答:数组有length属性没有length()方法。String有length()方法。

37、下面这条语句一共创建了多少个对象:String s=\答:共创建了7个对象。

String ss = “a”+”b”+”c”; //创建了5个对象 String ss = “a”+”b”+”c”+”d”; //创建了7个对象 String ss = “a”+”b”+”c”+”d”+”e”; //创建了9个对象 String ss = “a”+”b”+”c”+”d”+”e”+”f”; //创建了11个对象

注: String是一个不可变的字符序列,每次字符相加操作都会有新的对象形成。

本文来源:https://www.bwwdw.com/article/imof.html

Top