(4)接⼝的中的变量是所有实现类共有的,既然共有,肯定是不变的东西,因为变化的东西也不能够算共有。所以变量是不可变(final)类型,也就是常量了。
(5) 接⼝中不可以定义变量?如果接⼝可以定义变量,但是接⼝中的⽅法⼜都是抽象的,在接⼝中⽆法通过⾏为来修改属性。有的⼈会说了,没有关系,可以通过 实现接⼝的对象的⾏为来修改接⼝中的属性。这当然没有问题,但是考虑这样的情况。如果接⼝ A 中有⼀个public 访问权限的静态变量 a。按照 Java 的语义,我们可以不通过实现接⼝的对象来访问变量 a,通过 A.a = xxx; 就可以改变接⼝中的变量 a 的值了。正如抽象类中是可以这样做的,那么实现接⼝ A 的所有对象也都会⾃动拥有这⼀改变后的 a 的值了,也就是说⼀个地⽅改变了 a,所有这些对象中 a 的值也都跟着变了。这和抽象类有什么区别呢,怎么体现接⼝更⾼的抽象级别呢,怎么体现接⼝提供的统⼀的协议呢,那还要接⼝这种抽象来做什么呢?所以接⼝中 不能出现变量,如果有变量,就和接⼝提供的统⼀的抽象这种思想是抵触的。所以接⼝中的属性必然是常量,只能读不能改,这样才能为实现接⼝的对象提供⼀个统 ⼀的属性。
通俗的讲,你认为是要变化的东西,就放在你⾃⼰的实现中,不能放在接⼝中去,接⼝只是对⼀类事物的属性和⾏为更⾼层次的抽象。对修改关闭,对扩展(不同的实现 implements)开放,接⼝是对开闭原则的⼀种体现。
所以:
接⼝的⽅法默认是public abstract;(这⾥有待考量)
接⼝中不可以定义变量即只能定义常量(加上final修饰就会变成常量)。所以接⼝的属性默认是public static final 常量,且必须赋初值。
注意:final和abstract不能同时出现。
15. 不通过构造函数也能创建对象吗()
A 是
B 否
答案:A
解析:Java创建对象的⼏种⽅式(重要):
(1) ⽤new语句创建对象,这是最常见的创建对象的⽅法。
(2) 运⽤反射⼿段,调⽤java.lang.Class或者flect.Constructor类的newInstance()实例⽅法。
(3) 调⽤对象的clone()⽅法。
(4) 运⽤反序列化⼿段,调⽤java.io.ObjectInputStream对象的 readObject()⽅法。
(1)和(2)都会明确的显式的调⽤构造函数 ;(3)是在内存上对已有对象的影印,所以不会调⽤构造函数 ;(4)是从⽂件中还原类的对象,也不会调⽤构造函数。
el表达式查范围16. ArrayList list = new ArrayList(20);中的list扩充⼏次()
A 0
B 1
C 2
D 3
答案:A
解析:这⾥有点迷惑⼈,⼤家都知道默认ArrayList的长度是10个,所以如果你要往list⾥添加20个元素肯定要扩充⼀次(扩充为原来的1.5倍),但是这⾥显⽰指明了需要多少空间,所以就⼀次性为你分配这
么多空间,也就是不需要扩充了。
17. 下⾯哪些是对称加密算法()
A DES
B AES
C DSA
D RSA
答案:AB
解析:常⽤的对称加密算法有:DES、3DES、RC2、RC4、AES
常⽤的⾮对称加密算法有:RSA、DSA、ECC
使⽤单向散列函数的加密算法:MD5、SHA
18.新建⼀个流对象,下⾯哪个选项的代码是错误的?()
A)new BufferedWriter(new FileWriter("a.txt"));
B)new BufferedReader(new FileInputStream("a.dat"));
sql更新命令C)new GZIPOutputStream(new FileOutputStream("a.zip"));
D)new ObjectInputStream(new FileInputStream("a.dat"));
答案:B
解析:请记得13题的那个图吗?Reader只能⽤FileReader进⾏实例化。
19. 下⾯程序能正常运⾏吗()
perl脚本cbc加密1 public classNULL {2
3 public static voidhaha(){
4 System.out.println("haha");
5 }
6 public static voidmain(String[] args) {
7 ((NULL)null).haha();
8 }9
10 }
答案:能正常运⾏
解析:输出为haha,因为null值可以强制转换为任何java类类型,(String)null也是合法的。但null强制转换后是⽆效对象,其返回值还是为null,⽽static⽅法的调⽤是和类名绑定的,不借助对象进⾏访问所以能正确输出。反过来,没有static修饰就只能⽤对象进⾏访问,使⽤null调⽤对象肯定会报空指针错了。
20. 下⾯程序的运⾏结果是什么()
1 classHelloA {
2 publicHelloA() {
3 System.out.println("HelloA");
4 }
5 { System.out.println("I'm A class"); }
6 static {
System.out.println("static A"); }7 }8 public class HelloB extendsHelloA {9 publicHelloB() {10 System.out.println("HelloB");11 }12 { System.out.println("I'm B class"); }13 static { System.out.println("static B"); }14 public static voidmain(String[] args) {15 newHelloB();16 }17 }
执⾏结果为:
staticAstaticB
I'm A class
HelloA
I'm B class
HelloB
解析:说实话我觉得这题很好,考查静态语句块、构造语句块(就是只有⼤括号的那块)以及构造函数的执⾏顺序。
对象的初始化顺序:(1)类加载之后,按从上到下(从⽗类到⼦类)执⾏被static修饰的语句;(2)当static语句执⾏完之后,再执⾏main⽅法;
(3)如果有语句new了⾃⾝的对象,将从上到下执⾏构造代码块、构造器(两者可以说绑定在⼀起)。
下⾯稍微修改下上⾯的代码,以便更清晰的说明情况:
1 classHelloA {2
3 publicHelloA() {
4 System.out.println("HelloA");
5 }6
7 { System.out.println("I'm A class"); }8
9 static { System.out.println("static A"); }10
11 }12
13 public class HelloB extendsHelloA {14 publicHelloB() {15 System.out.println("HelloB");16 }17
18 { System.out.println("I'm B class"); }19
20 static { System.out.println("static B"); }21
22 public static voidmain(String[] args) {23
24 System.out.println("-------main start-------");25 newHelloB();26 newHelloB();27 System.out.println("-------main end-------");28 }29 }
执⾏结果为:
staticAstaticB-------main start-------I'm A class
HelloA
I'm B class
HelloB
I'm A class
HelloA
I'm B class
HelloB-------main end-------
21. getCustomerInfo()⽅法如下,try中可以捕获三种类型的异常,如果在该⽅法运⾏中产⽣了⼀个IOException,将会输出什么结果()
1 public voidgetCustomerInfo() {2
销售中asp是什么意思3 try{4
5 //do something that may cause an Exception
6
7 } catch(java.io.FileNotFoundException ex) {8
9 System.out.print("FileNotFoundException!");10
11 } catch(java.io.IOException ex) {12swiper no swiping
13 System.out.print("IOException!");14
15 } catch(java.lang.Exception ex) {16
17 System.out.print("Exception!");18
19 }20
21 }
A IOException!
B IOException!Exception!
C FileNotFoundException!IOException!
D FileNotFoundException!IOException!Exception!
答案:Ajava常见笔试题
解析:考察多个catch语句块的执⾏顺序。当⽤多个catch语句时,catch语句块在次序上有先后之分。从最前⾯的catch语句块依次先后进⾏异常类型匹配,这样如果⽗异常在⼦异常类之前,那么⾸先匹配的将是⽗异常类,⼦异常类将不会获得匹配的机会,也即⼦异常类型所在的catch语句块将是不可到达的语句。所以,⼀般将⽗类异常类即Exception⽼⼤放在catch语句块的最后⼀个。
22. 下⾯代码的运⾏结果为:()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论