Corejava基础试题(含答案与解析)

时间:2020-8-26 作者:admin


试题

1.下面程序结果是多少

package ch00;

public class Test1 {
	public static void main(String[] args) {
		int a = 11, b = 20;
		if (a-- == 10 && b++ == 21) {
			System.out.println("ok");
		}
		System.out.println("a=" + a);
		System.out.println("b=" + b);
	}
}

2.什么是方法重载,重载对方法的返回值和访问修饰符有什么要求

3.以下代码是否报错,如果有报错请指出哪一行报错,并说明原因,如果没有直接写出结果即可

package ch00;

public class Test3 {
	public static void main(String[] args) {
		short a = 1, b = 2;//第一行
		a = a+1;//第二行
		b++;//第三行
		System.out.println(a);//第四行
		System.out.println(b);//第五行
	}
}

4.将下面两个数进行交换位置(不允许使用中间变量,至少写出两种方案)

5.请写出下面程序的结果

package ch00;

class A {
	private String name = "小李";

	public A() {
		System.out.println(getName());
	}

	public String getName() {
		return name;
	}
}

public class Test5 extends A{
	private String name = "小红";

	public Test5() {
		System.out.println(getName());
	}

	public String getName() {
		return name;
	}

	public static void main(String[] args) {
		new Test5();
	}
}

6.下面程序结果是什么

Integer a = 127;
Integer b = 125;
Integer c = 2;
Integer d = b+c;
Integer f = 128;
Integer g = 128;
System.out.println(d == a);
System.out.println(f == g);

7.拥有静态成员的内部类一定是静态内部类吗。如果不是请举例说明。

8.抽象方法是否可以被static关键字修饰,如果可以请说明原因,不可以也请说明原因。

9.在java中什么是泛型的上限和下限,请使用List接口声明局部变量的方式来说明该问题

10.抽象类中是否允许构造器的重载,接口是否也允许构造器的重载,接口中是否允许存在静态方法。

11.请对下面的数组进行扩容,要求是原来的两倍

int[] arr = {3,4,6,8}

12.下列程序在1处是否会有异常,如果没有,输出是什么?是否会运行到2处,如果会,输出是什么?为什么会有这样的结果?

package ch00;

import java.util.ArrayList;
import java.util.List;

public class Test12 {
	public static void main(String[] args) {
		List list =new ArrayList();
		test2(list);
		System.out.println(list.size());//1处
		test3(list);
		System.out.println(list.size());//2处
		
	}
	public static void test2(List list) {
		list=null;
	}
	public static void test3(List list) {
		list.add(list);
	}
}

13.java中常见类加载器有哪些,它们分别的作用是什么?

14.假如T1线程和T2线程出现了死锁的状况,那么请说明该状态下,线程和锁的持有情况。

15.下面程序结果为多少

String a = "11";
String b = "22";
String c = "11"+"22";
String d = new String("1122").intern();
System.out.println(c == d);

16.== 与equals的区别是什么

17.请写出java中所有的基本数据类型

18.请写出获取一个类类型的Class对象的几种方式?基本数据类型是否可以获取其Class对象,如果不可以直接写不可以,如果可以,请举例说明

19.如果退出多层嵌套循环(写出至少两种方案)

20.下面俩句代码是否都可以编译通过,请对每句代码进行说明,能否编译通过和原因

byte b= 1;
float a = 1.5;

21.子父类关系中,创建子类对象就会调用父类的构造方法,请问调用父类构造方法一定会创建父类对象吗,请举例说明。

22.A类如果实现B接口就必须实现里面所有的抽象方法,请给出一种方案,A类想要实现B接口,又不想实现所有的抽象方法。

23.下面程序结果为:

package ch00;

public class Test23 {
	public static void main(String[] args) {
		System.out.println(result());
	}
	public static int result() {
		try {
			return 1;
		}catch (Exception e) {
			return 2;
		}finally {
			return 3;
		}
	}
}

24.创建对象一定会调用构造方法吗?如果是直接写出结果即可,如果不是请举例说明。

25.请写出五个运行时异常

答案

1.下面程序结果是多少

package ch00;

public class Test1 {
	public static void main(String[] args) {
		int a = 11, b = 20;
		if (a-- == 10 && b++ == 21) {
			System.out.println("ok");
		}
		System.out.println("a=" + a);
		System.out.println("b=" + b);
	}
}

a=10
b=20
解析a=11,a--为本身为11,运行后减1.
if中(a-- ==10)为false
由于&&一个为false,if即为false,因此不执行(b++ == 21)
因此输出结果为上

2.什么是方法重载,重载对方法的返回值和访问修饰符有什么要求

发生在本类中,方法名相同参数参数列表不同
方法重载对返回值和修饰符没有影响

3.以下代码是否报错,如果有报错请指出哪一行报错,并说明原因,如果没有直接写出结果即可

package ch00;

public class Test3 {
	public static void main(String[] args) {
		short a = 1, b = 2;//第一行
		a = a+1;//第二行
		b++;//第三行
		System.out.println(a);//第四行
		System.out.println(b);//第五行
	}
}

第二行编译报错
在计算时会先将short转换成int类型数据进行计算,两个int类型数据相加最后的结果也为int
int类型的数据不能够直接赋值给short类型变量
正确应该为a = (short) (a + 1);

4.将下面两个数进行交换位置(不允许使用中间变量,至少写出两种方案)

// 第一种
a = a ^ b;
b = a ^ b;
a = a ^ b;
// 第二种
a = a + b;
b = a - b;
a = a - b;

5.请写出下面程序的结果

package ch00;

class A {
	private String name = "小李";

	public A() {
		System.out.println(getName());
	}

	public String getName() {
		return name;
	}
}

public class Test5 extends A{
	private String name = "小红";

	public Test5() {
		System.out.println(getName());
	}

	public String getName() {
		return name;
	}

	public static void main(String[] args) {
		new Test5();
	}
}

null
小红
解析
主函数中new Test5()对象,会先调用父类的构造器,再调用子类的构造器,而父类没有进行对name进行显示初始化,则name输出为空null

6.下面程序结果是什么

Integer a = 127;
Integer b = 125;
Integer c = 2;
Integer d = b+c;
Integer f = 128;
Integer g = 128;
System.out.println(d == a);
System.out.println(f == g);
true
false
解析
d=b+c,值为127,和a=127,相等,且都在常量池,因此(d==a)为true
而Integer 范围为(-128到127) f与g,超出了常量池,会进行new对象存储128,因此(f==g)为false

7.拥有静态成员的内部类一定是静态内部类吗。如果不是请举例说明。

拥有静态成员的内部类一定是静态内部类

8.抽象方法是否可以被static关键字修饰,如果可以请说明原因,不可以也请说明原因。

不可以,因为如果可以,那么就可以通过类名去调用,而抽象方法没有方法体无法去执行该抽象方法。
或者 抽象方法就是用来被子类重写的,而静态方法不能够被重写,所以冲突。

9.在java中什么是泛型的上限和下限,请使用List接口声明局部变量的方式来说明该问题

向下限定:
 List<? extends Object> list = new ArrayList<>();
 泛型只能为 Object或者Object的子类
向上限定:
 List<? super String> list = new ArrayList<>();
 泛型只能为:String以及String的父类

10.抽象类中是否允许构造器的重载,接口是否也允许构造器的重载,接口中是否允许存在静态方法。

是	否	是
解析
抽象类中允许构造器重载
接口中没有构造器所以不允许重载
jdk1.8之后接口中允许存在静态方法

11.请对下面的数组进行扩容,要求是原来的两倍

int[] arr = {3,4,6,8}
int[] arr= {3,4,6,8};
int[] newArr = new int[arr.length * 2];
System.arraycopy(arr,0,newArr,0,arr.length);
arr = newArr;

12.下列程序在1处是否会有异常,如果没有,输出是什么?是否会运行到2处,如果会,输出是什么?为什么会有这样的结果?

package ch00;

import java.util.ArrayList;
import java.util.List;

public class Test12 {
	public static void main(String[] args) {
		List list =new ArrayList();
		test2(list);
		System.out.println(list.size());//1处
		test3(list);
		System.out.println(list.size());//2处
		
	}
	public static void test2(List list) {
		list=null;
	}
	public static void test3(List list) {
		list.add(list);
	}
}

1处没有异常,输出结果为0
可以运行到2处,结果为1
因为方法的传递为引用传递,传递的是地址,对地址操作就是对堆里面的内存进行操作

13.java中常见类加载器有哪些,它们分别的作用是什么?

类装载器:
(分为4步)1》2》3》4
1、启动类装载器:bootstrap class loader
		从jdk的安装目录下  jdk/jre/lib/rt.jar
		rt.jar 是个包,放的是Java作为开发环境的所有的库
2、扩展类装载器:extensible class loader
		从jdk的安装目录下 jdk/jre/lib/ext/*.jar
		jdk下的所有的.jar 文件
3、系统类装载器:system class loader
		$CLASSPATH
		你所配置的classpath
4、网络类装载器:network class loader
类加载器:从一个指定路径下面去加载代码运行时需要用到的java类

14.假如T1线程和T2线程出现了死锁的状况,那么请说明该状态下,线程和锁的持有情况。

有两个锁,T1线程锁住第一个,T2线程锁住了第二个,同时T1试图锁第二个,失败,因为T2已经锁住了,T1只能等待.就在这时T2试图锁第一个,结果失败,因为T1已经锁住了,T2只好等待

15.下面程序结果为多少

String a = "11";
String b = "22";
String c = "11"+"22";
String d = new String("1122").intern();
System.out.println(c == d);
true
解析
如果没有调用intern方法的情况下,大家都了解应该为false,但是调用以后,这个方法作用是返回字符串常量池,因此为“true”

16.== 与equals的区别是什么

== 可以用来比较基本数据类型也可以用来比较引用类型
equals 只能用来比较引用类型数据
== 比较引用类型数据比较的是地址
equals如果被重写比较的则是内容

17.请写出java中所有的基本数据类型

byte short int long float double char boolean

18.请写出获取一个类类型的Class对象的几种方式?基本数据类型是否可以获取其Class对象,如果不可以直接写不可以,如果可以,请举例说明

Class.forName(“全类名”);
类名.class
对象名.getClass();
可以
基本数据类型可以获取Class对象,方式为:基本数据类型.class

19.如果退出多层嵌套循环(写出至少两种方案)

lable + break 跳出多层循环
return 跳出多层循环

20.下面俩句代码是否都可以编译通过,请对每句代码进行说明,能否编译通过和原因

byte b= 1;
float a = 1.5;
第一行编译通过
byte b = 1; 不会报错是因为 字面量 1 默认为int类型,但是其数值在byte所表示的范围内
float a = 1.5; 因为1.5默认为double类型数据 所以不能够将double类型赋值给a

21.子父类关系中,创建子类对象就会调用父类的构造方法,请问调用父类构造方法一定会创建父类对象吗,请举例说明。

调用父类方法不会创建父类对象
当父类是抽象类时,创建子类对象也会调用父类构造方法,但是抽象类是不能够创建对象的

22.A类如果实现B接口就必须实现里面所有的抽象方法,请给出一种方案,A类想要实现B接口,又不想实现所有的抽象方法。

答案1:
写一个中间类C去实现B接口,并且空实现接口里面所有的方法
A 类 继承 C类,当想要重写某个方法时直接重写即可
答案2:
写一个抽象类,把A类定义为抽象类,也可以满足只实现部分抽象方法

23.下面程序结果为:

package ch00;

public class Test23 {
	public static void main(String[] args) {
		System.out.println(result());
	}
	public static int result() {
		try {
			return 1;
		}catch (Exception e) {
			return 2;
		}finally {
			return 3;
		}
	}
}

3
解析
try,catch语句块中,必定会执行finally 中的语句return 3
会先执行try语句块的,但是返回值只有一个,考虑有try执行不了的情况下,所以只能返回finally的return

24.创建对象一定会调用构造方法吗?如果是直接写出结果即可,如果不是请举例说明。

不一定,通过反序列化创建对象就会不调用构造方法

25.请写出五个运行时异常

NullPointerException
ClassCastException
ArrayIndexOutOfBoundsException
ArrayStoreException
ArithmeticException
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。