【Java错题收集与解析】(1)

来源:互联网 发布:网络运行工作计划 编辑:程序博客网 时间:2024/06/01 07:41

1.访问修饰符的作用范围从大到小是?
答案:public->protected->default->private
解析:protected比default的作用范围大,protected修饰的成员,除了可以被同包中的类进行调用,还可以被不同包下的当前类的子类所调用。而default,顾名思义,默认权限,也就是同包权限。

2.Math.round(2.6)=? Math.round(-2.6)=?
答案:Math.round(2.6)=3 Math.round(-2.6)=-2
解析: Math.round()是四舍五入,返回最近的整数。

3.

public class Test {    public static void change(String message,StringBuffer stringBuffer){        message="讨厌";        int  sb_length = stringBuffer.length();        stringBuffer.delete(0,sb_length);        stringBuffer.append("才怪");    }    public static void main(String[] args) {        String message="喜欢";        StringBuffer stringBuffer=new StringBuffer();        stringBuffer.append("好久了");        change(message,stringBuffer);        System.out.println("我"+message+"你"+stringBuffer.toString());    }}

输出结果为?
答案:我喜欢你才怪
解析:除了8种原始的数据类型外,方法调用传递的都是引用,从本质上来说,就是按值传递,当我们调用change方法时,实际上是把message的值(message指向空间的首地址)复制了一份,给形参message,我们在change方法里面,由于string是字符串常量,因此“message=”讨厌”;”只是改变了形参message的指向,使它指向了另一个字符串常量,因此主函数的message不变;
同理,stringBuffer是对申请的那段空间的引用,它的值其实是那段空间的首地址,当我们调用change方法时,实际上是把这个引用关系复制了一份给形参stringBuffer,当我们通过形参stringBuffer,改变形参stringBuffer所指向空间的值时,主函数里的stringBuffer所指向的空间的值就会改变,因为它们指向的是同一个空间。
再来看一个类似的题

public class Test {    public static void change(String message,StringBuffer stringBuffer){        message="讨厌";        stringBuffer=new StringBuffer();        stringBuffer.append("才怪");    }    public static void main(String[] args) {        String message="喜欢";        StringBuffer stringBuffer=new StringBuffer();        stringBuffer.append("好久了");        change(message,stringBuffer);        System.out.println("我"+message+"你"+stringBuffer.toString());    }}

这次的运行结果是?
答案:我喜欢你好久了
解析:很简单,正如之前所说的,形参实参传递其实是复制,当我们调用change方法时,主函数里的stringBuffer和形参stringBuffer指向同一段空间a,这时,我们更改了形参stringBuffer的指向,使他指向另外一 段空间b,再改变形参stringBuffer所指向空间的值,实际上是改变了b空间的值,而a空间的值(主函数里的stringBuffer所指向的空间的值)并没有发生改变。

4.以下关于类的说法正确的是?
A只要没有定义不带参数的构造方法,JVM都会给类生成一个默认的构造方法
B局部变量的作用范围仅仅在定义他的方法内,或者是在定义它的控制流块中
C使用其他类的方法,仅仅需要引用 方法的名字即可
D在类中定义的变量成为类的成员变量,在其他类中可以直接使用
答案:B
解析: 只要没有定义构造方法,JVM都会给类生成一个默认的构造方法,A错; 使用其他类的方法,要使用类名.方法来调用,C错;只有在类中定义的被static修饰的变量才是类的成员变量,而且,类的private修饰的成员变量不能被其他类使用,D错。

5.某系统有11个资源,n个进程公用这些资源,每个进程要使用3个资源,当n的取值不超过多少时,系统不会发生死锁?
答案:5
解析:这类题型可以这样来计算,a个资源,n个进程,每个进程b个资源,求n的最小值,那么,n的最小值就是:a/(b-1),当n小于等于a/(b-1)时,系统就不会发生死锁。

原创粉丝点击