java基础篇六学习记录
1.volatile关键字是否能保证线程安全?
答案: 否。
volatile关键字用在多线程同步中,可保证读取的可见性,jvm只是保证从主内存加载到线程工作内存的值是最新的值,而非cache中。但多个线程对volatile的写操作,无法保证线程的安全。
假如线程1,线程2在进行read, load操作中,发现主内存中count的值都是5,那么都会加载这个最新的值,在线程1对count进行修改之后,会write到主内存中,主内存中的count变量就会变成6; 线程2由于已经进行了read,load操作,在进行运算之后,也会更新主内存count的变量值为6;导致两个线程及时volatile关键字修改之后,还是会存在并发的情况。
2.下面哪个流是属于面向字符的输入流()
A 、BufferedWriter
B 、FileInputStream
C、 ObjectInputStream
D、InputStreamReader
答案: D
java中io操作中有面向字节和面向字符两种方式。
面向字节的操作作为以八位为单位对二进制的数据进行操作,对数据不进行转换,这些类都是InputStream和OutputStream的子类。
面向字符的操作以字符为单位对数据进行操作,在读的时候将二进制数据转为字符,在写的时候将字符转为字符,在写的时候将字符装为二进制数据,这些类都是Reader和Writer的字类。
3.java能不能通过构造函数创建对象()
A 能
B 不能
答案: A
java 创建对象的几种方式:
(1)通过new语句创建对象,这是最常见的创建对象的方法。
(2)运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的new Instance()实例方法。
(3)调用对象的clone()方法
(4)运用反序列化的手段,调用java.io.ObjectInputStream对象的readObject()方法。
4.下列哪个是叙述是正确的()
A 子类继承父类的构造方法。
B abstract类的子类必须是非abstract类。
c 子类继承的方法只能操作子类继承和隐藏的成员变量。
D 子类重写或新增的方法也能直接操作被子类隐藏的成员变量
答案:C
子类是不继承父类的构造方法的,而是必须调用其构造方法。
abstract类的子类可以是abstract类,如果是非abstract类,就必须重写父类中所有的abstract方法。
d选项中子类新增的方法是不能直接操作被子类隐藏的成员变量的
5.下列哪个叙述是正确的()
A final类可以有子类
B abstract类中只可以有abstract方法
C abstract类中可以有非abstract方法,但该方法不可以用final修饰
D 不可以同时用final和abstract修饰同一个方法
E 允许使用static修饰abstract方法
答案: D
用final修饰的类是不允许被继承的, A 错误
abstract类中也可以有普通成员方法, B错误
abstract类中的非abstract方法是可以用final修饰的,而abstract方法是不可以被final修饰的, C错误
D 同上, 正确
不允许使用static 修饰abstract方法, E 错误
6.当检索一个压缩文件时,首先要建立压缩文件输入流对象,该对象()
A 以选中的压缩文件为参数
B 以FileInputStream对象为参数
C 以InputStreamReader对象为参数
D 以BufferedReader对象为参数
答案: B
在java.io包中提供了对压缩文件进行操作的能力。它是通过压缩文件输入流与压缩文件输出流来实现的。在创建压缩文件输入流时,其初始化参数是一个FileInputStream类的实例。
7.java 程序的并非机制是()
A 多线程
B 多接口
C 多平台
D 多态性
答案: A
java是通过多线程实现并发机制的。多线程是指一个程序包含多个执行流,多线程程序设计的含义是可以将程序任务分成几个并行的子任务。
8.下列关于内部类的说法不正确的是()
A 内部类的类名只能在定义它的类或程序段中或在表达式内部匿名类使用
B 内部类可以使用它所在类的静态成员变量和实例变量
C 内部类不可以使用abstract修饰定义的抽象类
D 内部类可作为其他类的成员,而且可访问它所在类的成员
答案: C
内部类不仅可以用abstract修饰定义为抽象类,也可以用private或protected定义,所以选项c说法错误。