Java学习记录——错题总结(二十五)

第一套

1.JVM内存不包含如下哪个部分( )
正确答案: D 你的答案: B (错误)
Stacks
PC寄存器
Heap
Heap Frame请添加图片描述
java好像只有栈帧 没有堆帧 pc寄存器 就是 程序计数器
程序计数器是一个以线程私有的一块较小的内存空间,用于记录所属线程所执行的字节码的行号指示器;字节码解释器工作时,通过改变程序计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳准、异常处理、线程恢复等基础功能都需要依赖程序计数器来完成

2.java中 String str = "hello world"下列语句错误的是?
正确答案: A B C 你的答案: C (错误)
str+=’ a’
int strlen = str.length
str=100
str=str+100

ABC在java中会报错,D可以正常运行, 所以答案是ABC.
A. ‘a’是字符,’ a’这个是空格和a,必须要用" a"才可以;
B.String有length()方法
C.int 无法直接转成String类型
D.尾部添加字符串”100“

3.下面哪个语句是创建数组的正确语句?( )
正确答案: A B D E 你的答案: A C D (错误)

float f[][] = new float[6][6];
float []f[] = new float[6][6];
float f[][] = new float[][6];
float [][]f = new float[6][6];
float [][]f = new float[6][];

ABDE都可以。也就是说数组命名时名称与[]可以随意排列,但声明的二维数组中第一个中括号中必须要有值,它代表的是在该二维数组中有多少个一维数组。

数组声明,必须要明确行数,列数随意

第二套

1.设有下面两个赋值语句:

a = Integer.parseInt(“1024”);

b = Integer.valueOf(“1024”).intValue();

下述说法正确的是()
正确答案: D 你的答案: A (错误)
a是整数类型变量,b是整数类对象。
a是整数类对象,b是整数类型变量。
a和b都是整数类对象并且它们的值相等。
a和b都是整数类型变量并且它们的值相等。

intValue()是把Integer对象类型变成int的基础数据类型;
parseInt()是把String 变成int的基础数据类型;
Valueof()是把String 转化成Integer对象类型;(现在JDK版本支持自动装箱拆箱了。)
本题:parseInt得到的是基础数据类型int,valueof得到的是装箱数据类型Integer,然后再通过valueInt转换成int,所以选择D

2.对于abstract声明的类,下面说法正确的是
正确答案: E 你的答案: D (错误)
可以实例化
不可以被继承
子类为abstract
只能被继承
可以被抽象类继承

答案:E
A,抽象类不能实例化,因为有抽象方法未实现
B,可以被继承。派生类可以实现抽象方法
C,子类可以是抽象的,也可以非抽象的
D,只能被继承说法太肯定,不正确
E,可以被抽象类继承,也可以被非抽象类继承

3.以下哪个事件会导致线程销毁?()

正确答案: D 你的答案: C (错误)
调用方法sleep()
调用方法wait()
start()方法的执行结束
run()方法的执行结束

A. 调用sleep()***让线程进入睡眠状态---睡眠指定的时间后再次执行;
B. 调用wait()***让线程进入等待状态 ----等待别的线程执行notify()notifyAll()唤醒后继续执行;
C.调用start()***让线程进入就绪状态---得到CPU时间就执行线程;
D.run()方法是线程的具体逻辑方法,执行完,线程就结束。

第三套

1.下列代码编译和运行的结果是:()

public class Threads4{
     public static void main(String[] args){
         new Threads4().go();
     }
     public void go(){
         Runnable r=new Runnable(){
             public void run(){
                 System.out.print("foo");
             }
         };
     Thread t=new Thread(r);
     t.start();
     }
 }

正确答案: C 你的答案: C (正确)
编译错误
抛出运行时异常
输出:foo
代码正常运行,但是无输出

在java多线程中实现多线程的方式有两种①extends Threadimplements Runnable。这两种情况是我们最常见的,还有一种是由第二种变形而来的直接new Runnable(){},我们都知道java的接口是不可以实例化的,但代码中的new Runnable(){xxx}确是实例化了,为什么? 接口和抽象类不可以实例化是对的,这个是java语法规范来的,**new Runnable(){}其实不是实例化Runnable接口来的,实际上一种内部类的一种简写** 在这里:
①首先构造了一个”implements Runnable “的无名local内部类(方法内的内部类)
②然后构造了这个无名local内部类的一个实例
③然后用Runnable来表示这个无名local内部类的type(OO多态)。 例如上面这段代码编译后你会看到其实是编译了两个类来的,如下: 
其中Text2$1就是无名local内部内类,这个也就很好地解释了为什么在main()方法中new Runnable(){xxx}里面的调用main()方法中的变量的时候要用final关键字来修饰

2.在java7中,下列哪个说法是正确的:
正确答案: D 你的答案: A (错误)
ConcurrentHashMap使用synchronized关键字保证线程安全
HashMap实现了Collection接口
Arrays.asList方法返回java.util.ArrayList对象
SimpleDateFormat对象是线程不安全的

hashMap在单线程中使用大大提高效率,在多线程的情况下使用hashTable来确保安全。hashTable中使用synchronized关键字来实现安全机制,但是synchronized是对整张hash表进行锁定即让线程独享整张hash表,在安全同时造成了浪费。concurrentHashMap采用分段加锁的机制来确保安全

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值