每天搞懂10道Java基础题day03

题一
1.指出下列程序运行的结果()
public class Example{
    String str = new String("good");
    char[ ] ch = { 'a' , 'b' , 'c' };
    public static void main(String args[]){
        Example ex = new Example();
        ex.change(ex.str,ex.ch);
        System.out.print(ex.str + " and ");
        System.out.print(ex.ch);
    }
    public void change(String str,char ch[ ]){
        str = "test ok";
        ch[0] = 'g';
    }
}
正确答案: B   
A:good and  abc
B:good and gbc
C:test ok and abc
D:test ok and gbc
解析:直接赋值而不是使用new关键字给字符串初始化,在编译期的时候就将String放入了字符串常量池中;
使用new关键字初始化字符串时,是在推栈区存放变量名和内容;字符串在拼接的过程在运行时,才在堆里创建对象;
一般可以认为可以认为使用"=="比较的是引用,equals比较的是内容。
题二
2.JDK中提供的java、javac、jar等开发工具也是用Java编写的。
A:对
B:错
正确答案: A 
除了jre中的JVM不是用java实现的,jdk的开发工具包应该都是用java写的
#### 题三
3.下面程序输出结果为():
public class Demo{
public static void main (String [] args) {
String lx = “LeXin”;
String nb = lx;
lx = “Fenqile”;
System.out.println(nb);
}
}
正确答案: B C 
A:程序异常,编译不通过
B:程序编写正常,可正常运行
C:程序输出值为“LeXin”
D:程序输出值为“Fenqile”
解析:
首先将Lx指向“LeXin”的应用赋给了nb,然后Lx又指向了“Fenqile”,
最后输出nb所指向的内容,所以输出“LeXin”。
题四
4.以下关于final关键字说法错误的是()
A:final是java中的修饰符,可以修饰类、接口、抽象类、方法和属性
B:final修饰的类肯定不能被继承
C:final修饰的方法不能被重载
D:final修饰的变量不允许被再次赋值
正确答案: A C 
解析:
1.final修饰变量,则等同于常量
2.final修饰方法中的参数,称为最终参数。
3.final修饰类,则类不能被继承
4.final修饰方法,则方法不能被重写。
5.final 不能修饰抽象类
6.final修饰的方法可以被重载 但不能被重写
题五
5.下面哪种流可以用于字符输入:
A:java.io.inputStream
B:java.io.outputStream
C:java.io.inputStreamReader
D:java.io.outputStreamReader
正确答案: C
解析:A是字节输入流
          B是字节输出流
          D是字符输出流
题六
6.下列说法正确的是()?
A:我们直接调用Thread对象的run方法会报异常,所以我们应该使用start方法来开启一个线程
B:一个进程是一个独立的运行环境,可以被看做一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程可以被称为轻量级进程。线程需要较少的资源来创建和驻留在进程中,并且可以共享进程中的资源
C:synchronized可以解决可见性问题,volatile可以解决原子性问题
D:ThreadLocal用于创建线程的本地变量,该变量是线程之间不共享的
正确答案: B D
解析:
A 可以直接调用run方法 但是不会启动线程
volatile与synchronized的区别:
volatile本质是在告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取,synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住.
volatile仅能使用在变量级别,synchronized则可以使用在变量,方法.
volatile仅能实现变量的修改可见性,但不具备原子特性,而synchronized则可以保证变量的修改可见性和原子性.
volatile不会造成线程的阻塞,而synchronized可能会造成线程的阻塞.
volatile标记的变量不会被编译器优化,而synchronized标记的变量可以被编译器优化.
题七
7.关于java集合下列说法不正确的有哪些()
A:HashSet 它是线程安全的,不允许存储相同的对象
B:ConcurrentHashMap 它是线程安全的,其中存储的键对象可以重复,值对象不能重复
C:Collection接口是List接口和Set接口的父接口,通常情况下不被直接使用
D:ArrayList线程安全的,允许存放重复对象
正确答案: A B D
解析:
A:HashSet它不是线程安全的,属于Set接口,实现类的特征是无序 不可重复性
B:ConcurrentHashMap 它是线程安全的,其中存储的键对象是不能重复的,值对象是可以重复的
D:ArrayList不是线程安全的,属于List接口,实现类的特征是有序,可重复
题八
8.关于Java的一些概念,下面哪些描述是正确的:(    )
A:所有的Java异常和错误的基类都是java.lang.Exception, 包括java.lang.RuntimeException
B:通过try … catch … finally语句,finally中的语句部分无论发生什么异常都会得到执行
C:java中所有的数据都是对象
D:Java通过垃圾回收回收不再引用的变量,垃圾回收时对象的finallize方法一定会得到执行
E:Java是跨平台的语言,无论通过哪个版本的Java编写的程序都能在所有的Java运行平台中运行
F:Java通过synchronized进行访问的同步,synchronized作用非静态成员方法和静态成员方法上同步的目标是不同的
正确答案: B F
解析:
a 所有的错误的基类都是Throwable
c java中的基本数据类型就不是对象
d.垃圾回收器并不总是工作,只有当内存资源告急时,垃圾回收器才会工作;即使垃圾回收器工作,finalize方法也不一定得到执行,
这是由于程序中的其他线程的优先级远远高于执行finalize()函数线程的优先级。
e:低版本的无法运行高版本的
题九
9.关于下面一段代码,以下说法正确的是: ()
public class Test {
    private synchronized void a() {
    }
    private void b() {
        synchronized (this) {
        }
    }
    private synchronized static void c() {
    }
    private void d() {
        synchronized (Test.class) {
        }
    }
}
正确答案: A C
A:同一个对象,分别调用方法a和b,锁住的是同一个对象
B:同一个对象,分别调用方法a和c,锁住的是同一个对象
C:同一个对象,分别调用方法b和c,锁住的不是同一个对象
D:同一个对象,分别调用方法a、b、c,锁住的不是同一个对象
解析:
修饰非静态方法 锁的是this 对象
修饰静态方法 锁的是class对象
题十
10.若有下列定义,下列哪个表达式返回false?
String s = "hello";
String t = "hello";
char c[] = {'h','e','l','l','o'} ;
A:s.equals(t);
B:t.equals(c);
C:s==t;
D:t.equals(new String("hello"));
正确答案: B
解析:
A、D选项是对字符串内容的比较。JVM为了减少字符串对象的重复创建,其维护了一个特殊的内存,
这段内存被成为字符串常量池。代码中出现字面量形式创建字符串对象时,JVM首先会对这个字面量进行检查,
如果字符串常量池中存在相同内容的字符串对象的引用,则将这个引用返回,否则新的字符串对象被创建,
然后将这个引用放入字符串常量池,并返回该引用。所以返回true。
C选项是引用地址的比较,同上也属于常量池的同一个字符串地址,所以相等返回true。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值