Java基础 IO回顾 题目

来源:互联网 发布:自学游戏制作 知乎 编辑:程序博客网 时间:2024/05/16 17:55
集合+IO部分
40道选择题 (30*1)
 
  1. 单列集合的顶层接口是(    )
    1. Map     
    2. Collection  
    3. List  
    4. Set  
 
  1. ArrayList类的底层数据结构是(   )
    1. 数组结构
    2. 链表结构
    3. 哈希表结构
    4. 红黑树结构
 
  1. LinkedList类的特点是(     )
    1. 查询快
    2. 增删快
    3. 元素不重复
    4. 元素自然排序
 
  1. Vector类的特点是(    )
    1. 线程同步
    2. 线程不同步
    3. 增删快
    4. 底层是链表结构
 
  1. 关于迭代器说法错误的是(   )
    1. 迭代器是取出集合元素的方式
    2. 迭代器的hasNext()方法返回值是布尔类型
    3. List集合有特有迭代器 
    4. next()方法将返回集合中的上一个元素
 
  1. FileReader类描述正确的是(  )
    1. 字节输入流
    2. 字符输入流
    3. 打印流
    4. 序列化流
 
  1. 具有readLine()方法的类是(    )
    1. FileWriter
    2. InputStreamReader
    3. FileReader
    4. BufferedReader
 
  1. 关于newLine()方法描述错误的是(     )
    1. newLine()方法写入换行
    2. newLine()方法与操作系统平台无关
    3. newLine()方法是FileWiter类的方法
    4. newLine()方法是BufferedWriter类的方法
 
  1. 下面代码运行的结果是(  ) 
ArrayList<String> al = new ArrayList<String>();
al.add(true);
al.add(123);
al.add(“abc”);
System.out.println(al);
    1. 编译失败
    2. [true,123]
    3. [true,123,abc];
    4. [abc];
 
  1. 实现下列哪个接口,可以启用序列化功能(   )
    1. Runnable接口
    2. Comparable接口
    3. Serializable接口
    4. Comparator接口
 
  1. 字节输出流的抽象基类是(     )
    1. OutputStream
    2. InputStream
    3. Writer
    4. Reader
 
  1. 下面程序的运行结果是(   )
  FileOutputStream fos = new FileOutputStream(“c:\\demo.txt”);
  fos.write(“abc”.getBytes);
  fos.close();
    1. 在C盘创建文件demo.txt,但文件是空的
    2. 在C盘创建文件demo.txt,并写入数据abc
    3. 将C盘已有的文件demo.txt中追加写入abc
    4. 编译失败
 
  1. 将Map集合中的键存储到Set集合的方法是(    )
    1. entrySet()
    2. get()
    3. keySet()
    4. put()
 
  1. ArrayListVector的区别说法正确的是(    )
    1. ArrayList是线程安全的,Vector是线程不安全
    2. ArrayList是线程不安全的,Vector是线程安全的
    3. ArrayList底层是数组结构,Vector底层是链表结构  
    4. ArrayList底层是链表结构,Vector底层是数组结构
 
  1. 存储到TreeSet集合中的对象必须具有(   )  数据结构是红黑树
    1. 必须实现Comparable接口
    2. main方法
    3. getset方法
    4. 必须实现Serializable接口
 
  1. 将集合转成数组的方法是(   )
    1. asList()
    2. toCharArray()
    3. toArray()
    4. copy()
 
  1. 对于增强for循环说法错误的是(  )
    1. 增强for循环可以直接遍历Map集合 
    2. 增强for循环可以操作数组
    3. 增强for循环可以操作Collection集合
    4. 增强for循环是JDK1.5版本后出现的
 
  1. 对于HashMap集合说法正确的是(   )
    1. 底层是数组结构
    2. 底层是链表结构
    3. 可以存储null值和null键
    4. 不可以存储null值和null键
 
  1. Collections工具类中的binarySearch()方法描述正确的是(    )
    1. binarySearch()方法只能操作Set集合
    2. binarySearch()方法只能操作List集合 
    3. binarySearch()方法只能操作Map集合
    4. binarySearch()可以操作所有的集合
 
  1. 下面代码的运行结果是(     )
  ArrayList al = new ArrayList();
  al.add(“a”);
  al.add(“b”);
  al.add(“c”);
  Iterator it = al.iterator();
  while(it.hasNext()){
String s = (String)it.next();
if(s.equals(“c”)){
al.add(“c1”);
}
}
System.out.println(al)
    1. [a,b,c]
    2. [c1]
    3. [a,b,c,c1]
    4. 抛出ConcurrentModificationException异常
 
  1. Properties类中的哪个方法可以和IO流相关联(     )
    1. getProperty()
    2. setProperty()
    3. load()
    4. stringPropertyNames()
 
  1. 以下哪两个流对象可以实现任意类型文件的成功复制(     )
    1. FileReader FileWriter
    2. FileInputStreamFileOutputStream
    3. BufferedRead BufferedWriter
    4. InputSteamReaderOutputStreamWriter
 
  1. 下面哪个流是字节通向字符的桥梁(     )
    1. InputStreamReader
    2. OutputStreamWriter 
    3. LineNumberReader
    4. ObjectInputStream
 
  1. 关于对象的序列化说法错误的是(     )
    1. 实现序列化的对象必须实现Serializable接口
    2. 实现序列化的对象必须自定义序列号
    3. ObjectOutputStream中的writeObject()方法可以将对象写出
    4. ObjectInputStrean中的readObject()方法可以读取对象
 
  1. 关于Map.Entry接口说法错误的是(     )
    1. 具有getkey()方法
    2. 具有getValue()方法
    3. 具有keySet()方法
    4. 具有setValue()方法
 
  1. Set集合的特点是(     )
    1. 元素有序
    2. 元素无序,不存储重复元素
    3. 存储重复元素
    4. Set集合都是线程安全的
 
  1. 关于将数组转成集合后,不可以进行的操作是(    )
    1. 增加集合中的元素
    2. 迭代集合
    3. 修改集合中的元素 
    4. 获取集合中元素的个数
 
  1. 下面代码运行的结果是  (       )
        ArrayList<String> al = new ArrayList<>();
              al.add("s");
              al.add("ddd");
              al.add("true");
              System.out.println(al);
    1. 编译失败
    2. [s,ddd,true]
    3. [true]
    4. 运行报错
 
  1. 关于字符输入流FileReader描述错误的是(     )
    1. 可以读取文本文件
    2. 是Reader的子类
    3. 具有读取一行的方法
    4. 无法获得要读取文件的字节数
 
  1. 使用字符流可以成功复制哪些文件(     )
    1. 文本文件
    2. 图片文件
    3. 视频文件
    4. 以上都可以复制
 
以下题目为多项选择 (10*2)
  1. File类中的listFiles()方法说法正确的是(     )
    1. 获取File对象封装的路径下的全部文件和文件夹对象
    2. 获取File对象封装的路径下的文件
    3. 该方法返回File类型数组
    4. 该方法返回String类型数组
 
  1. 关于File类中的exists()方法说法错误的是(     )
    1. 判断File对象中封装的路径或者文件是否存在
    2. 此方法返回boolean类型值
    3. 判断File对象封装的路径是否是相对路径
    4. 判断File对象封装的路径是否是绝对路径
 
  1. File类中的isDirectory()方法的作用是(   )
    1. 判断File对象封装的是否是文件
    2. 判断File对象封装的是否是目录
    3. 判断File对象中封装的是否是根目录
    4. 返回值类型是boolean
 
  1. 关于HashMap集合说法正确的是(     )
    1. HashMap集合是双列集合
    2. HashMap集合不允许存储重复键
    3. HashMap集合不允许存储重复值
    4. HashMap集合线程是安全的
 
  1. 下列哪两个方法可以创建目录(     )
    1. createNewFile()
    2. createTempFile()
    3. mkdir()
    4. mkdirs()
 
  1. 在进程转换时,下列转换是不可能发生的(   )
    1. 就绪状态->运行状态
    2. 运行状态->就绪状态
    3. 阻塞状态->运行状态
    4. 死亡状态->新生状态
 
  1. 关于泛型的说法正确的是(     )
    1. 泛型是JDK1.5出现的新特性
    2. 泛型是一种安全机制
    3. 使用泛型避免了强制类型转换
    4. 使用泛型必须进行强制类型转换
 
  1. 关于Properties说法正确的是(    )
    1. 是Hashtable的子类
    2. 是双列集合
    3. 可以和IO结合使用
    4. 是HashMap的子类
 
  1. 关于方法的递归算法,说法正确的是(   )
    1. 递归就是方法自己调用自己
    2. 递归的次数不能过大,否则会导致栈内存溢出
    3. 使用递归算法,方法必须有返回值
    4. 构造方法不可以使用递归算法
 
  1. List集合的遍历方式有如下哪几种 (   )
    1. Iterator迭代器实现
    2. 增强for循环实现
    3.  get()size()方法结合实现
    4. get()length()方法结合实现
 
二、看程序写结果 (5*3)
1、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。
class Test<T> {
    private T name;
    public T getName() {
        return name;
    }
    publicvoid setName(T name) {
        this.name = name;
    }
    publicstaticvoid main(String[] args) {
        Test<String> strTest = new Test<String>();
        strTest.setName("aaa");
        System.out.println(strTest.getName());
        Test<Integer> intTest = new Test<Integer>();
        intTest.setName(1234);
        System.out.println(intTest.getName());
    }
}
 
2、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。
class Animal {
}
class Dogextends Animal {
}
class Catextends Animal {
}
class GenericDemo {
    publicstaticvoid main(String[] args) {
        Collection<Object> c = new ArrayList<Object>();
        Collection<Animal> c1 = new ArrayList<Animal>();
        Collection<Animal> c2 = new ArrayList<Dog>();
        Collection<? extends Animal> c5 =new ArrayList<Animal>();
        Collection<? extends Animal> c6 =new ArrayList<Dog>();
Collection<? extends Animal> c4 =new ArrayList<Object>();
        Collection<? super Animal> c8 =new ArrayList<Object>();
        Collection<? super Animal> c9 =new ArrayList<Animal>();
        Collection<? super Animal> c10 =new ArrayList<Dog>();
    }
}
3、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。
学生类上面已给出Student并且重写了hashCode() ToString()两个法
 
publicclass Demo {
    publicstaticvoid main(String[] args) {
        HashSet<Student> hs = new HashSet<Student>();
        hs.add(new Student("zhangsan", 19));
        hs.add(new Student("zhangsan", 19));
        hs.add(new Student("lisi", 20));
        hs.add(new Student("wangwu", 22));
        for (Student s : hs) {
            System.out.println(s);
        }
    }
}
 
4、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。
class IOTest {
    publicstaticvoid main(String[] args)throws IOException {
        write();
        read();
    }
    publicstaticvoid write()throws IOException {
        FileWriter fw =new FileWriter("d:\\fw.txt");
        fw.write("hello");
    }
    publicstaticvoid read()throws IOException {
        FileReader fr =new FileReader("d:\\fw.txt");
        int ch = -1;
        while ((ch = fr.read()) != -1) {
            System.out.print((char) ch);
        }
    }
     }
 
5、给出以下代码,请问该程序的运行结果是什么?如有问题,请说明原因。
class test {
     publicstaticvoid main(String[] args)throws IOException {
          write();
          read();
     }
     publicstaticvoid write()throws IOException {
     BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\bw.txt",true));
          bw.write("hello");
          bw.newLine();
          bw.flush();
          bw.close();
     }
 
     publicstaticvoid read()throws IOException {
          BufferedReader br = new BufferedReader(new FileReader("d:\\bw.txt"));
          String line = null; // String line ;
          while ((line = br.readLine()) !=null) {
               System.out.print(line);
          }
          br.close();
     }
}
输出hello
三、简答题 (10*2)
1、请解释,可以把List<String>传递给一个接收List<Object>参数的方法吗?为什么?
不可以的,两个list集合的范型必须一直,范型是作用于元素的,不是本身的类型
2、请简述HashSet是如何保证元素唯一性的?
HashSet集合的特点是元素无序和不重复 。
首先,HashSet的底层数据结构是哈希表。哈希表就是存储一系列哈希值的表,而哈希值是由对象的hashCode()方法生成的。
确保元素唯一性的两个方法,hashCode()和equals()方法。
3、请说明Map接口和Collection接口的区别
     Map接口是双列集合顶层接口,每个位置存储一对元素(key, value)
         Collection接口是单列集合顶层接口,每个位置存储一个元素
 
4、说说throwsthrow的区别?
throws关键字通常被应用在声明方法时,用来指定可能抛出的异常。多个异常可以使用逗号隔开。当在主函数中调用该方法时,如果发生异常,就会将异常抛给指定异常对象。
throw关键字通常用在方法体中,并且抛出一个异常对象。程序在执行到throw语句时立即停止,它后面的语句都不执行。通常throw抛出异常后,如果想在上一级代码中捕获并处理异常,则需要在抛出异常的方法中使用throws关键字在方法声明中指定要抛出的异常;如果要捕获throw抛出的异常,则必须使用try{}catch{}语句。
 
5、请简述io流的分类和功能
按照数据流向
输入流 读入数据 硬盘 ----- 内存  inputStream
输出流 写出数据 内存 ------ 硬盘 outputStream
 
按照数据类型
字符流
字节流
6、请简述递归是什么?注意事项是什么?
方法定义中调用方法本身 ,构造函数中不可以使用
7、字节流和字符流的两个基类是什么?它们是谁是子类?
字节流的两个基类是InputStreamOutputStream,字符流的两个基类是ReaderWriter,它们都是Object类的直接子类,字节流是处理以8位字节为基本单位的字节流类;ReaderWriter类是专门处理16位字节的字符流类。 
8、程序运行时,会在内存中创建多个对象,然而程序结束后,这些对象便被当作垃圾    回收了。如果希望永久保存这些对象
如果希望永久保存这些对象,则可以将对象转为字节数据写入到硬盘上,这个过程称为对象序列化。
9、final finally的区别?
Final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承
finally是异常处理语句的一部分,表示总执行
 
10、什么是java序列化,如何实现?
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行硫化,可以对流化后的对象进行读写操作,也可以将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题
序列化的实现:将需要被序列化的类实现Serializable接口
 
 
四、编程题  (3*5)
 1从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合
1、高效字符输入流和创建集合
2、操作文件(一次读取一行)添加到集合中
3、释放资源
publicstaticvoid test1()throws IOException {
       /**
         * 从文本文件中读取数据(每一行为一个字符串数据)到集合中,并遍历集合
         * 1、高效字符输入流和创建集合
         * 2、操作文件(一次读取一行)
         *    添加到集合中
         * 3、释放资源
         */
 
       // 1、高效字符输入流和创建集合
        List<String> nameList =new ArrayList<String>();
        BufferedReader bufferedReader =new BufferedReader(new FileReader(new File("5.txt")));
       /*
         * 2、操作文件(一次读取一行) 添加到集合中
         */
        String str;
       while ((str = bufferedReader.readLine()) !=null) {
            nameList.add(str);
        }
       // 3、释放资源
 
        bufferedReader.close();
 
       for (String name : nameList) {
            System.out.println(name);
        }
 
    }
 
2、复制个视频文件一次操作一个字节数组,并改一个名字
publicstaticvoid test2()throws Exception {
       // 1、创建流
        InputStream inputStream =new FileInputStream(
               "D:\\java_study\\java基础课程\\day06\\avi\\06.01_java测试题.avi");
        OutputStream outputStream =new FileOutputStream("测试.avi");
       // 2、操作文件 一次操作一个字节数组
 
       byte[] b =newbyte[1024];
       int len;
       while ((len = inputStream.read(b)) != -1) {
 
            outputStream.write(b, 0, len);
        }
        outputStream.close();
        inputStream.close();
    }
3打印F盘符下和F下所有目录中.txt文件
publicstaticvoid img(File dir) {
 
        File[] files = dir.listFiles();
        String[] s = {".jpg",".png",".apk" };
       if (files ==null) {
            System.out.println("亲!没有东西啊!");
           return;
        }
       for (File file : files) {
           if (file.isFile()) {
 
               for (String string : s) {
                   
                   if (file.getName().endsWith(string)) {
 
                        System.out.println(file.getName());
 
                    }
                }
            }else {
               img(file);
            }
        }
 
    }
 
原创粉丝点击