9-4
解析:
列表(List)的元素是有序,可重复的
集合(Set)的元素是无序,不可重复的
public class Test{
public static void main(String [] args){
List list=new ArrayList();
list.add("a");
list.add("b");
list.add("a");
Set set=new HashSet();
set.add("a");
set.add("b");
set.add("a");
System.out.println(list.size()+","+set.size());
}
}
运行主要的程序会打印出的是什么?
解析:
List和Set的区别,set中不能放重复的元素
Set中重复的定义,未定义自己的equals方法的话,调用默认的,也就是直接==
首先会调用Object的hashCode方法判断hashCode是否已经存在,如不存在则直接插入元素
如果已经存在则调用Object对象的equals方法判断是否返回true,如果为true则说明元素已经存在,如为false则插入元素。
解析:
Set不能有重复的元素,且是无序的,要有空值也只能有一个,因为他不允许重复。
List可以有重复元素,且是有序的,要有空值也可以有多个,因为他可以重复
Java的有序无序:指的是你按照顺序存进去数据,然后再按照顺序取出来,两者是一样的。比如List(0)我放的是“a”,那么我list.get(0)取出来也是“a”。并不代表我存了打乱顺序存1到10十个数,它会自己给按照升序或者降序给你排好序。
解析:
在Java中一个Unicode占2个字节(byte)
一个字节等于8比特位(bit)
所以每个Unicode码占用16个比特位
解析:
A:垃圾回收在JVM中优先级相当相当低
B:垃圾收集器(GC)程序开发者只能推荐JVM进行回收,但何时回收,回收哪些,程序员不能控制
C:垃圾回收机制只是回收不再使用的JVM内存,如果程序有严重BUG,照样内存溢出
D:进入DEAD的线程,它还可以恢复,GC不会回收
解析:
final用于可以声明属性和方法,分别表示属性的不可变及方法的不可覆盖。不是方法的不可继承!!!
9-5
解析:
A:父类的引用直接指向子类的对象,即向上转型;当子类的引用直接指向父类的对象时,则需要强制转换。
public class Increment
{
public static void main(String args[])
{
int a;
a = 6;
System.out.print(a);
System.out.print(a++);
System.out.print(a);
}
}
解析:
static方法或语句块没有实例时可以使用,而此时不需要构造实例,所以不能用this()和super()
解析:
A:抽象类不能实例化,因为有抽象方法没有实现
B:可以被继承。派生类可以实现抽象方法
C:子类可以是抽象的,也可以非抽象
D:太肯定
E:可以被抽象类继承,也可以被非抽象类继承
解析:
实际考察的是两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型
子类抛出异常小于等于父类方法抛出异常
子类访问权限大于等于父类方法访问权限
解析:
抛InterruptedException的代表方法有:
父类没有无参的构造函数,所以子类需要在自己的构造函数中显式调用父类的构造函数
9-6
int i=0;
int j=0;
if((++i>0)||(++j>0))
{ //打印出i和j的值。 }
解析:
&&和||为短路与,短路或
&&若前面的表达式为false,整个表达式为false,所以后面的表达式无论true和false都无法影响整个表达式的逻辑,所以为了提高效率后面的表达式就不会执行
&和|为不短路与,不短路或
无论什么情况,前面的和后面的都要执行
public class Test
{
public int x;
public static void main(String []args)
{
System. out. println("Value is" + x);
}
}
解析:
非静态成员只能被类的实例化对象引用,因此这里在静态方法中访问x会造成编译错误
当类加载时,static静态方法随着类加载而初始化,此时实例对象还没被创建,但是非静态成员变量需要等到实例对象创建才会被初始化,故无法被引用。
解析:
Java不允许单独的方法,过程或函数存在,需要隶属于某一类中——AB错
Java语言中的方法属于对象的成员而不是类的成员,不过,其中静态方法属于类成员——C错
解析:
throws用来在方法上声明该方法不需要处理的异常类型,用在方法上后面跟异常类名,可以是多个异常类
throw用于抛出具体异常类的对象,用在方法内,后面跟异常对象只能是一个异常类型实体
try块必须和catch和finally同时存在,不能单独存在,二者必须出现一个
finally块总会执行,不论是否有错误
9–7
解析:
默认初始化,基本类型是0,布尔类型是false,引用类型为null
解析:
输出到控制台,直接System.out.println
解析:
this()才必须是构造函数中的第一个可执行语句,用this调用语句并不需要
public class Parent {
private void m1(){}
void m2(){}
protected void m3(){}
public static void m4(){}
}
解析:
通过继承,子类可以拥有所有父类对其可见的方法和域
A:私有方法只能在本类中可见,故不能继承
B缺省访问修饰符只在本包中可见,在外包中不可见
C:保护修饰符凡是继承自该类的子类都能访问,当然可以被继承覆盖
D:static修饰的成员属于类成员,父类字段或方法只能被子类同名字段或方法遮蔽,不能被继承覆盖。
解析:
C:拉链法解决哈希冲突
byte b1=1,b2=2,b3,b6;
final byte b4=4,b5=6;
b6=b4+b5;
b3=(b1+b2);
System.out.println(b3+b6);
解析:
没有final修饰的变量相加后会被自动提升为int型,与目标类型byte不相容,需要强制转换(向下转型)
被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了。而b1和b2是byte类型,Java中计算会将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要强制类型转换
9-8
public class Test {
public static void main(String[] args) {
System.out.println(args[0]);
}
}
若采用命令行java Test one two three
调用,则程序输出的结果为:
解析:
Test是类名,one two three才是main方法的参数
解析:
只有在不显示声明构造方法时,系统才提供默认无参构造方法
解析:
JVM中没有进程的概念,但是JVM中的线程映射为操作系统中的进程,对应关系为1:1.那这道题的问题就是JVM中线程如何异步执行,在JVM中是使用监视器锁来实现不同线程的异步执行,在语法的表现就是synchronized。
Boolean flag = false;
if (flag = true)
{
System.out.println(“true”);
}
else
{
System.out.println(“false”);
}
解析:
在if(flag=true){}
中,只是一个赋值语句,隐含条件为
if((flag=true)==true){}
解析:
Java中除了基本数据类型都是引用数据类型Java中的基本数据类型如下:
除此之外都是引用类型
解析:
Java标识符由数字,字母,下划线,美元符号组成,首位不能是数字。并且Java关键字不能作为标识符。
解析:
“abc”保存在常量池,str引用的对象保存在堆里,而Java7中又把常量池移到了堆中,所以这题不严谨。
str引用的对象,也就是生成的String对象而非str引用变量
9-9