错题集

  1. protected访问权限要小于包访问权限。( )
    修饰符
    解析:默认访问权限是包含整个package的,而protected不仅包含package还可以在子类中使用

  2. 静态内部类不可以直接访问外围类的非静态数据,而非静态内部类可以直接访问外围类的数据,包括私有数据。( )
    解析:静态内部类
    链接:https://www.nowcoder.com/questionTerminal/e886e58981c346098a043c3c2ad2d736
    来源:牛客网
    静态内部类: 1. 静态内部类本身可以访问外部的静态资源,包括静态私有资源。但是不能访问非静态资源,可以不依赖外部类实例而实例化。 2. 成员内部类: 1. 成员内部类本身可以访问外部的所有资源,但是自身不能定义静态资源,因为其实例化本身就还依赖着外部类。 3. 局部内部类: 1. 局部内部类就像一个局部方法,不能被访问修饰符修饰,也不能被static修饰。 2. 局部内部类只能访问所在代码块或者方法中被定义为final的局部变量。 4. 匿名内部类: 1. 没有类名的内部类,不能使用class,extends和implements,没有构造方法。 2. 多用于GUI中的事件处理。 3. 不能定义静态资源 4. 只能创建一个匿名内部类实例。 5. 一个匿名内部类一定是在new后面的,这个匿名类必须继承一个父类或者实现一个接口。 6. 匿名内部类是局部内部类的特殊形式,所以局部内部类的所有限制对匿名内部类也有效。

  3. 代码片段:
    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.
    被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了
    而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。
    Java中的byte,short,char进行计算时都会提升为int类型。

  4. 以下哪几种方式可用来实现线程间通知和唤醒:( )
    正确答案: A C 你的答案: D (错误)
    A.Object.wait/notify/notifyAll
    B.ReentrantLock.wait/notify/notifyAll
    C.Condition.await/signal/signalAll
    D.Thread.wait/notify/notifyAll
    解析:

  5. 如下代码的输出结果是什么



public class Test {    
 public int aMethod(){       
i++;         
return i;    
}
 public static void main(String args[]){   
 test.aMethod();   
  System.out.println(j);    
  } }

推荐

谷哥的小弟
http://blog.csdn.net/zhumintao/article/details/53818972

  1. 下面哪些赋值语句是正确的()
    A.long test=012
    B.float f=-412
    C.int other =(int)true
    D.double d=0x12345678
    E.byte b=128
    解析:链接:https://www.nowcoder.com/questionTerminal/f838b38081b942fba7ab2869f71ad071?orderByHotValue=1&mutiTagIds=639_570_609&page=1&onlyReference=false
    来源:牛客网

选ABD

A和B中long和float,正常定义需要加l和f,但是long和float属于基本类型,会进行转化,所以不会报出异常。AB正确

boolean类型不能和任何类型进行转换,会报出类型异常错误。所以C错。

D选项可以这样定义,D正确。

E选项中,byte的取值范围是-128—127。报出异常:
cannot convert from int to byte.所以E选项错误。

  • 关于Java语言描述正确的是? ( )
    A. java和C++都保留了指针
    B. java和C++都有三个特征:封装、继承和多态
    C. java的垃圾回收机制是指程序结束时系统自动回收内存
    D. 以上说法都不正确

解析:java的立即回收不是程序结束后回收垃圾,在程序过程中就会,如对象呗赋值NULL,该对象就成为可回收对象。
c是面向过程,java和c++都是面向对象,面向对象的三大特征是:封装、继承、多态
JVM的一个系统级线程会自动释放该内存块。垃圾回收意味着程序不再需要的对象是"无用信息",这些信息将被丢弃。当一个对象不再被引用的时候,内存回收它占领的空间,以便空间被后来的新对象使用,c项程序结束的时候是错的

  • 以下说法错误的是()

a. 虚拟机中没有泛型,只有普通类和普通方法
b. 所有泛型类的类型参数在编译时都会被擦除
c. 创建泛型对象时请指明类型,让编译器尽早的做参数检查
d. 泛型的类型擦除机制意味着不能在运行时动态获取List中T的实际类型

1、创建泛型对象的时候,一定要指出类型变量T的具体类型。争取让编译器检查出错误,而不是留给JVM运行的时候抛出类不匹配的异常。 2、JVM如何理解泛型概念 —— 类型擦除。事实上,JVM并不知道泛型,所有的泛型在编译阶段就已经被处理成了普通类和方法。 处理方法很简单,我们叫做类型变量T的擦除(erased) 。 总结:泛型代码与JVM ① 虚拟机中没有泛型,只有普通类和方法。 ② 在编译阶段,所有泛型类的类型参数都会被Object或者它们的限定边界来替换。(类型擦除) ③ 在继承泛型类型的时候,桥方法的合成是为了避免类型变量擦除所带来的多态灾难。 无论我们如何定义一个泛型类型,相应的都会有一个原始类型被自动提供。原始类型的名字就是擦除类型参数的泛型类型的名字。
D 可以通过反射机制

关于访问权限说法正确 的是 ? ( )
a. 外部类前面可以修饰public,protected和private
b. 成员内部类前面可以修饰public,protected和private
c. 局部内部类前面可以修饰public,protected和private
d. 以上说法都不正确

( 1 )对于外部类而言,它也可以使用访问控制符修饰,但外部类只能有两种访问控制级别: public 和默认。因为外部类没有处于任何类的内部,也就没有其所在类的内部、所在类的子类两个范围,因此 private 和 protected 访问控制符对外部类没有意义。
( 2 )内部类的上一级程序单元是外部类,它具有 4 个作用域:同一个类( private )、同一个包( protected )和任何位置( public )。
( 3 ) 因为局部成员的作用域是所在方法,其他程序单元永远不可能访问另一个方法中的局部变量,所以所有的局部成员都不能使用访问控制修饰符修饰。 可以把局部内部类当做一个局部.变量,所以它是不需要加任何修饰符的局部内部类前不能用修饰符public和private,protected 。

  • 以下哪项陈述是正确的?
    a. 垃圾回收线程的优先级很高,以保证不再 使用的内存将被及时回收
    b. 垃圾收集允许程序开发者明确指定释放 哪一个对象
    c. 垃圾回收机制保证了JAVA程序不会出现 内存溢出
    d. 进入”Dead”状态的线程将被垃圾回收器回收
    e. 以上都不对

当程序运行时,至少会有两个线程开启启动,一个是我们的主线程,一个时垃圾回收线程,垃圾回收线程的priority(优先级)较低
垃圾回收器会对我们使用的对象进行监视,当一个对象长时间不使用时,垃圾回收器会在空闲的时候(不定时)对对象进行回收,释放内存空间,程序员是不可以显示的调用垃圾回收器回收内存的,但是可以使用System.gc()方法建议垃圾回收器进行回收,但是垃圾回收器不一定会执行。
Java的垃圾回收机制可以有效的防止内存溢出问题,但是它并不能完全保证不会出现内存溢出。例如当程序出现严重的问题时,也可能出现内存溢出问题。

  • ArrayLists和LinkedList的区别,下述说法正确的有?
    ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
    对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
    对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。
    ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。

A. ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 //正确,这里的所谓动态数组并不是那个“ 有多少元素就申请多少空间 ”的意思,通过查看源码,可以发现,这个动态数组是这样实现的,如果没指定数组大小,则申请默认大小为10的数组,当元素个数增加,数组无法存储时,系统会另个申请一个长度为当前长度1.5倍的数组,然后,把之前的数据拷贝到新建的数组。
B. 对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。//正确,ArrayList是数组,所以,直接定位到相应位置取元素,LinkedLIst是链表,所以需要从前往后遍历。
C. 对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。//正确,ArrayList的新增和删除就是数组的新增和删除,LinkedList与链表一致。
D. ArrayList的空间浪费主要体现在在list列表的结尾预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的空间。//正确,因为ArrayList空间的增长率为1.5倍,所以,最后很可能留下一部分空间是没有用到的,因此,会造成浪费的情况。对于LInkedList的话,由于每个节点都需要额外的指针,所以,你懂的。

  • 下列有关JAVA异常处理的叙述中正确的是()
    a. finally是为确保一段代码不管是否捕获异常都会被执行的一段代码
    b.throws是用来声明一个成员方法可能抛出的各种非运行异常情况
    c.final用于可以声明属性和方法,分别表示属性的不可变及方法的不可继承
    d.throw是用来明确地抛出一个异常情况

A:明显正确,不懂的可以去看看网上博客
B:throws是用来声明一个成员方法可能抛出的各种异常情况,错误!因为很多运行时异常,不会显示的抛出(当然你愿意的话,也可以,只不过你的代码会乱成翔)
C:final用于可以声明属性和方法,分别表示属性的不可变及方法的不可覆盖。不是方法的不可继承
D:throw是用来明确地抛出一个异常情况。错误,throw不仅仅可以抛出异常,还可以抛出Error以及Throwable.

  1. 方法的重写要注意三点:
    第一:子类返回类型小于等于父类返回类型
    第二:子类异常小于等于父类异常
    第三:子类访问权限大于等于父类访问权限
    总结:Cannot reduce the visibility of the inherited method from Base
    意思就是告诉你:不能降低从基类继承的方法的可见性。
  2. String pool知识点
  3. finally中return语句会覆盖try-catch中的return语句

在jdk1.5的环境下,有如下4条语句:
Integer i01 = 59;
int i02 = 59;
Integer i03 =Integer.valueOf(59);
Integer i04 = new Integer(59);
解析:JVM中一个字节以下的整型数据会在JVM启动的时候加载进内存,除非用new Integer()显式的创建对象,否则都是同一个对象
所有只有i04是一个新对象,其他都是同一个对象。所有A,B选项为true
C选项i03和i04是两个不同的对象,返回false
D选项i02是基本数据类型,比较的时候比较的是数值,返回true

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值