每天几条java题(3)——补周三
其实不是新题才有研究价值的,java这东西向下兼容很好,不同python,很多东西还是继续沿用的。。。。。旧的还没学好就别谈新的了。
Question: 8
Given
10. class Foo {
11. static void alpha() { /* more code here */ }
12. void beta() { /* more code here */ }
13. }
Which two statements are true? (Choose two.)
A. Foo.beta() is a valid invocation of beta().
B. Foo.alpha() is a valid invocation of alpha().
C. Method beta() can directly call method alpha().
D. Method alpha() can directly call method beta().
Answer: B, C
静态方法在编译时候已经放入java堆里面,是整个进程共有的部分,所以没有进行Foo类的初始化也可以使用,那么初始化之后,可以使用类里面的普通方法,普通方法可以调用静态方法。
但是在类没有初始化之前,静态方法无法找到普通方法,无法调用普通方法。
则选B.C
Question: 9
Given:
11. public static void parse(String str) {
12. try {
13. float f = Float.parseFloat(str);
14. } catch (NumberFormatException nfe) {
15. f = 0;
16. } finally {
17. System.out.println(f);
18. }
19. }
20. public static void main(String[] args) {
21. parse("invalid");
22. }
What is the result?
A. 0.0
B. Compilation fails.
C. A ParseException is thrown by the parse method at runtime.
D. A NumberFormatException is thrown by the parse method at runtime.
Answer: B
作用域问题,try - catch -finally 分别拥有独立的作用域。可知,f没有被定义,没有被定义却进行赋值,当然是编译失败。
Question: 10
Given:
10. class Line {
11. public static class Point {}
12. }
13.
14. class Triangle {
15. // insert code here
16. }
Which code, inserted at line 15, creates an instance of the Point class defined in Line?
A. Point p = new Point();
B. Line.Point p = new Line.Point();
C. The Point class cannot be instatiated at line 15.
D. Line l = new Line() ; l.Point p = new l.Point();
Answer: B
考察静态内部类
类,只能是内部类才能够声明为静态类;
静态类内部可以定义静态属性,但是非静态内部类,即普通内部类则不能进行静态属性的定义;
静态内部类不能够调用外部类的普通方法和普通属性,只能够调用静态方法和静态属性。
内部普通类,它是属于对象的,然后必须先进行对象的初始化;
OuterClass.InnerClass inc = new OuterClass().InnerClass();
而静态内部类,则是属于外部类,可以当成是外部类的一个静态属性,直接调用就好
OuterClass.InnerClass inc = new OuterClass.InnerClass();
静态类能够提高代码封装性和代码的可读性。在《Think in java》中有这样一句话:使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。