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