2020-2-21 牛客试题复盘

1、如下代码,执行test()函数后,屏幕打印结果为(D)

public class Test2
{
    public void add(Byte b)
    {
        b = b++;
    }
    public void test()
    {
        Byte a = 127;
        Byte b = 127;
        add(++a);
        System.out.print(a + " ");
        add(b);
        System.out.print(b + "");
    }
}

A、127 127

B、128 127

C、129 128

D、以上都不是

解析:

答案应该是-128 127.

2、代码片段: 

byte b1=1,b2=2,b3,b6; 
final byte b4=4,b5=6
b6=b4+b5; 
b3=(b1+b2); 
System.out.println(b3+b6);

关于上面代码片段叙述正确的是(C)

A、输出结果:13
B、语句:b6=b4+b5编译出错
C、语句:b3=b1+b2编译出错
D、运行期抛出异常

 解析:

被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了
而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。
Java中的byte,short,char进行计算时都会提升为int类型。
 
 
3、What will happen when you attempt to compile and run the following code?   D
public class Test{
static{
   int x=5;
}
static int x,y;
public static void main(String args[]){
   x--;
   myMethod( );
   System.out.println(x+y+ ++x);
}
public static void myMethod( ){
  y=x++ + ++x;
 }
}
 
A、compiletime error
B、prints:1
C、prints:2
D、prints:3
E、prints:7
F、prints:8

解析:

1.静态语句块中x为局部变量,不影响静态变量x的值
2.x和y为静态变量,默认初始值为0,属于当前类,其值得改变会影响整个类运行。
3.java中自增操作非原子性的 
main方法中:
  • 执行x--后 x=-1
  • 调用myMethod方法,x执行x++结果为-1(后++),但x=0,++x结果1,x=1 ,则y=0
  • x+y+ ++x,先执行x+y,结果为1,执行++x结果为2,得到最终结果为3

4、下面关于变量及其范围的陈述哪些是不正确的(BC)

A、实例变量是类的成员变量
B、实例变量用关键字static声明
C、在方法中定义的局部变量在该方法被执行时创建
D、局部变量在使用前必须被初始化

解析:

A.类的成员变量包括实例变量和类变量(静态变量),成员方法包括实例方法和类方法(静态方法)。 A正确
B.类变量(静态变量)用关键字static声明,B错误
C.方法中的局部变量在方法被调用加载时开始入栈时创建,方法入栈创建栈帧包括局部变量表操作数栈,局部变量表存放局部变量,并非在执行该方法时被创建,C错误
D.局部变量被使用前必须初始化,否则程序报错。D正确
 
 
5、final、finally和finalize的区别中,下述说法正确的有? AB
A、final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
B、finally是异常处理语句结构的一部分,表示总是执行。
C、finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源的回收,例如关闭文件等。
D、引用变量被final修饰之后,不能再指向其他对象,它指向的对象的内容也是不可变的。

解析:

A,D考的一个知识点,final修饰变量,变量的引用(也就是指向的地址)不可变,但是引用的内容可以变(地址中的内容可变)。

6、以下代码将打印出

public static void main(String args[]) {
      List  Listlist1 = new ArrayList();
      Listlist1.add(0);
      List Listlist2 = Listlist1;
        System.out.println(Listlist1.get(0instanceof Integer);
        System.out.println(Listlist2.get(0instanceof Integer);
}
A、编译错误
B、true true
C、true false
D、false false

解析:

collection类型的集合(ArrayList,LinkedList)只能装入对象类型的数据,该题中装入了0,是一个基本类型,但是JDK5以后提供了自动装箱与自动拆箱,所以int类型自动装箱变为了Integer类型。编译能够正常通过。
将list1的引用赋值给了list2,那么list1和list2都将指向同一个堆内存空间。instanceof是Java中关键字,用于判断一个对象是否属于某个特定类的实例,并且返回boolean类型的返回值。显然,list1.get(0)和list2.get(0)都属于Integer的实例
 
 
 
7、以下对继承的描述错误的是(A)
A、Java中的继承允许一个子类继承多个父类
B、父类更具有通用性,子类更具体
C、Java中的继承存在着传递性
D、当实例化子类时会递归调用父类中的构造方法

8、以下程序段的输出结果为:

public class EqualsMethod
{
    public static void main(String[] args)
    {
        Integer n1 = new Integer(47);
        Integer n2 = new Integer(47);
        System.out.print(n1 == n2);
        System.out.print(",");
        System.out.println(n1 != n2);
    }
}
A、false,false
B、false,true
C、true,false
D、true,true

解析:

使用Integer a = 1;或Integer a = Integer.valueOf(1); 在值介于-128至127直接时,作为基本类型。
使用Integer a = new Integer(1); 时,无论值是多少,都作为对象。
 
 
 
9、如下代码的输出结果是什么? D
public class Test {
    public int aMethod(){
        static int i = 0;
        i++;
        return i;
    }
public static void main(String args[]){
    Test test = new Test();
    test.aMethod();
    int j = test.aMethod();
    System.out.println(j);
    }
}
A、0
B、1
C、2
D、编译失败
解析:
静态变量只能在类主体中定义,不能在方法中定义。
 
 
 
9、下面哪些情况可以引发异常:   ABC
A、数组越界
B、指定URL不存在
C、使用throw语句抛出
D、使用throws语句

解析:

1、throws出现在方法头,throw出现在方法体 2、throws表示出现异常的一种可能性,并不一定会发生异常;throw则是抛出了异常,执行throw则一定抛出了某种异常。 3、两者都是消极的异常处理方式,只是抛出或者可能抛出异常,是不会由函数处理,真正的处理异常由它的上层调用处理。

10、常用的servlet包的名称是? BD

A、java.servlet
B、javax.servlet
C、servlet.http
D、javax.servlet.http

11、jdk1.8中,下面有关java 抽象类和接口的区别,说法错误的是?    BD

A、抽象类可以有构造方法,接口中不能有构造方法
B、抽象类中可以包含非抽象的普通方法,接口中的方法必须是抽象的,不能有非抽象的普通方法
C、一个类可以实现多个接口,但只能继承一个抽象类
D、接口中可以有普通成员变量,抽象类中没有普通成员变量

解析:

接口可以有default、static方法,所以B是错的。

interface A {
    abstract void a();
    static void s() {
    }
    default void d(){
       
    }
    void b();//默认用abstract修饰
    int a = 0;//默认用static final 修饰
}

12、以下哪些类是线程安全的(ADE)

A、Vector
B、HashMap
C、ArrayList
D、StringBuffer
E、Properties

解析:

A,Vector相当于一个线程安全的List
B,HashMap是非线程安全的,其对应的线程安全类是HashTable
C,Arraylist是非线程安全的,其对应的线程安全类是Vector
D,StringBuffer是线程安全的,相当于一个线程安全的StringBuilder
E,Properties实现了Map接口,是线程安全的
 
 
 
13、往OuterClass类的代码段中插入内部类声明, 哪一个是错误的:  ABCD
public class OuterClass{
    private float f=1.0f;
    //插入代码到这里
}
 
A、class InnerClass{
public static float func(){return f;}
}
B、abstract class InnerClass{
public abstract float func(){}
}
C、static class InnerClass{
protected static float func(){return f;}
}
D、public class InnerClass{
 static float func(){return f;}
}

解析:

主要考核了这几个知识点:
1.静态内部类才可以声明静态方法
2.静态方法不可以使用非静态变量
3.抽象方法不可以有函数体
原文地址:https://www.cnblogs.com/buhuiflydepig/p/12346147.html