Java中异常、集合、File和IO流选择题总结练习

Java选择题练习:集合(牛客网)

1.“先进先出”的容器是:( )

正确答案: B
A、堆栈(Stack)
B、队列(Queue)
C、字符串(String)
D、迭代器(Iterator)

解析:
A、堆栈是具有先进后出的特点;
B、队列具有先进先出的特点;
C、字符串是一个存储数据的结构,没有严格的出入要求;
D、迭代器的数据读取取决于迭代方式。

2.如果一个list初始化为{5,3,1},执行以下代码后,其结果为()?
nums.add(6);
nums.add(0,4);
nums.remove(1);

正确答案: B
A、[5, 3, 1, 6]
B、[4, 3, 1, 6]
C、[4, 3, 6]
D、[5, 3, 6]

解析:
nums.add(6);//把6添加list中,变为{5,3,1,6}
nums.add(0,4);//在list第0个位置添加4,list变为{4,5,3,1,6}
nums.remove(1);//移除****list的第一个元素,list变为{4,3,1,6}

3.长度为n 的非空顺序表,若在第i个位置插入新的元素x,则i的取值范围是 1≤i≤n+1,需要移动的元素个数为( )。

正确答案: D
A、i
B、n-i-1
C、n-i
D、n-i+1

解析:新的元素替换掉了原来在i的元素,原先在i位置上的元素以及后面元素都往后移,所以需要 + 1 。

4.下面有关java hashmap的说法错误的是?

正确答案: C
A、HashMap 的实例有两个参数影响其性能:“初始容量” 和 “加载因子”。
B、HashMap 的实现不是同步的,意味着它不是线程安全的
C、HashMap通过开放地址法解决哈希冲突
D、HashMap中的key-value都是存储在Entry数组中的

解析:关于HashMap的一些说法:
a) HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。HashMap的底层结构是一个数组,数组中的每一项是一条链表。
b) HashMap的实例有俩个参数影响其性能: “初始容量” 和 装填因子。
c) HashMap实现不同步,线程不安全。 HashTable线程安全
d) HashMap中的key-value都是存储在Entry中的。
e) HashMap可以存null键和null值,不保证元素的顺序恒久不变,它的底层使用的是数组和链表,通过hashCode()方法和equals方法保证键的唯一性
f) 解决冲突主要有三种方法:定址法,拉链法,再散列法。HashMap是采用拉链法解决哈希冲突的。

Java选择题练习:IO流(牛客网)

1.下列流当中,属于处理流的是:()

正确答案: C D
A、FilelnputStream
B、lnputStream
C、DatalnputStream
D、BufferedlnputStream

解析:
节点流:从一个节点读取数据;
处理流:对一个已存在的流进行封装

按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。

  • 节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader.
  • 处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

JAVA常用的节点流

  • 文 件 FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流。
  • 字符串 StringReader StringWriter 对字符串进行处理的节点流。
  • 数 组 ByteArrayInputStream ByteArrayOutputStreamCharArrayReader CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)。
  • 管 道 PipedInputStream PipedOutputStream PipedReaderPipedWriter对管道进行处理的节点流。

常用处理流(关闭处理流使用关闭里面的节点流)

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

流的关闭顺序

  1. 一般情况下是:先打开的后关闭,后打开的先关闭;
  2. 另一种情况:看依赖关系,如果流a依赖流b,应该先关闭流a,再关闭流b。例如,处理流a依赖节点流b,应该先关闭处理流a,再关闭节点流b;
  3. 可以只关闭处理流,不用关闭节点流。处理流关闭的时候,会调用其处理的节点流的关闭方法。

2.在 main() 方法中给出数组buffer和下标i,如果将此下标中的元素显示到控制台上,需要使用( )。

正确答案: A
A、System.out.print (buffer[i]);
B、FileOutputStream fout = new FileOutputStream(this.filename);
C、FileInputStream fin = new FileInputStream(this.filename);
D、System.in.read(buffer)。

解析:在main中已经给出字节数组,直接System.out.print();输出即可。BC都是文件输出输入流,D是标准输入流。

3.下面哪段程序能够正确的实现了GBK编码字节流到UTF-8编码字节流的转换:

byte[] src,dst;

正确答案: B
A、dst=String.fromBytes(src,“GBK”).getBytes(“UTF-8”)
B、dst=new String(src,“GBK”).getBytes(“UTF-8”)
C、dst=new String(“GBK”,src).getBytes()
D、dst=String.encode(String.decode(src,“GBK”)),“UTF-8” )

解析:Spring根本没有fromBytes()这个方法
操作步骤就是先解码再编码
用new String(src,“GBK”)解码得到字符串
用getBytes(“UTF-8”)得到UTF8编码字节数组

Java选择题练习:异常(牛客网)

1.下面哪个行为被打断不会导致InterruptedException:( )?

正确答案: E
A、Thread.join
B、Thread.sleep
C、Object.wait
D、CyclicBarrier.await
E、Thread.suspend

解析:抛InterruptedException的代表方法有:

  • java.lang.Object 类的 wait 方法
  • java.lang.Thread 类的 sleep 方法
  • java.lang.Thread 类的 join 方法

CyclicBarrier是一个屏障类,它的await方法可以简单的理解为:等待多个线程同时到达之后才能继续进行,在此之前它就是这些线程的屏障,线程不能继续进行,而对于失败的同步尝试,CyclicBarrier 使用了一种要么全部要么全不 (all-or-none) 的破坏模式:如果因为中断、失败或者超时等原因,导致线程过早地离开了屏障点,那么在该屏障点等待的其他所有线程也将通过 BrokenBarrierException(如果它们几乎同时被中断,则用 interruptedException)以反常的方式离开。因此它被中断也是可以抛出interruptedException的。

2.下面程序的输出是什么?

public class TestDemo
{
    public static String output = "";
    public static void foo(inti)
    {
        try
        {
            if (i == 1)
            {
                throw new Exception();
            }
        }
        catch (Exception e)
        {
            output += "2";
            return ;
        } finally
        {
            output += "3";
        }
        output += "4";
    }
    public static void main(String[] args)
    {
        foo(0);
        foo(1);
        System.out.println(output);
    }
}

正确答案: B
A、342
B、3423
C、34234
D、323

解析:首先是foo(0),在try代码块中未抛出异常,finally是无论是否抛出异常必定执行的语句,所以 output += “3”;然后是 output += “4”;执行foo(1)的时候,try代码块抛出异常,进入catch代码块,output += “2”;前面说过finally是必执行的,即使return也会执行output += “3”,由于catch代码块中有return语句,最后一个output += “4”不会执行。 所以结果是3423

3.AccessViolationException异常触发后,下列程序的输出结果为( )

static void Main(string[] args)  
{  
    try  
    {  
        throw new AccessViolationException();  
        Console.WriteLine("error1");  
    }  
    catch (Exception e)  
    {  
        Console.WriteLine("error2");  
    }  
    Console.WriteLine("error3");  
} 

正确答案: A 你的答案: A (正确)
A、error2
   error3

B、error3
C、error2
D、error1

解析:
1.若catch(){}块中,如果有throw 语句,则,try{}catch(){} finally{}块之外的代码不执行;否则,执行。
2.try{}中有异常,则异常下面代码不执行。
3.finally{}中代码必执行

4.能单独和finally语句一起使用的块是( )

正确答案: A
A、try
B、catch
C、throw
D、throws

解析:使用try…catch块捕获时可以没有catch块,但当没用catch块的时候必须得有finally块.故选A;
再解释下throw与throws。throws是向外面抛出,与finally无关,throw可以随意使用,但是与finally结合使用的时候,必须是在try/catch/finally组合块中,所以,算不上单独使用。

5.下面有关 JAVA 异常类的描述,说法正确的有()

正确答案: A B C
A、异常的继承结构:基类为 Throwable,Error 和 Exception 。实现 Throwable, RuntimeException 和 IOException 等继承 Exception
B、非 RuntimeException 一般是外部错误(不考虑Error的情况下),其可以在当前类被 try{}catch 语句块所捕获
C、Error 类体系描述了 Java 运行系统中的内部错误以及资源耗尽的情形,Error 不需要捕捉

D、RuntimeException 体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须 被 try{}catch 语句块所捕获

解析:A玩文字游戏,把 实现 Throwable单独看。
在这里插入图片描述
6.下面代码的输出结果是什么?

public class ZeroTest {
    public static void main(String[] args) {
     try{
       int i = 100 / 0;
       System.out.print(i);
      }catch(Exception e){
       System.out.print(1);
       throw new RuntimeException();
      }finally{
       System.out.print(2);
      }
      System.out.print(3);
     }
 }

正确答案: D
A、3
B、123
C、1
D、12

解析:
1、inti = 100/ 0; 会出现异常,会抛出异常,System.out.print(i)不会执行;
2、catch捕捉异常,继续执行System.out.print(1);
3、当执行 thrownewRuntimeException(); 又会抛出异常,这时,除了会执行finally中的代码,其他地方的代码都不会执行。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 编写程序从文件读取数据,并输出到控制台。 ```java import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class ReadFromFile { public static void main(String[] args) { try { File file = new File("data.txt"); Scanner scanner = new Scanner(file); while (scanner.hasNextLine()) { System.out.println(scanner.nextLine()); } scanner.close(); } catch (FileNotFoundException e) { System.out.println("File not found."); } } } ``` 2. 编写程序从控制台读取数据,并将数据写入文件。 ```java import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class WriteToFile { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter data: "); String data = scanner.nextLine(); scanner.close(); try { File file = new File("output.txt"); FileWriter writer = new FileWriter(file); writer.write(data); writer.close(); } catch (IOException e) { System.out.println("Error writing to file."); } } } ``` 3. 编写程序从一个文件复制数据到另一个文件。 ```java import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class CopyFile { public static void main(String[] args) { try { File inputFile = new File("input.txt"); File outputFile = new File("output.txt"); FileInputStream inputStream = new FileInputStream(inputFile); FileOutputStream outputStream = new FileOutputStream(outputFile); byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, length); } inputStream.close(); outputStream.close(); } catch (FileNotFoundException e) { System.out.println("File not found."); } catch (IOException e) { System.out.println("Error copying file."); } } } ``` 4. 编写程序读取一个目录下的所有文件,并输出文件名和文件大小。 ```java import java.io.File; public class ListFiles { public static void main(String[] args) { File directory = new File("."); File[] files = directory.listFiles(); for (File file : files) { if (file.isFile()) { System.out.println(file.getName() + " (" + file.length() + " bytes)"); } } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值