java 第一阶段测评(1)
1、下面程序的运行结果为:
public class Test{
public static void main(){
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、以下代码是否报错,如果有报错请指出哪一行会编译时报错,并说出原因,如果没有直接写出结果即可
1 public class Test{
2 public static void main(String... args){
3 short a = 1,b = 2;
4 a = a+1;//编译报错
5 b++;
6 ++(b++);//编译报错
7 System.out.println(a);
8 System.out.println(b);
9 }
10 }
4、将以下两个数进行交换位置(不允许使用中间变量,至少写出两种方案)
int a = 10, b = 11;
5、请写出下面程序的结果。
class A{
private String name = "小李";
public A(){
System.out.println(getName1());
System.out.println(getName2());
}
public String getName1(){
return name;
}
public String getName2(){
return name;
}
}
public class Test extends A{
private String name = "小红";
public Test(){
System.out.println(getName1());
}
public String getName1(){
return name;
}
public static void main(String[] args) {
new Test();
}
}
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接口申明局部变量的方式来说明问题。
下限:List<? super String> list = new ArrayList<>(); 泛型只能为:String以及String的父类
上限:List<? extends String> list = new ArrayList<>(); 泛型只能为 String或者String的子类
10、抽象类中是否允许构造器的重载,接口是否允许构造器的重载,接口中是否允许存在静态方法或者default修饰的方法。
11、请对下面的数组进行扩容(注意:最终要的是扩容后的原数组),要求是原来的2倍(不可使用*2操作或arr.length+arr.length)。
int[] arr = {3,4,6,8};
12、下列程序在①处是否会发生异常,如果没有,输出是什么?是否会运行到②处,如果会,输出的是什么?是否会运行到③处,如果会,输出的是什么?为啥会有这样的结果。
public class TestClass{
public static void main(String... args){
List list = new ArrayList();
test1(list);
System.out.println(list.size());//①处
test2(list);
System.out.println(list.size());//②处
list = test3(list);
System.out.println(list.size());//③处
}
public static void test1(List list){
list = null;
}
public static void test2(List list){
list.add("aaaa");
}
public static List test3(List list){
return list = null;
}
}
13、java中常见的类加载器有哪些,他们的作用分别是什么?
- 引导类加载器(bootstrap class loader):它用来加载 Java 的核心库,是用原生代码来实现的,并不继承自
java.lang.ClassLoader
。 - 扩展类加载器(extensions class loader):它用来加载 Java 的扩展库。Java 虚拟机的实现会提供一个扩展库目录。该类加载器在此目录里面查找并加载 Java 类。
- 系统类加载器(system class loader):它根据 Java 应用的类路径(CLASSPATH)来加载 Java 类。一般来说,Java 应用的类都是由它来完成加载的。可以通过
ClassLoader.getSystemClassLoader()
来获取它。
14、假如T1线程和T2线程出现死锁的状况,那么请说明该状态下,线程和锁的持有情况。
15、下面程序的运行结果为多少?
public static main(String... args){
System.out.println(result());
}
public static int result(){
try{
return 1;
}catch(Exception e){
return 2;
}finally{
return 3;
}
}
16、== 与 equals 的区别是什么?
“==” 是关系运算符,而“equals”是方法
“==”比较的是相同基本数据类型之间的值,以及相同引用类型之间的地址值。比较不同类型时编译不通过:Incompatible operand types int and String。
而“equals()”方法,在两个相同引用类型没有重写Object中的equals()时,会之间调用Object的equals()代码如下:
public boolean equals(Object obj) {
return (this == obj);
}
可见比较的地址值。而被重写之后要按照(String和Integer等基本数据的包装类中都有重写过equals()进行相应的内容比较)自己重写的内容进行比较。代码案例如下:
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (gender == null) {
if (other.gender != null)
return false;
} else if (!gender.equals(other.gender))
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
17、请写出获取一个类类型的Class对象的几种方式?基本数据类型可以获取其Class对象吗?请举例说明。
18、字符类关系中,创建子类对象就会调用父类的构造方法,请问调用父类构造方法一定会创建父类对象吗?请举例说明。
19、创建对象一定会调用构造方法吗?如果是直接写出结果即可,如果不是请举例说明。
20、请写出几个常见的编译时异常和运行时异常?
编译时异常:
运行时异常: