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

试题

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
  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
java的优势? 1:跨平台(平台:指的是操作系统) 常见的操作系统:Windows Unix Linux Solaris(Sun) 跨平台:用java开发出来的应用程序不受底层操作系统的限制 底层的功臣:JVM = java虚拟机 = 1 + 2 + 3 = 秘书 + 保镖 + 翻译 = 秘书 = 类加载器 = ClassLoader = 保镖 = 字节码校验器 = ByteCode Verifier = 翻译 = 解释执行器 = Interfreter 2:安全 健壮 电力 电信 银行 都会有限考虑使用java实现 3:免费 开源 4:简单 语法简单:c++-- (取其精华 去其糟粕) 糟粕:手动垃圾回收 运算符重载 指针 思想简单:面向对象的思想 = OO思想 面向过程:需要人站在计算机的角度去思考问题 面向对象:需要人拿着代码模拟实现生活 类:一组类型相同事物高度抽象之后的集合概念 创建对象的模板 -》 class 对象:类的一个具体的实例 例子: 人和范冰冰之间的关系? 类和对象 HelloKitty和猫之间的关系? 对象和类 引用:对象的名字 *:一个对象同时可以有多个名字 但是不能一个 名字都没有 如果一个对象一个名字都没有的话 会被gc回收掉 -》 零引用内存回收 属性:对象有什么 方法:对象会什么 5: 动态更新 对于Sun公司官方提供的一些核心方法 值保留一个指向的关系 当若干年后核心类库升级了 我们的程序还是可以正常执行 这是挤兑c/c++的 搭建开发环境: 1:安装jdk http://www.oracle.com SDK = software developmenet kits = 软件开发工具包 JDK = java + SDK = java软件开发工具包 jdk1.5.0 jdk1.6.0 jdk1.7.0 jdk5.0 jdk6.0 jdk7.0 Tiger Mustang Dolphin 老虎 野马 海豚 路虎 悍马 .... JRE = java runtime environment = java运行环境 组成关系: JVM = 类加载器 + 字节码校验器 + 解释执行器 JRE = JVM + API(应用程序变成接口); JDK = JRE + BIN(常用的工具命令) 面试题: JDK和JRE之间的区别? 1:分别表示的义不同 jdk:java软件开发工具包 jre:java运行环境 2:作用不同 jdk:当一个电脑上面安装jdk之后 会自动的安装jre 所以既可以编写程序 又可以运行程序 jre:当一个电脑上面安装jre之后 只能运行java代码 2:设置环境变量 (环境变量可以不设置 为了简化开发流程 提高开发效率) 给谁使用 作用 PATH: 操作系统 让操作系统更加快捷的找到一个文件/命令 PATH=C:\Program Files\Java\jdk1.6.0_45\bin(javac.exe->编译指令 java.exe -》运行指令) CLASSPATH:类加载器使用 让类加载器明确去哪里加载.class文件 通常不需要设置 默认值:. .:当前目录(.java) CLASSPATH相当于中国的低保制度 JAVA_HOME:其他的程序使用 WEB 设置方式: 1:一次性的设置 (cmd里面设置) set PATH=C:\Program Files\Java\jdk1.6.0_45\bin set PATH = [错误的 等号两边不能加空格] set PATH [找到所有以PATH开头的环境变量的值] set [找到所有的环境变量的值] //set PATH=C:\Program Files\Java\jdk1.6.0_45\bin set CLASSPATH=. set JAVA_HOME=C:\Program Files\Java\jdk1.6.0_45 set PATH=%JAVA_HOME%\bin *:%%表示取中间环境变量的值 *:环境变量的名字尽量大写 *:当我们需要给一个环境变量设置多个值的时候 中间需要用;隔开 2:一劳永逸的设置 我的电脑 -》 属性 -》 高级 -》 环境变量 -》 新建 面试题: 1:在设置环境变量的时候 最少需要设置几个环境变量? 0个 2:在设置环境变量的时候 通常需要设置几个环境变量? 1个 -》 PATH -> jdk/bin

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值