1.定义:String s1 = “uml”; String s2 = “uml”; String s3= new String(“uml”); String s4= new String(“uml”);那么,s1==s2;s3 == s4;s1.equals(s3); 判断正确与否
正确答案: A 你的答案: A (正确)
T,F,T
F,T,F
该题考察的是,String类创建的对象在JVM中的内存分配和“equals”与“==”的区别。
'=='是比较地址和值,'equals'是比较内容
s1==s2,比较的是地址和值,由上图得知两个引用指向的是同一个地址,返回true
s3==s4,比较的是两个new出来开辟的空间的对象地址,所以值相同,但地址不同,返回false
s1.equals(s3),比较的是内容,返回true
2.不考虑反射,String类型变量所指向内存空间中的内容是不能被改变的 。 ( )
正确答案: A 你的答案: A (正确)
正确
错误
String类的源码实现是final类修饰的和char数组,因此其在常量池中的内容是不可变的。
但是String类型的变量的指向是可以改变的,比如常量池中有两个字符串内容:"ABC"和"abc",定义一个String变量的Str,既可以指向"ABC",也可以改变为指向"abc"
3.A 是抽象父类或接口, B , C 派生自 A ,或实现 A ,现在 Java 源代码中有如下声明:
1. A a0=new A();
2. A a1 =new B();
3. A a2=new C();
问以下哪个说法是正确的?( )
正确答案: A 你的答案: D (错误)
第1行不能通过编译
第1、2行能通过编译,但第3行编译出错
第1、2、3行能通过编译,但第2、3行运行时出错
第1行、第2行和第3行的声明都是正确的
4.命令javac-d参数的用途是?()
正确答案: A 你的答案: A (正确)
指定编译后类层次的根目录
指定编译时需要依赖类的路径
指定编译时的编码
没有这一个参数
-d destination 目的地
-s source 起源地
javac -d 指定放置生成的类文件的位置
javac -s 指定放置生成的源文件的位置
5.关于下面的程序,说法正确的是:
1. classStaticStuff2 {3. staticintx = 10;4.5. static{ x += 5; }6.7. publicstaticvoidmain(String args[])8. {9. System.out.println(“x = ” + StaticStuff .x);10. }11. static12. {x /= 3; }13.}
正确答案: D 你的答案: B (错误)
第5行和12行不能编译,因为该方法没有方法名和返回值。
第12 行不能编译,因为只能有一个static初始化块。
代码编译并执行,输出结果x = 10.
代码编译并执行,输出结果 x = 5.
代码编译并执行,输出结果 x = 15.
解析:
这题考察的是代码的执行顺序
第5行和12行是静态代码块,不是方法,A、B错
静态代码块以及静态变量自上而下的顺序依次随着类加载而执行,所以依据题目的变量初始化:
x初始为10,
x+5赋值给x,为15
x/3赋值给x,为5
6.下列哪个说法是正确的()
正确答案: D 你的答案: A (错误)
ConcurrentHashMap使用synchronized关键字保证线程安全
HashMap实现了Collction接口
Array.asList方法返回java.util.ArrayList对象
SimpleDateFormat是线程不安全的
A. JDK1.8 的 ConcurrentHashMap 采用CAS+Synchronized保证线程安全。 JDK1.7 及以前采用segment的分段锁机制实现线程安全,其中segment继承自ReentrantLock,因此采用Lock锁来保证线程安全。
B.HashMap定义规则如下:
B.HashMap定义规则如下:
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, SerializableC. Arrays.asList() 返回 java.util.Arrays.ArrayList 对象,这里的 ArrayList 是 Arrays 私有的内部类
7.@SuppressWarnings(“deprecation”)的功能是什么?
正确答案: A 你的答案: B (错误)
屏蔽不赞同使用的类和方法的警告
屏蔽在强制类型转换的时候编译器给出的警告
关闭所有警告信息
当在可序列化的类上缺少serialVersionUID定义的警告
@Override:
指明被注解的方法需要覆写超类中的方法.
如果某个方法使用了该注解,却没有覆写超类中的方法(比如大小写写错了,或者参数错了,或者是子类自己定义的方法),编译器就会生成一个错误.
可以修饰类、方法、变量,在java源码中被@Deprecated修饰的类、方法、变量等表示不建议使用的,可能会出现错误的,可能以后会被删除的类、方法等,如果现在使用,则在以后使用了这些类、方法的程序在更新
新的JDK、jar包等就会出错,不再提供支持。 个人程序中的类、方法、变量用@Deprecated修饰同样是不希望自己和别人在以后的时间再次使用此类、方法。 当编译器编译时遇到了使用@Deprecated修饰的类、方法、
变量时会提示相应的警告信息。
可以达到抑制编译器编译时产生警告的目的,但是很不建议使用@SuppressWarnings注解,使用此注解,编码人员看不到编译时编译器提示的相应的警告,不能选择更好、更新的类、方法或者不能编写更规范的编码。
同时后期更新JDK、jar包等源码时,使用@SuppressWarnings注解的代码可能受新的JDK、jar包代码的支持,出现错误,仍然需要修改。
@SuppressWarnings(“deprecation”)表示:
如果使用了使用@Deprecated注释的方法,编译器将出现警告信息。
使用这个注释将警告信息去掉。
使用这个注释将警告信息去掉。
8.将下列(A、B、C、D)哪个代码替换下列程序中的【代码】不会导致编译错误?
interface Com{ int M=200; int f(); } class ImpCom implements Com{ 【代码】 }
正确答案: A 你的答案: B (错误)
public int f(){return 100+M;}
int f(){return 100;}
public double f(){return 2.6;}
public abstract int f();
1、实现类可以获取接口中的属性。
2、实现需要是public方法
补充 :
解析:
(1)、必须实现接口中所有的方法。
在实现类中实现接口时,方法的名字、返回值类型、参数的个数及类型必须与接口中的完全一致,并且必须实现接口中的所有方法。
(2)、接口实现类相当于子类,子类的访问权限是不能比父类小的。
接口中所有方法默认都是public,至于为什么要是public,原因在于如果不是public,那么只能在同个包下被实现,可访问权限就降低很多了,那么在实现类中,实现的类相当于子类,子类的访问权限是不能比父类小的,而
在java中一个类如果没有权限的修饰符,默认是friendly(同一个包内的其它类才可访问),所以在实现类中一定要写public
9.面向对象方法的多态性是指()
正确答案: C 你的答案: C (正确)
一个类可以派生出多个特殊类
一个对象在不同的运行环境中可以有不同的变体
针对一消息,不同的对象可以以适合自身的方式加以响应
一个对象可以是由多个其他对象组合而成的
相同类型的变量、调用同一个方法时呈现出多种不同的行为特征,这就是多态。