corejava基础知识练习题(含答案)

  1. 运行下面代码输出结果是:

public class Test {

public static void main(String[] args) {

int a = 12, b = 20;

if (a++ == 13 && ++b == 21) {

System.out.println(“ok”);

}

System.out.println(“a=” + a);//13

System.out.println(“b=” + b);//21

}

} //a=13 b=20

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

java.lang.ArithmeticException 算术异常

java.lang.NullPointerException 空指针引用

java.lang.ArrayIndexoutofBoundsException 数组越界

java.lang.ClassCastException 强制类型转换异常

java.lang.NumberFormatException 数据格式异常

java.lang.NegativeArraySizeException 数组长度为负数异常

.
3 在java中,产生一个对象的时候,最终是否一定会调用该类中的构造方法?如果不是请举例说明

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

4.以下代码运行的结果为

public class Test {

public int test() {

int a = 1;

int[] arr = {90,5,6,7};

try {

a = arr[arr.length];

return a;

} catch (Exception e) {

a = arr[0]++;

return a++;

} finally {

a = 50;

}

}

public static void main(String[] args) {

System.out.println(new Test().test());

}

}

//90

5.以下程序运行结果为:

public class Test {

public static void main(String[] args) {

int x = 127;

int y = 127;

Integer a = 127;

Integer b = 127;

System.out.println(x == y);

System.out.println(a == b);

}}//true true
6. 方法的重载的要求是什么?方法的重写中,对方法的访问修饰符和抛出异常分别有什么要求?

方法重载要求参数列表不同,并且只能发生在本类种,重写的方法的访问修饰符只能大或者同级,抛出的异常只能同级或者比原来的异常范围小

7.请写出Java中的基本数据类型和引用数据类型分别有哪些?,并指出基本数据类型的变量 和 引用数据类型的变量,俩者的核心区别是什么?

byte short int long float double char boolean

基本数据类型变量直接存储在栈上;引用数据类型变量,首先要在栈上给其引用分配一块内存,而对象的具体信息都存储在堆内存上,然后由栈上面的引用指向堆中对象的地址。
8. 假如T1线程和T2线程出现了死锁的状况,那么请说明该状态下,线程和锁的持有情况。

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

9.以下代码运行是否有错,如果没有报错,结果是什么?,如果报错应该怎么改?
class Person {

}

public class Test {

public static void main(String[] args) throws IOException, Exception {

List persons = new ArrayList<>();

persons.add(new Person());

persons.add(new Person());

persons.add(new Person());

persons.add(new Person());

FileOutputStream fos = new FileOutputStream(“src/obj.txt”);

ObjectOutputStream oos = new ObjectOutputStream(fos);

oos.writeObject(persons);

oos.flush();

oos.close();
System.out.println(“保存成功”)

}

}

//Person()没有实现接口serlizable,无法进行序列化操作
10. 类A中有非静态方法x,类B中有非静态方法y,请问在x方法和y方法上直接使用synchronized关键字分别修饰这俩个方法,那么在多线程环境下,这个俩个方法x和y,是否可以实现线程同步的效果?如果不可以,请说明原因,并简单说明如果修改可以让它们实现线程同步的效果?

不可以,当synchronized修饰非静态方法时,锁对象为this,因此不可以实现同步

将同步方法换车同步代码块并且使用同一个锁对象
11. byte类型的数字的最小值和最大值分别是多少?如果把数字-8进行先取反(~)然后再加1,那么结果打印出来是多少?

最小值 -128,最大值 127 8
12. java中的io流中,InputStream类是字节输入流中的父类型,类中有我们常用的非常重要的方法read,请说明一下三个read方法的作用

int read();
从输入流中读取数据的下一个字节。返回 0 到 255 范围内的 int 字节,返回读取得字节
int read(byte[] buf);
从输入流中读取一定数量的字节,并将其存储在缓冲区数组 buf中。返回读取得字节数量。
int read(byte[] buf,int a,int b);
将输入流中最多 len 个数据字节读入 byte 数组。尝试读取 len 个字节,但读取的字节也可能小于该值。以整数形式返回实际读取的字节数
13. 拥有静态成员的内部类一定是静态内部类吗,如果不是,请举例说明。

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

14.以下代码是否会编译报错,如果报错请指出哪一行代码报错,并说明理由。
public static void main(String[] args) {
short a = 1; // 第一行
a += 1; // 第二行 (隐式的强制类型转换)
a = a + 1; // 第三行

}

第三行代码编译报错,在运算时会先将a自动转成int类型,两个int类型数据相加结果还是为int,然后将int类型数据赋给short类型就会编译报错。

15.请描述List集合、Set集合、Map集合的特点,Map集合中entrySet方法的返回值是什么?

List集合能够存放有序可重复的数据

Set集合存放无序不可重复的数据

Map集合一次能够存两列数据,并且key不可重复

Map集合中 entrySet返回的是Entry的Set集合

16.请问以下代码无论运行多少次一定是 ”test11…”打印在前,”test22…”打印在后吗,如果是请说明原因,如果不是也请说明原因
public static void main(String[] args) {

Thread t1 = new Thread() {

@Override

public void run() {

System.out.println(“test11…”);

}

};

Thread t2 = new Thread() {

@Override

public void run() {

System.out.println(“test22…”);

}

};

t1.run();

t2.run();

}

是的,因为没有启动线程,而是调用了线程里面得run方法,属于方法的调用
17. 请问可以调用某些特定的方法让jvm强制性的进行垃圾回收吗,如果可以请说明理由,不可以也请说明理由。

不能 java开发人员可以调用特定的方法请求jvm回收垃圾 但是具体回不回收是由jvm决定的

18.抽象方法是否可以为静态的,如果可以直接写可以,如果不可以请说明理由。

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

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

Class.forName(“全类名”);

类名.class

对象名.getClass();

基本数据类型可以获取Class对象,方式为: 基本数据类型.class
20. Java中的泛型的上限和下限是什么意思,请使用List接口声明局部变量的方式,来举例说明该问题

向下限定:

List list = new ArrayList<>();

泛型只能为 Object或者Object的子类

向上限定:

List list = new ArrayList<>();

泛型只能为:String以及String的父类
21. 抽象类与接口的区别是什么?抽象类与接口是否都有构造器,为什么?

抽象类中可以拥有抽象方法也可以拥有非抽象方法

抽象类中可以拥有普通变量也可以拥有常量

抽象类中可以拥有着自己的构造器

接口:

接口里面所有得方法都是抽象方法

接口里面所有得变量都是静态常量

接口没有构造器

抽象类有构造器,接口没有,因为类与类是继承关系,当创建子类对象时会调用父类中的构造器。而类与接口是实现关系,当创建该类对象时会调用该类的父类的构造器。
22. 请对以下数组进行扩容,请写出代码(写出一种方式即可)

int[] arr = {1,2,3,5};

int[] obj=new int[arr.length*2+1];

System.arraycopy(arr,0,obj,0,arr.length);

arr = obj;
23. 以下代码执行结果为?

class A {

public A() {

System.out.println(getName());

}

public String getName() {

return “lisi”;

}

}

public class Test extends A {

public Test() {

System.out.println(getName());

}

public String getName() {

return “wangwu”;

}

public static void main(String[] args) {

new Test();

}

} //wangwu wangwu
24. int a = 15;

int b = 3;

怎么能把变量a和变量b的值进行交换?(要求不使用第三个变量,至少写出【俩种】方案)

a =a^b; a=a+b;

b =a^b; b =a-b;

a =a^b; a =a-b;

25.假设现在我们登录unix服务器后所处的位置在 /home/tom

/home/tom目录下有来个子目录:

/home/tom/src

/home/tom/bin

我们在当前/home/tom下使用vi命令分别编写俩个java源文件

vi src/Student.java

vi src/StudentTest.java

在StudentTest.java中的主函数中测试Student类中的某个方法,这俩个类都是com.test包下面的类

那么现在我们要如何用命令去编译这俩个类并且运行StudentTest类中的主函数?

要求:这俩个类要一个一个编译,最后再运行StudentTest类的主函数,并且编译好的东西放到bin下面

Javac -d bin src/Student.java

Javac -d bin -cp src/StudentTest.java

Java -d bin -cp com.test.StudentTest

26.有以下代码

public void test()throws Exception{

synchronized (getClass()) {

for(int i=0;i<100;i++){

if(i==10){

wait();

}

}

}

}

运行抛出异常,锁对象为字节码对象,而wait()方法的调用者是this
27. 下列程序在1处是否会有异常,如果没有,输出是什么?是否会运行到2处,如果会,输出是什么?为什么会有这样的结果?

public class TestClass {

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(“aaaa”);

}

}

不会有异常 0 1 因为参数传递的是引用传递,传递的是地址,对地址操作就是对堆中的内存进行操作。
28. 定义一个类Person,将多个Person对象存入TreeSet中,此时有几种方式可以对集合中的对象进行排序?如果是把这些对象存放到List集合中,又该如何排序?

1)自然排序实现Comparable接口 2)创建TreeSet时传入一个比较器

List本身有序,按放入的先后顺序排序
29. 网络编程中(TCP),一般情况下,如何在客户端中连接服务器端,如何知道当前是否连接成功?

客户端创建socket对象,并且指定端口和IP地址。
服务器调用accept()方法 并且返回socket,则表示连接成功。
30. 有以下代码

public interface Test{

T t(T t);//代码1

}

解释代码1的含义。

泛型标识符为T,返回值为泛型T,方法名为 t, 形参的数据类型为泛型T,形参的名字为t

你可能感兴趣的:(corejava基础知识练习题(含答案))