相关基础在Java基础(static关键字)
1.下列代码输出的结果是什么?( )
public class Test { public int aMethod( ) { static int i = 0; i++; return i; } public static void main (String args[]) { Test test = new Test(); test.aMethod(); int j = test.aMethod(); System.out.println(j); } }
A. 0 B. 1 C. 2 D.编译失败
答案:D
分析:static不能修饰局部变量
2.以下代码的输出结果是什么?( )
class Base { Base() { System.out.print(“Base”); } } public class Alpha extends Base { public static void main( String[] args ) { new Alpha(); new Base(); } }
A. Base B. Base Base C. 编译失败. D. 代码运行但没有输出. E. 运行时抛出异常
答案:B
分析:先扫描main方法所在类Alpha,发现Alpha继承Base,先去加载Base类,未发现Base类有继承和static代码块,回过来加载Alpha类,未发现static代码块;此时main方法入栈,执行main方法,先创建Alpha对象,加载Alpha类前先加载其父类,输出Base;继续创建Base对象,输出Base;所以结果为Base Base
3.根据下面的代码,String s = null;会抛出NullPointerException异常的有( )。
A) if( (s!=null) & (s.length()>0) ) B) if( (s!=null) && (s.length()>0) ) C) if( (s==null) | (s.length()==0) ) D) if( (s==null) || (s.length()==0) )
答案:AC
分析:&&和||存在短路行为,&&在前者为false时不再继续执行后边内容,||在前者为true为true时不再继续执行后边内容;而&和|没有短路行为,会继续执行后边内容;A选项中前者已为false,会继续执行后者产生异常,C选项中在前者已经为true时会继续执行后者产生异常,因此选择AC
4.在以下哪个情况下,你会使用static方法?
A. 当你需要一个方法能够访问类的非静态成员时 B. 当你需要一个方法不需要创建类的实例就能被调用时 C. 当你需要覆盖(Override)父类的方法时 D. 当你需要确保一个方法被同步执行时
答案:B
分析:static所修饰的变量方法可以直接被类所调用
5.以下关于static代码块的说法哪个是错误的?
A. static代码块在类加载到JVM时执行 B. 一个类中可以有多个static代码块,它们按照在类中出现的顺序执行 C. static代码块在每次创建类的实例时都会执行 D. static代码块通常用于初始化静态变量
答案:C
分析:静态代码块只在类加载到JVM时执行一次,而不是每次创建类的实例时执行。
6.以下哪个选项正确地展示了如何使用static关键字来定义一个静态变量和一个静态方法?
A. class MyClass { static int myVariable = 10; static void myMethod() { System.out.println("Hello from static method"); } }
B. static class MyClass { int myVariable = 10; void myMethod() { System.out.println("Hello"); } }
C. class MyClass { int myVariable = 10; static void myMethod() { System.out.println("Hello from static method"); } }
D. class MyClass { static int myVariable = 10; void myMethod() { System.out.println("Hello from non-static method"); } }
答案:A
分析:A选项正确
B选项中,static不能直接用于修饰类
C选项中,未定义静态变量,不符合题意
D选项中,未定义静态方法,不符合题意