JAVA期终考试总结

一,不定项选择题
1.JAVA常用的节点流有以下几个:
 文 件 FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流。
 字符串 StringReader StringWriter 对字符串进行处理的节点流。
 数 组 ByteArrayInputStream ByteArrayOutputStreamCharArrayReader CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)。
 管 道 PipedInputStream PipedOutputStream PipedReaderPipedWriter对管道进行处理的节点流。
 父 类 InputStream OutputStream Reader Writer

 常用处理流(关闭处理流使用关闭里面的节点流)
 缓冲流:BufferedInputStrean BufferedOutputStream BufferedReader BufferedWriter
 增加缓冲功能,避免频繁读写硬盘。
 转换流:InputStreamReader OutputStreamReader实现字节流和字符流之间的转换。
 数据流 DataInputStream DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来。

3.java.util.Hashtable
  java.util.concurrent.ConcurrentHashMap
  java.util.concurrent.CopyOnWriteArrayList
  java.util.concurrent.CopyOnWriteArraySet
  Vector
  StringBuffer是线程安全的,StringBuilder不是。

7.从语言一级来看,java不支持运算符重载。
String类的"=","+","+=",看似运算符重载,实际不是,只是在java编译器里做了一点手脚。
java编译器对String的运算符做了特殊处理。

比如:
String s = "s1";
s += "s2";
编译器转换成了:
String s = "s1";
s = (new StringBuilder()).append(s).append("s2").toString();

8.~10=?
因为正数的原码,反码,补码都是它本身。
所以取反为1111 0101(补码)
反码为1111 0100
原码为1000 1011 =-11

10.int i=2;int j=3选出最大值与最小值(BD)
A,i^j=1   B,i|j=3   C,i&j=2   D,~i=-3

11.A---FileOutputStream没有空参的 构造方法
D---Has和Map实现Map接口,可以允许其他类型的键和值对象,并允许将null用作键和值

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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值