12.B---如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点。
C---BufferedWriter的newline()方法 13.A---LinkedList和ArrayList都不是线程安全的。 C---Iterator的next()方法返回值是Object,需要强制转换成自己需要的类型。 14.D---一个file对象代表了一个文件或者文件夹的引用,并不是直接物理上的。 15.B---Reader是读取字符的接口,FileReader是文件字符读取接口。 C--- ObjectInputStream和ObjectOutputStream是支持序列化对象的,但是Reader和Writer是不支持对象序列化的。 D---数据流中最小的单位是B字节 16.A---InputstreamReader对象可以做BufferedReader类构造函数的参数。 B---假如序列化处或者反序列化处的user类被修改了,系统生成的两个serialVersionUID就会不一致, 导致反序列化失败。 C---入口函数main可以被重载 D---add是将传入的参数作为当前List中的一个Item存储,即使你传入一个List也只会令当前的List增加1个元素,而addAll是传入一个List,将此List中的所有元素加入到当前List中,也就是当前List会增加的元素个数为传入的List的大小 E---clone()方法对二维数组克隆的还是引用地址,所以会改变。 17.B---一个file对象代表了一个文件或者文件夹的引用,并不是直接物理上的。 D---ctrl+shift+Mde 的作用是Add Import E---Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。数组可以存储基本数据类型,也可以存储引用数据类型,集合只能存储引用数据类型。 18.A---一个或两个对象 B---四种显式的创建对象的方式: 1,用new语句创建对象 2,运用反射手段,调用java.lang.Class 或者 java.lang.reflect.Constructor 类的newInstance()实例方法 3,调用对象的clone()方法 4,运用序列化手段,调用java.io.ObjectInputStream 对象的 readObject()方法. C--至少有两种情况下finally语句是不会被执行的: (1)try语句没有被执行到,如在try语句之前return就返回了,这样finally语句就不会执行。这也说明了finally语句被执行的必要而非充分条件是:相应的try语句一定被执行到。 (2)在try块|catch块中有System.exit(0);这样的语句。System.exit(0)是终止Java虚拟机JVM的,连JVM都停止了,所有都结束了,当然finally语句也不会被执行到。 D---main方法被声明为private时可以正常编译,但运行的时候会提示"main方法不是public的"。 19.A---String有length()这个方法 B---首先String不属于8种基本数据类型,String是一个对象。 因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。 C--- i + 1 < i 的情况是存在的,以int为例子,一个int占用4个字节,一个字节二进制为8位,那么一个int的二进制位32位,其中高位为符号位,1代表负0代表正。从二进制层面来看,int最大值+1 就会变为最小值由于int只占用32位,所以不管怎么变化,超过32位的将被舍弃所以 -1+1的二进制本应该是 100000000000000000000000000000000,由于1在第33位所以舍弃后就是32个0,也就是0 D---ArrayList list=new ArrayList(20);扩容了几次? ArrayList的构造函数总共有三个: (1)ArrayList()构造一个初始容量为 10 的空列表。 (2)ArrayList(Collection<? extends E> c)构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。 (3)ArrayList(int initialCapacity)构造一个具有指定初始容量的空列表。 ArrayList list=new ArrayList();?? 这种是默认创建大小为10的数组,每次扩容大小为1.5倍 ArrayList list=new ArrayList(20);? 这种是指定数组大小的创建,没有扩充 调用的是第三个构造函数,直接初始化为大小为20的list,没有扩容,所以为0次 ps:ArrayList()构造一个空列表,在添加第一个元素时,会自动扩展。 E---1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。实现了Queue接口。 3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。这一点要看实际情况的。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。 4.查找操作indexOf,lastIndexOf,contains等,两者差不多。 5.随机查找指定节点的操作get,ArrayList速度要快于LinkedList. 这里只是理论上分析,事实上也不一定,ArrayList在末尾插入和删除数据的话,速度反而比LinkedList要快。 20.在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。 第一是创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。 第二是就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。 第三是运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。 第四是阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。sleep,suspend,wait等方法都可以导致线程阻塞。 第五是死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪。
二,填空题 1,Throwable类有两个子类:error类 和 Exception类 2,集合框架里面collection分为List和Set两大类 3,流按照流向来可以分为输入流和输出流 4,多太的类型可以分为运行时多态和编译时多态 5,线程安全中常用的同步方式有同步代码块和同步方法 三,判断题 3.原始数据类型 包装类 boolean(布尔型) Boolean byte(字节型) Byte char(字符型) Character short(短整型) Short int(整型) Integer long(长整型) Long float(浮点型) Float double(双精度浮点型) Double 6.类的修饰符可以是: public 公共类 default 默认类(即class前什么都不加) abstract 抽象类 fanal 不能被继承的类 static 静态类 private 只能修饰内部类,一般不推荐使用 个人认为类是可以被protected修饰的,比如内部类,但是顶级类不能被protected修饰。 8.方法重载跟返回值类型和修饰符无关 Java的重载 是发生在本类中的,重载的条件是在本类中有多个方法名相同,但参数列表不同(可能是,参数个数不同,参数类型不同),跟返回值无关。 10.线程是程序执行流的最小单元 四,问答题 1.异常与错误的区别,java为什么设计异常机制 ①.Exception(异常)是应用程序中可能的可预测、可恢复问题。一般大多数异常表示中度到轻度的问 题。异常一般是在特定环境下产生的,通常出现在代码的特定方法和操作中。在 EchoInput 类中,当试 图调用 readLine 方法时,可能出现 IOException 异常。 Exception 类有一个重要的子类 RuntimeException。RuntimeException 类及其子类表示“JVM 常用操 作”引发的错误。例如,若试图使用空值对象引用、除数为零或数组越界,则分别引发运行时异常 (NullPointerException、ArithmeticException)和 ArrayIndexOutOfBoundException。 ②.Error(错误)表示运行应用程序中较严重问题。大多数错误与代码编写者执行的操作无关,而表示 代码运行时 JVM(Java 虚拟机)出现的问题。例如,当 JVM 不再有继续执行操作所需的内存资源时, 将出现 OutOfMemoryError。 异常机制的作用:通过异常机制提高JAVA代码健壮性 异常机制的一个明显的好处是,使用异常降低错误处理代码的复杂度,如果不使用异常,那么对于可能 出现的特定错误,必须检查处理,如果使用异常,就把这些可能的错误使用异常机制进行捕获,大大节 省代码,而且把“正常执行”的代码与“异常”代码进行分离。 2.final 和 finally区别 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally 是异常 处理语句结构的一部分,表示总是执行。 五,编程题 2.有1 2 3 4 这几个数字,能组成多少个互不相同且无重复数字的三位数?打印出来 public static void main(String[] args) { int num=0; for(int i=1;i<=4;i++){ for(int j=1;j<=4;j++){ for(int k=1;k<=4;k++){ if(i!=j&&i!=k&&j!=k){ num++; System.out.println(i*100+j*10+k); } } } } System.out.println(num); }