zoukankan      html  css  js  c++  java
  • 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.抽象方法不可以有函数体
  • 相关阅读:
    【题解】SDOI2015序列统计
    【合集】有标号的DAG图计数(合集)
    【题解】有标号的DAG计数4
    【题解】有标号的DAG计数3
    【题解】有标号的DAG计数2
    【题解】有标号的DAG计数1
    【题解】歌唱王国(概率生成函数+KMP)+伦讲的求方差
    【题解】CTS2019珍珠(二项式反演+卷积)
    【题解】餐巾计划问题
    【题解】数字梯形问题
  • 原文地址:https://www.cnblogs.com/buhuiflydepig/p/12346147.html
Copyright © 2011-2022 走看看