Java基础阶段性测试

一、不定项选择 (每题1分)

1.下列代码的输出是什么?

public static void main(String[] args) {
   
		int a;
		a = 6;
		System.out.print(a);
		System.out.print(a++);
		System.out.print(a);
}
A:666
B:667
C:677
D:676

答案:B

解析:第一个a输出6,a++是a=a,a=a+1,所以输出a,第三个a已经自增了所以是7

2.String s = new String(“xyz”);创建了几个StringObject?

A:两个或者一个都有可能
B:两个
C:一个
D:三个

答案: A

解析:本题易错项为B,StringObject表示为String类型对象。想要搞懂,我们需要先搞懂几个概念

栈 :由JVM分配区域,用于保存线程执行的动作和数据引用。
堆 :由JVM分配的,用于存储对象等数据的区域。
常量池:在堆中分配出来的一块存储区域,用于存储显式的String,float或者integer.这是一个特殊的共享区域,可以在内存中共享的不经常改变的东西,都可以放在这里。
进入正题:

String a = "abc";①
String b = "abc";②

使用String a = “abc”;的方式,可以在一定程度上提高程序的运行速度,因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。
①代码执行后在常量池中创建了一个值为abc的String对象,②执行时,因为常量池中存在"abc"所以就不在创建新的String对象了。

String c = new String("xyz");①
String d = new String("xyz");②

让我们来看看这两句代码在内存中发生了什么,①Class被CLassLoader加载时,你的"xyz"被作为常量读入,在常量池里创建了一个共享的"xyz",然后当调用到new String(“xyz”)的时候,会在heap里创建这个new String(“xyz”);②由于常量池中存在"xyz"所以不再创建"xyz",然后创建新的new String(“xyz”)。
对于String c = new String(“xyz”);的代码,与String a = "abc"不同的是一概在堆中创建新对象,不管其字符串值是否相等,是否有必要创建新对象,从而加重了程序的负担。

String s1 = new String("xyz"); //创建二个对象,一个引用
String s2 = new String("xyz"); //创建一个对象,并且以后每执行一次创建一个对象,一个引
String s3 = "xyz"; //创建一个对象,一个引用
String s4 = "xyz"; //不创建对象,只是创建一个新的引用

所以,本题选A

3.下列关于final,finally和finalize的说法正确的是()

A:final可以用来修饰类、方法、变量
B:finally是java代码保证重点代码一定要执行的一种机制
C:变量被final修饰后不能再指向其他对象,但可以重写
D:finalize设计目的是保证对象在被垃圾收集完成特定资源回收

答案:A B D

解析:final修饰变量,固定的变量的值不变,如果是基本类型,指定此变量的值不能变。变量为引用类型:可以修改值(地址值不变),C错误

4.局部内部类可以用那些修饰符修饰?

A:public
B:private
C:abstract
D:final

答案:C D

解析: 局部内部类不能使用public、private、protected、static这些修饰符,局部内部类只能在当前方法中使用 。所以选择C D

5.执行下列代码会发生什么?

public class Test {
   
  static {
   
	  int x = 5;
  }
  static int x,y;
  
  public static void main(String[] args) {
   
	x--;//-1
	myMethod();
	System.out.println(x+y+ ++x);
  }
  
  public static void myMethod() {
   
	  y = x++ + ++x;//y= -1 +1 =0          x=1 
  }
  
}
A:编译出错
B:输出1
C:输出2
D:输出3
E:输出7
F:输出8

答案:D

解析: static虽然属于类,但static修饰代码块,里面的int x=5是局部变量,static int x,y才是全局变量,其不初始化值,默认为0。main方法和myMethod方法使用得都是static int x,y。看main方法,x–执行后,x=-1.执行了myMethod方法 y= x++ + ++相当于y = (x++) + (++x);x++先赋值后加,++x先加后赋值。所以是-1 + 1 =0。(无论是x++,还是++x最后x都会自增1,只是执行顺序不同)这时候全局变量x=1,y=0。最后x+y+ ++x结果为1 + 0 ++x =1 + 0 + 2 =3.固选D

6.下面那些赋值语句是正确的

A:long text = 012;
B:float t = -412;
C:int other = (int) true;
D:double d = 0x12345678;
E:byte b = 128;

答案:A B D

解析: 0开头表示为8进制的数,0x表示为16进制的数,计算机会自动识别。如八进制012代表十进制为10(012=1 * 8^1 +2* * 8^2=10)A正确,B:对于float来说,有小数需要加上f,如1.2f,如果没有可以不加f 。float是4个字节,32位,其中符号位1位,阶码位8位,数值位为23位。C:基本类型int和boolean不能强转,可以通过包装类来转。D:0x12345678为16进制数,正确。E:byte为1个字节。8位,一位是符号位,7位符号位最大为127。

7.以下程序的输出结果

class Base {
   
	public Base(String s) {
   
		System.out.print("B");
	}
}
public class Dervid extends Base {
   
	public Dervid(String s) {
   
		System.out.print("D");
	}
	public static void main(String[] args) {
   
            Dervid dervid = new Dervid("s");
		System.out.print("C");
	}
}
A:BD
B:DB
C:C
D:编译错误

答案:D

解析:在调用子类的构造方法前,没有写super,默认通过super()l来调用父类的无参构造方法,然而本题的Base类中写了有参构造方法,覆盖了默认的无参构造方法。解决方法有两种:一在子类构造方法第一句写上super(s);二是在父类补充无参构造方法(建议),反射的原理也是通过父类的无参构造方法,如果写明了构造方法,建议把被覆盖的无参方法也写明。

8.java继承的特点,下列说法正确的是

A:使类的定义复杂化
B:java只支持单继承,不可多继承,但可以通过实现接口来达到多继承的目的
C:子类继承父类的所有成员变量和方法,包括父类的构造方法
D:不可以多层继承,既一个类不可以继承一个类的子类

答案:B

解析:A:明显错误。C:子类只会继承父类非私有的成员变量和方法,C错误。D:Java不可以多继承,但是可以多级(层)继承,D错误。所以选择B

9.关于final关键字下列说法正确的是

A:如果修饰局部变量必须初始化
B:如果修饰类,则该类只能被一个子类继承
C:如果修饰方法,则该方法不能在子类当中重写
D:如果修饰方法,则该方法所在的类不能被继承

答案:C

解析:A:final修饰局部变量可以不初始化,但是使用的时候要初始化,A错误。B:final修饰类,该类不能被继承。C&D:如果修饰方法,则该方法所在的类可以被继承,该方法不能被重写。

10.下列说法正确的是

A:在类方法当中可以用this来调用本类的方法
B:在类方法当中调用本类的类方法可以直接调用
C:在类方法当中只可能调用本类的类方法
D:在类方法中绝对不能调用实例方法

答案:B

解析:类方法中不能使用this来调用本类的方法,类方法中可以直接调用本类的类方法,不能直接调用实例(对象)方法,需要先实例化对象,后借助对象来间接使用对象方法

11.关于java异常处理机制的叙述有哪些是正确的?

A:catch部分捕捉到异常情况时,才会执行finally部分
B:当try区分的程序发生异常的时候,才会执行catch区段的程序
C:在try区段不论程序是否发生异常,都会执行finally部分
D:以上都是

答案:B C

解析:在try区段不论程序是否发生异常,都会执行finally部分,当try区分的程序发生异常的时候,才会执行catch区段的程序

12.下列说法正确的是()

A:在类当中定义的变量称为类的成员变量,在别的类当中可以直接使用
B:局部变量的作用范围仅仅在定义它的方法内,或者在定义它的控制流块中
C:使用别的类的方法只需要引用方法名即可
D:只要没有定义不带参数的构造函数,JVM都会为类生成一个默认的构造函数

答案:B

解析:A:在类当中定义的变量称为类的成员变量是正确的,别的类能否使用需要看访问权限修饰符,A错误。C:是类的方法(static)需要用类名.方法名,如果是类的对象方法,还需要先实例化对象,C错误。D:只要定义了构造方法(无论有参无参),都会覆盖掉JVM为类生成的默认的构造函数,D错误。

13.关于Float,下列说法错误的是()

A:Float是一个类
B:Float在java.lang包中
C:Float a = 1.0 是正确的赋值方法
D:Float a = new Float(1.0)是正确的赋值方法

答案:C

解析:Float是基本类型float的包装类,即A正确,java.lang是java最核心的包,其中有基本类型以及其包装类等,使用java.lang包下的内容不需要导入,B正确。C的赋值方法是错误的,但是Float a = 1是正确的,Float a = 1.0f也是正确的这样是自动装箱,D的赋值方法正确。

14.java 反射机制主要提供了以下哪些功能?

A:在运行时判断一个对象所属的类
B:在运行时构造一个类的对象
C:在运行时判断一个类所具有的成员变量和方法
D:在运行时调用一个对象的方法

答案:A B C D

解析:

15.在java 当中下列说法错误的是

A:数组是一种对象
B:数组属于原生类
C:int num = []{1,2,3,4}
D:数组的大小可以任意改变

答案: B C D

解析: 数组是引用类型,是一种对象。B数组不属于原生类。C:命名数组的格式错误。D:数组的大小不是多态的,不能任意改变

16.下列代码运行的结果是

public class DemoTest {
   
	
	public static void main(String[] args) {
   
		String s;
		System.out.println("hello" + s);
	}
}
A:在控制台打印hello
B:报异常java.lang.NullPointException
C:编译报错
D:报异常java.RuntimeException

答案: C

解析: 局部变量引用类型一定要初始化赋值,在编译阶段就会报错,选择C。

17.下列说法正确的是

public class Student {
   
	
		private String name;
		private int age;
		public Student(String name,int age) {
   
			this.name = name;
			this.age = age;
		}
		@Override
		public String toString() {
   
			return "Student [name=" + name + ", age=" + age + "]";
		}
		public static void change(Student s1, Student s2){
   
			Student temp = new Student("王五",20);
			temp.name = s1.name;
			s1.name = s2.name;
			s2.name = temp.name;
			
		}
		public static void main(String[] args) {
   
			Student zhangsan = new Student("张三", 18);
			Student lisi = new Student("李四", 20);
			Student.change(zhangsan, lisi);
			System.out.print(zhangsan.toString());
			System.out.print(lisi.toString());
		}
}
A: Student [name=李四, age=18]Student [name=张三, age=20]
B: Student [name=李四, age=20]Student [name=张三, age=18]
C: Student [name=张三, age=20]Student [name=李四, age=18]
D: Student [name=张三, age=18]Student [name=李四, age=20]

答案: A

解析:在执行change方法前的状态

image-20220525205915935

执行change方法时候的状态

image-20220525205739716

change方法结束

image-20220525205819921

固选A

18.关于java的一些概念那些是正确的?

A:所有的java异常和错误都是java.lang.Exception 包括java.lang.RuntimeException
B:通过try catch finally语句finally无论发生什么异常都会得到执行
C:Java中所有数据都是对象
D:Java语言是跨平台的,无论通过哪个版本编写的java程序,都能在所在的java平台当中运行

答案: B

解析:A:Exception是异常的父类,不是错误的父类。C:基本类型不是对象,没有在堆中开辟空间,C错误。D:低版本不能执行高版本的java程序,D错误

19.下列程序的运行结果

class Two{
   
	Byte x;
}
public class Student {
   
	public static void main(String[] args) {
   
		Student student = new Student();
		student.start();
	}
	void start() {
   
		Two two = new Two();
		System.out.print(two.x +"  ");
		Two two2 = fix(two);
		System.out.println(two.x + " "+two2.x);
	}
	Two fix(Two tt) {
   
		tt.x = 42;
		return tt;
	}
}
A: null null 42
B:null 42 42
C:0 0 42
D:0 42 42
E:Anexception is thrown at runtime

答案: B

解析:main方法执行了start方法,Two two = new Two();System.out.print(two.x +" ");这时候的two.x没有初始化,是null。Two two2 = fix(two);开辟了two2的空间,并把它执行了 fix(two)的返回结果,fix方法返回一个Two类型的对象(地址值),在fix方法内,把tt.x=42,传入的形参为two(相当于把地址传入),相当于two.x的值修改为42,two2的地址是fix返回的tt的地址。这里的tt,two,two2都指向一个地址。所以two.x和two2.x都是42。

20.以下对异常的描述不正确的是()

A:异常体系分为Error和Exception
B:Throwable是所有异常的父类
C:Exception是所有异常的父类
D:Exception分为运行时异常和非运行时异常

答案: B

解析:Throwable是异常和错误的超(父)

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值