牛客网面试提错题集(1)

下列哪个选项是Java调试器?如果编译器返回程序代码的错误,可以用它对程序进行调试。

  • java
  • javadoc
  • jdb
  • javaprof

java.exe为java虚拟机

javadoc.exe为编写Java文档

jdb.exe为java调试器,个人理解为JavaDeBug的简写

javaprof.exe为剖析工具

下列哪个说法是正确的()

  • ConcurrentHashMap使用synchronized关键字保证线程安全
  • HashMap实现了Collction接口
  • Array.asList方法返回java.util.ArrayList对象
  • SimpleDateFormat是线程不安全的

ConcurrentHashMap使用segment管理锁,而segment继承于ReentrantLock,ConcurrentHashMap使用ReentrantLock保证线程安全

单链集合继承于Collction,而有键值对的集合map接口

Array.asList是将数组转换为集合的方法,返回的是Arrays中一个内部类

有如下代码:请写出程序的输出结果。

public class Test
{
    public static void main(String[] args)
    {
        int x = 0;
        int y = 0;
        int k = 0;
        for (int z = 0; z < 5; z++) {
            if ((++x > 2) && (++y > 2) && (k++ > 2))
            {
                x++;
                ++y;
                k++;
            }
        }
        System.out.println(x + ”” +y + ”” +k);
    }
}
  • 432
  • 531
  • 421
  • 523

++a > 2 (a先加1,再比较) a++ > 2(先比较,a)

第一轮:

z = 0 < 5;++x = 1 > 2不成立,导致后面的与运算短路不执行,y = 0, k = 0;z++ = 1;

第二轮:

z = 1 < 5; ++x = 2 > 2不成立,导致后面的与运算短路不执行,y = 0, k = 0;z++ = 2;

第三轮:

z = 2 < 5;++x = 3 > 2成立,继而判断 ++y = 1 > 2不成立,导致后面的与运算短路不执行,k = 0;z++ = 3;

第四轮:

z = 3 < 5;++x = 4 > 2成立,继而判断 ++y = 2 > 2不成立,导致后面的与运算短路不执行,k = 0;z++ = 4;

第五轮:

z = 4 < 5;++x = 5 > 2成立,继而判断 ++y = 3 > 2成立,继而判断 k++ = 1 > 2不成立;z++ = 5;

第六轮:

z = 5 < 5不成立,循环结束,得x = 5,y = 3,k = 1;

关于以下代码的说明,正确的是( )

class StaticStuff{
    static int x=10;
    static {
           x+=5;
       }
    public static void main(String args[ ]){
        System.out.println(“x=” + x);
    }
    static { x/=3;}
}
  • 3行与9行不能通过编译,因为缺少方法名和返回类型
  • 9行不能通过编译,因为只能有一个静态初始化器
  • 编译通过,执行结果为:x=5
  • 编译通过,执行结果为:x=3

java初始化的加载顺序为:

父类静态成员变量 -->父类静态代码块 -->子类静态成员变量 -->子类静态代码块 --> 父类非静态成员变量 -->父类非静态代码块-->父类构造函数-->子类非静态成员变量-->子类非静态代码块-->子类构造函数

所以本题加载顺序为

先执行:

static int x=10;

再执行:

 static {
    x+=5;//x=10+5=15
}
static { 
    x/=3;//x=15/3=5
}

最后执行:

 public static void main(String args[ ]){
        System.out.println(“x=” + x);//输出x=5
    }

有变量int i = 0; int a = i++; int b = ++a; int c = a+b; int d = (a == 1)?b:c; 请问a和d的值分别是多少?( )。

  • 2,4
  • 1, 4
  • 1, 2
  • 1,1

x = a++,先赋值,再a+1;x = ++a,先a + 1,再赋值;

int a = i++,先给a赋值,a=0,i++ = 1;

int b = ++a,先++a = 1,再赋值 b = a = 1;

int c = a+b,c = 1 + 1 = 2;

三目运算规则:

条件 ? 值1 : 值2;(如果条件成立,返回值1,否则返回值2)

int d = (a == 1)?b:c,(a == 1)成立 所以d = b = 1;

以下关于 abstract 关键字的说法,正确的是()

  • abstract 可以与final 并列修饰同一个类。
  • abstract 类中不可以有private的成员。
  • abstract 类中必须全部是abstract方法。
  • abstract 方法必须在abstract类或接口中。
  1. abstract类不能与final,static使用。final修饰方法,子类可以调用,但不能覆盖。

  1. 最好不要有private因为私有和抽象放在一起,子类如果想重写父类的私有方法根本继承不过来,也就无法重写

  1. 抽象类中可以有非抽象方法

  1. 抽象类中可以都是非抽象的,但是抽象方法一定要在类和接口中

String str = "";
System.out.print(str.split(",").length);

输出结果为:

  • 0
  • 1
  • 出现异常

String对象.split(",")返回的是一个数组,由题返回的数组为{""},长度为1的数组

将类的成员的访问权限设置为默认的,则该成员能被( )

  • 同一包中的类访问
  • 其它包中的类访问
  • 所有的类访问
  • 所有的类的子类访问

默认的访问权限为default,也就是什么也不写

public:可以被所有其他类所访问;

protected:自身、子类及同一个包中类可以访问;

default:同一包中的类可以访问;

private:只能被自己访问和修改。

下面的switch语句中,x可以是哪些类型的数据:()

switch(x)
{
default:
System.out.println("Hello");
}
  • long
  • char
  • float
  • byte
  • double
  • String

以java8为准,switch支持10种类型

基本类型:byte char short int

对于包装类 :Byte,Short,Character,Integer String enum

2、实际只支持int类型 Java实际只能支持int类型的switch语句,那其他的类型时如何支持的

a、基本类型byte char short 原因:这些基本数字类型可自动向上转为int, 实际还是用的int。

b、基本类型包装类Byte,Short,Character,Integer 原因:java的自动拆箱机制 可看这些对象自动转为基本类型

c、String 类型 原因:实际switch比较的string.hashCode值,它是一个int类型 如何实现的,网上例子很多。此处不表。

d、enum类型 原因 :实际比较的是enum的ordinal值(表示枚举值的顺序),它也是一个int类型 所以也可以说 switch语句只支持int类型

对Collection和Collections描述正确的是

  • Collection是java.util下的类,它包含有各种有关集合操作的静态方法
  • Collection是java.util下的接口,它是各种集合结构的父接口
  • Collections是java.util下的接口,它是各种集合结构的父接口
  • Collections是java.util下的类,它包含有各种有关集合操作的静态方法

Collection是单列集合的顶层接口,Map是双列集合的顶层接口

Collections是一个集合的工具类,提供了排序、查找等操作集合的一些常用方法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值