java基础易错题(一 IO流及多线程部分)

版权声明:转载或者引用本文内容请注明来源及原作者 https://blog.csdn.net/a755199443/article/details/88383380
  1. InputStreamReader是转换流,可以将字节流转换成字符流,是字符流与字节流之间的桥梁。它的实现使用的设计模式是( C )。(选择一项)

    A. 工厂模式
    B. 装饰模式
    C. 适配器模式
    D. 代理模式

io中用到的设计模式是适配器模式的有InputStreamReader和OutputStream
io中用到的装饰(包装)模式是适配器模式的有BufferedInputStream和BufferedOutputStream等

  1. 下列关于Java线程的说法正确的是( 无答案(一定要选 可选D) )。(选择一项)

    A 每一个Java线程可以看成由代码、一个真实的CPU以及数据三部分组成
    B. 创建线程的两种方法中,从Thread类中继承方式可以防止出现多父类的问题
    C. Thread类属于java.util程序包
    D. 使用new Thread(new X()).run();方法启动一个线程
    A不是真实CPU,而是一个虚拟的CPU,B的话实现Runnable才能够防止出现多父类的问题;Thread 属于java.lang包下面的类,而D中run方法调用的是对象中的run方法
    启动线程肯定要用start()方法。当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。当cpu分配给它时间时,才开始执行run()方法(如果有的话)。START()是方法,它调用RUN()方法.而RUN()方法是你必须重写的. run()方法中包含的是线程的主体
    这里毕竟有一些争议,因为控制台可以打印内容 一定要选只能选D 题目不好

  2. 以下说法中关于线程通信的说法错误的是( D )。(选择一项)

    A. 可以调用wait()、notify()、notifyAll()三个方法实现线程通信
    B. wait()、notify()、notifyAll()必须在synchronized方法或者代码块中使用
    C. wait()有多个重载的方法,可以指定等待的时间
    D. wait()、notify()、notifyAll()是Object类提供的方法,子类可以重写

易错选项 B
wait()、notify()、notifyAll()必须在synchronized方法或者代码块中使用
因为调用wait()就是释放锁,释放锁的前提是必须要先获得锁,先获得锁才能释放锁。
而notify(),notifyAll()是将锁交给含有wait()方法的线程,让其继续执行下去,如果自身没有锁,怎么叫把锁交给其他线程呢;(本质是让处于入口队列的线程竞争锁)
D选项中wait()、notify()、notifyAll()都是被final修饰的方法

  1. 以下协议都属于TCP/IP协议栈,其中位于传输层的协议是( AD )。(选择二项)

    A TCP
    B. HTTP
    C. SMTP
    D. UDP
    在这里插入图片描述

  2. 在Java中,只要给定类的名字,那么就可以通过 Java反射技术来获得类的所有信息,进而创建对象和执行方法。( X )
    光有类的名字还不够,forName()方法还需要提供类的路径,我写过一篇关于反射机制获取方法的文章 可以去看看.

猜你喜欢

转载自blog.csdn.net/a755199443/article/details/88383380