<>JAVA复习题
<>第1章 Java开发入门
<>习题
<>一、 填空题
* 将.java源文件编译为.class文件的是【 】命令。
* 在Eclipse窗口中选择菜单【 】→New→Java Project创建Java项目。
* 在安装JDK的过程中,有三个功能模块可供选择,它们分别是【 】,【 】和【 】。
* 将Hello.java文件编译为class文件,需要键入【 】命令。
* JRE是Java程序的【 】。
<>二、 判断题
* Eclipse只是一个框架和一组服务,所有功能都是将插件组件加入到Eclipse框架中来实现的。( )
* JDK安装成功后,需要将bin目录的路径配置在环境变量path中。( )
* Java配置环境变量path的目的是为了可以查找到.class文件。( )
* JDK安装成功后,classpath环境变量必须配置。( )
* 在命令行窗口中,编译Demo.java文件可以输入javac Demo。( )
<>三、 选择题
*
如果jdk的安装路径为:c:\jdk,若想在命令窗口中任何当前路径下,都可以直接使用javac和java命令,需要将环境变量path设置为以下哪个选项( )
A: c:\jdk
B: c:\jdk\bin
C: c:\jre\bin
D: c:\jre
* 下列关于classpath环境变量的说法中,说法正确的是( )
A: classpath配置一次后可永久使用
B: 没有classpath环境变量就不能运行Java程序
C: classpath环境变量可以让虚拟机找到class文件的目录
D: 查看当前classpath配置的命令是:classpath
* 下面哪种类型的文件可以在Java虚拟机中运行( )
A: .java
B: .jre
C: .exe
D: .class
* Java属于以下哪种语言( )
A: 机器语言
B: 汇编语言
C: 高级语言
D: 以上都不对
* 下列关于Java特点的描述中,错误的是( )。
A: Java是一门面向对象的语言
B: Java具有自动垃圾回收的机制
C: Java可以运行在Window和Linux等不同平台上
D: Java中只支持单线程序运行
<>答案
<>一、 填空
* javac
* File
* 开发工具;源代码;公共JRE
* javac Hello.java
* 运行环境
<>二、 判断题
* 对
* 对
* 错
* 错
* 错
<>三、 选择题
* B
* C
* D
* C
* D
<>第2章 Java编程基础
<>习题
<>一、 填空题
* 可以通过【 】循环使程序能够多次键盘输入。
* Java中可以通过【 】类来获取随机数。
* 定义一个方法时,要有访问修改符、返回值类型、方法名、【 】。
* 当方法中的返回值类型是【 】时,可以不写return语句。
* 十进制数12转换成二进制的结果是【 】。
<>二、 判断题
* 数组的最大下标的值比它的长度小1。( )
* 二维数组中的元素还是一个数组。( )
* 在表达式中,乘法和除法运算优先级别最高。( )
* 若x = 5,则表达式(x + 5)/3的值是3。( )
* 常量就是程序中常常变化的数据。( )
<>三、 选择题
* 阅读下面的代码片段
public static int add(int a,int b) {
return a + b;
}
下列选项中,可以在main()方法中调用add()方法的是( )
A: int num = add(1.0,2.0);
B: int num = add(1,2);
C: int num = add(true,flase);
D: int num = add(“1”, “2”);
* 下面关于布尔类型变量的定义中,正确的是( )
A: boolean a=TRUE;
B: boolean b=FALSE;
C: boolean c=‘true’;
D: boolean d=false;
* 下面浮点型数据的定义中,错误的是( )
A: float a=1.23;
B: double b=1.23;
C: double c=1.5E4;
D: float d=‘a’;
* 以下关于三元运算符的说法中,正确的是( )
A: 三元运算符第一个表达式的结果必须是boolean类型值。
B: 三元运算符第一个表达式的结果可以是任意类型的值。
C: 三元运算符只能得到基本类型的结果。
D: 以上说法都不对。
* while语句的循环体中不能包含的语句是( )
A: while语句
B: 方法定义语句
C: if语句
D: switch语句
<>答案
<>一、 填空题
* while
* Random
* 参数列表
* void
* 1100
<>二、 判断题
* 对
* 对
* 错
* 对
* 错
<>三、 选择题
* B
* D
* A
* A
* B
<>第3章 面向对象(上)
<>习题
<>一、 填空题
* 在Java中使用【 】类型的实例对象表示一个字符串。
* 在Java中解决成员变量与局部变量名称冲突时,可以使用【 】关键字。
* 类的封装是指在定义一个类时,将类中的属性私有化,即使用【 】关键字来修饰。
* 在一个Java类中,可以使用【 】关键字来修饰成员变量,该变量被称作静态变量。
* 在垃圾回收机制中,可以通过调用【 】方法来通知Java虚拟机立即进行垃圾回收。
<>二、 判断题
* 在Java中,对象是通过类创建出来的。( )
* 垃圾回收机制保证了Java程序不会出现内存溢出。( )
* 在成员方法中可以使用“this([参数1,参数2…])”来调用其它的构造方法。( )
* static关键字可以修饰成员变量,也可以修饰局部变量。( )
* 成员内部类,就是将一个类定义在另一个类的成员的位置。( )
<>三、 选择题
* 请阅读下面的程序,关于程序的运行结果说法正确的是( )
class Demo{
private static int x ;
public static void main(String[] args){
System.out.println(x++);
}
}
A: 结果为0
B: 结果为1
C: 无结果
D: 编译失败
* 下列程序的运行结果是( )
class Demo{
private String name;
Demo(String name){this.name = name;}
private static void show(){
System.out.println(name)
}
public static void main(String[] args){
Demo d = new Demo(“lisa”);
d.show();
}
}
A: 输出lisa
B: 输出null
C: 输出name
D: 编译失败,无法从静态上下文中引用非静态变量name
* 下面关于构造方法的调用,正确的是( )
A: 构造方法在类定义的时候被调用
B: 构造方法在创建对象的时候被调用
C: 构造方法在调用对象方法时被调用
D: 构造方法在使用对象的变量时被调用
* 下列关于成员变量默认值的描述中,错误的是( )
A: byte类型的数据默认值是0
B: int类型的数据默认值是0
C: long类型的数据默认值是0
D: float类型的数据默认值是0.0f
* “隐藏对象的属性和实现细节,仅对外提供公有的方法”描述的是面向对象的哪个特征( )
A: 封装
B: 继承
C: 多态
D: 以上都不是
<>答案
<>一、 填空题
* String
* this
* private
* static
* System.gc()
<>二、 判断题
* 对
* 错
* 错
* 错
* 对
<>三、 选择题
* A
* D
* B
* C
* A
<>第4章 面向对象(下)
<>习题
<>一、 填空题
* RuntimeException类及其子类都是【 】异常。
* throw关键字用于在方法中声明抛出异常的【 】。
* 自定义异常需要继承【 】类。
* 定义一个抽象类的关键字是【 】。
* final修饰的方法,不能被子类【 】。
<>二、 判断题
* RuntimeException类及其子类用于表示运行时异常。( )
* Java中的异常类都继承自java.lang.Throwable类。( )
* throws关键字用于对外声明方法可能发生的异常,这样调用者在调用方法时,可以明确知道该方法有异常,并进行相关处理。( )
* protected修饰的类,类中的所有方法只能给子类使用。( )
* Object是所有类的父类。( )
<>三、 选择题
* 下列符号中,哪个用于分隔throws关键字抛出的多个异常( )
A: ;
B: ,
C: &
D: |
* 下面程序运行的结果是( )
class Demo{
public static void main(String[] args){
try{
int x = div(1,2);
}catch(Exception e){
System.out.println(e);
}
System.out.println(x)
}
public static int div(int a,int b){
return a / b ;
}
}
A: 输出1
B: 输出0
C: 输出0.5
D: 编译失败
* 以下关于编译异常说法正确的是( )
A: 编译异常就是指Exception以及其子类
B: 编译异常如果产生,可以不用处理
C: 编译异常如果产生,必须处理,要么捕获,要么抛出
D: 编译异常指的就是Error
* 下列关于protected的说法中,正确的是( )
A: protected修饰的方法,只能给子类使用
B: protected修饰的类,类中的所有方法只能给子类使用
C: 如果一个类的成员被protected修饰,那么这个成员既能被同一包下的其它类访问,也能被不同包下该类的子类访问。
D: 以上都不对
* 下列关于对象的类型转换的描述,说法错误的是( )
A: 对象的类型转换可通过自动转换或强制转换进行
B: 无继承关系的两个类的对象之间试图转换会出现编译错误
C: 由new语句创建的父类对象可以强制转换为子类的对象
D: 子类的对象转换为父类类型后,父类对象不能调用子类的特有方法
<>答案
<>一、 填空题
* 运行时
* 实例对象
* Exception
* abstract
* 重写
<>二、 判断题
* 对
* 对
* 对
* 错
* 对
<>三、 选择题
* B
* C
* C
* C
* C
<>第5章 Java API
<>习题
<>一、 填空题
* 在程序,获取字符串长度的方法是【 】。
* StringBuffer类的默认容量是【 】个字符。
* Math类中,用于获取一个数的绝对值的方法是【 】。
* String类中,将字符串转换为字符数组的方法是【 】。
* Random类的【 】方法可以随机生成Int类型的随机数。
<>二、 判断题
* switch语句不支持字符串类型。( )
* String类的append()方法可以将数组元素和空格连接成字符串。( )
* ceil()和floor()方法返回的都是double类型的数。( )
* Random类的nextInt( )方法会生成一个int类型的随机数。( )
* JAVA中拆箱是指将基本数据类型的对象转为引用数据类型。( )
<>三、 选择题
* 阅读下面的代码,输出结果是( )
public static void main(String[] args) {
Random random1 = new Random(10);
Random random2 = new Random(10);
for(int i=0;i<5;i++){
System.out.print(random1.nextInt(5));
}
System.out.println();
for(int i=0;i<5;i++){
System.out.print(random2.nextInt(5));
}
}
A: 3030130301
B: 5048132680
C: 3268023579
D: 1111111111
* 下面哪个方法可以实现获取字符在某个字符串中第一次出现的索引( )
A: charcharAt(intindex)
B: intindexOf(intch)
C: intlastIndexOf(intch)
D: booleanendsWith(Stringsuffix)
* 假如indexOf()方法未能找到所指定的子字符串,那么其返回值为( )
A: false
B: 0
C: -1
D: 以上答案都不对
* 下列对于Runtime的描述中,错误的是( )
A: 每一个Java应用程序运行时都产生一个Runtime类实例
B: Runtime实例可以将应用程序和运行环境相结合
C: Runtime类中的方法是多例的
D: Runtime实例不需要创建,直接通过getRuntime()方法获取
* 阅读下列代码
public class Example {
public static void main(String[] args) {
int[] srcArray = { 11, 12, 13, 14 };
int[] destArray = { 21, 22, 23, 24 };
System.arraycopy(srcArray, 1, destArray, 2, 2);
for (int i = 0; i < destArray.length; i++) {
System.out.print(destArray[i] + " ");
}
}
}
下列选项中,程序的运行结果是( )
A: 21221213
B: 21221112
C: 21111224
D: 发生数组角标越界异常
<>答案
<>一、 填空题
* length()
* 16
* abs()
* toCharArray ()
* nextInt ()
<>二、 判断题
* 错
* 错
* 对
* 对
* 错
<>三、 选择题
* A
* B
* C
* C
* A
<>第6章 集合类
<>习题
<>一、 填空题
* 键和值对象之间存在一种对应关系,称为【 】。
* java.util.Iterator接口的主要作用是对【 】进行迭代的迭代器。(写顶级接口)。
* Map接口的主要实现类有【 】和【 】。
* ArrayList集合中大部分方法都是从父类Collection和List继承过来的,其中【 】方法和【 】方法用于实现元素的存取。
* 当向HashSet集合中添加一个对象时,首先会调用该对象的【 】方法来计算对象的哈希值。
<>二、 判断题
* HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此性能较差。( )
* 可以通过Scanner类的next()方法来接受控制台的信息。( )
* Map接口是一种双列集合,它的每个元素都包含一个键对象Key和值对象Value。( )
* Iterator接口是Java集合框架中的成员。( )
* 集合是长度可变的数组。( )
<>三、 选择题
* 阅读下面代码
import java.util.ArrayList;
public class Demo {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(“aaa”);
list.add(“bbb”);
list.add(“ccc”);
for (Object obj : list) {
if (obj.equals(“bbb”)) {
list.remove(obj);
}
}
System.out.println(list);
}
}
下列选项中,哪一个是程序执行后的结果( )
A: [aaa,ccc]
B: [aaa,bbb,ccc]
C: []
D: 以上都不对
* 下列方法中,不能用于删除Collection集合中元素的是( )
A: clear()
B: isEmpty()
C: remove()
D: removeAll()
* Java语言中,集合类都位于哪个包中( )
A: java.util
B: java.lang
C: java.array
D: java.collections
* 下列关于ArrayList的描述中,错误的是( )
A: ArrayList集合可以看作一个长度可变的数组。
B: ArrayList集合不适合做大量的增删操作。
C: ArrayList集合查找元素非常便捷。
D: ArrayList集合中的元素索引从1开始。
* 下面哪个对象不能直接获取java.util.Iterator迭代器进行迭代( )
A: java.util.HashSet
B: java.util.ArrayList
C: java.util.TreeSet
D: java.util.HashTable
<>答案
<>一、 填空题
* 映射
* Collection
* HashMap;TreeMap
* add();get()
* hashCode()
<>二、 判断题
* 错
* 错
* 对
* 对
* 错
<>三、选择题
* A
* B
* A
* D
* D
<>第7章 IO(输入输出)
<>习题
<>一、 填空题
* File类中用于删除文件或整个目录的方法是【 】。
* java.io.FileOutputStream是【 】的子类,它是操作文件的字节输出流。
* IO流通常都是成对出现的,即【 】流和【 】流一起使用。
* 字节流缓冲区实际上是一个【 】数组。
* java.io包中可以用于从文件中直接读取字符的是【 】类。
<>二、 判断题
* BufferedReader和BufferedWriter是具有缓冲功能的流,使用它们和使用其他流没有任何区别。( )
* 在操作文件时,如果需要删除整个目录,只需File类的delete()方法直接删除目录即可。( )
* Java中的数据传输“流”都位于java.io包中,称为IO(输入/输出)流( )
* FileOutputStream是操作文件的字节输出流,专门用于把数据写入文件。( )
* FileWriter用于向文件中写入字符,它属于字符输出流。( )
<>三、 选择题
* 以下选项中,哪一个是File类delete()方法返回值的类型( )
A: boolean
B: int
C: void
D: Integer
* 当文件不存在或不可读时,使用FileInputStream读取文件会报下列哪一种错误( )
A: NullPointerException
B: NoSuchFieldException
C: FileNotFoundException
D: RuntimeException
* Java流被分为字节流、字符流两大流类,两者都作为( )类的直接子类。
A: Exception
B: Object
C: Throwable
D: 以上都不是
* 下面关于字节流缓冲区的说法错误的是( )
A: 使用字节流缓冲区读写文件是一个字节一个字节的读写。
B: 使用字节流缓冲区读写文件时,可以一次性读取多个字节的数据。
C: 使用字节流缓冲区读写文件,可以大大的提高文件的读写操作。
D: 字节流缓冲区就是一块内存,用于存放暂时输入输出的数据。
* 下列选项中,哪个是文本文件读取类( )
A: FileReader
B: FileWriter
C: BufferReader
D: BufferWriter
<>答案
<>一、 填空题
* delete()
* OutputStream
* 输入;输出
* 字节
* FileReader
<>二、 判断题
* 错
* 错
* 对
* 对
* 对
<>三、 选择题
* A
* C
* B
* A
* A
<>第8章 GUI
<>习题
<>一、 填空题
* 在【 】包中专门提供了一个【 】类,它相当于一个抽象的画笔,其中提供了各种绘制图形的方法。
* 如果不希望通过【 】来对容器进行布局,也可以调用容器的setLayout(null)方法,将布局管理器取消。
* 创建下拉式菜单需要JMenuBar、JMenu和【 】三个组件。
* JTextField有一个子类【 】,它表示一个密码框。
* 处理ActionEvent事件的监听器对象需要实现【 】接口。
<>二、 判断题
* TableModel是用来存储列表数据的,数据包括表体的标题数据与表头的实体数据。( )
*
在java.awt包中专门提供了一个JmenuItem类,它相当于一个抽象的画笔,其中提供了各种绘制图形的方法,使用JmenuItem类的方法就可以完成在组件上绘制图形。(
)
* 弹出式菜单是通过JPopup实现的。( )
* JText是一个操作文本的组件。( )
* ActionEvent类表示动作事件。( )
<>三、 选择题
* JComboBox中用于在指定的索引处插入选项的方法是( )
A: ObjctgetItemAt(intindex)
B: intgetItemCount()
C: voidaddItem(ObjectanObject)
D: voidinsertItemAt(ObjectanObject,intindex)
* JTextField的构造方法中,方法JTextField(String text,int column)的作用是( )
A: 创建一个空的文本框,初始字符串为null
B: 创建一个具有指定列数的文本框,初始字符串为null
C: 创建一个显示指定初始字符串的文本框
D: 创建一个具有指定列数、并显示指定初始字符串的文本框
* JTextArea的构造方法中,用于创建显示指定初始文本并指定了行列的文本域的是( )
A: JTextArea()
B: JTextArea(Stringtext)
C: JTextArea(introws,intcolumns)
D: JTextArea(Stringtext,introws,intcolumns)
* 下列选项中,关于流式布局管理器(FlowLayout)的说法错误的是( )
A: 在流式布局下,当到达容器的边界时,会自动将组件放到下一行的开始位置
B: FlowLayout布局管理器的特点就是可以将所有组件像流水一样依次进行排列
C: 流式布局管理器是最简单的布局管理器
D: 流式布局管理器将容器划分为五个区域
* 处理鼠标事件时,通过( )方法将监听器绑定到事件源对象。
A: mousePressed()
B: addMouseListener()
C: mouseEntered()
D: mouseClicked()
<>答案
<>一、 填空题
* java.awt;Graphics
* 布局管理器
* JMenuItem
* JPasswordText
* ActionListener
<>二、 判断题
* 错
* 错
* 错
* 错
* 对
<>三、 选择题
* D
* D
* D
* D
* B
<>第9章 JDBC
<>习题
<>一、 填空题
* ResultSet接口中的常量CONCUR_READ_ONLY,所代表的含义是【 】。
* ResultSet接口中,能将游标移动到此 ResultSet 对象的最后一行的方法是【 】。
* PreparedStatement是Statement的子接口,用于执行【 】的SQL语句。
* Statement接口的executeUpdate(String sql)方法用于执行SQL中的insert、【 】和delete语句。
* JDBC常用API 中,【 】类用于加载JDBC驱动并且创建与数据库的连接。
<>二、 判断题
* 对于相同的SQL语句,Statement对象只会对其编译执行一次。( )
* 使用DriverManager.registerDriver进行驱动注册时,数据库驱动会被注册2次。( )
* ResultSet接口表示select查询语句得到的结果集,该结果集封装在一个逻辑表格中。( )
* Statement接口的executeUpdate(String sql)返回值是int,它表示数据库中受该SQL语句影响的记录的数目。( )
* JDBC的全称是Java数据库连接,它是一套用于执行HTML语句的Java API。( )
<>三、 选择题
* 下列选项,可用于存储结果集的对象是( )
A: ResultSet
B: Connection
C: Statement
D: PreparedStatement
* 下面选项中,能够将游标从当前位置向下移一行的方法是( )
A: next()
B: absolute(introw)
C: previous()
D: last()
####3. 下面关于executeQuery(String sql)方法,说法正确的是( )
A: 可以执行insert语句
B: 可以执行update语句
C: 可以执行select语句
D: 可以执行delete语句
* 下面Statement接口的方法中,用于执行各种SQL语句的是( )
A: executeUpdate(Stringsql)
B: executeQuery(Stringsql)
C: execute(Stringsql)
D: executeDelete(Stringsql)
* 下面选项中,用于将参数化的SQL语句发送到数据库的方法是( )
A: prepareCall(Stringsql)
B: prepareStatement(Stringsql)
C: registerDriver(Driverdriver)
D: createStatement()
<>答案
<>一、 填空题
* 以只读形式打开结果集
* last()
* 预编译
* update
* DriverManager
<>二、 判断题
* 错
* 对
* 对
* 对
* 错
<>三、 选择题
* A
* A
* C
* C
* B
<>第10章 多线程
<>习题
<>一、 填空题
* 同步代码块中的锁对象可以是任意类型的对象,但多个线程共享的锁对象必须是【 】的。
####2. Java中有两种创建线程的方式,但大部分的多线程应用都会采用【 】方式来创建线程。
* Java中thread类的sleep()方法可以让让当前线程进入【 】状态。
* 在Thread类中提供了一个【 】方法来实现线程插队。
* 同步锁可以是任意【 】。
<>二、 判断题
* 使用synchronized关键字修饰的代码块,被称作同步代码块。( )
* 如果两个线程访问不同类中的静态同步方法,这两个线程是不需要等待的。( )
*
Java多线程中,如果某个资源在一段时间内只能由一个进程占有,不能同时被两个或两个以上的进程占有。必须在占有该资源的进程主动释放它之后,其它进程才能占有该资源,这样就一定会出现死锁。(
)
* Runnable接口中只有一个run()方法。( )
* 处于等待的线程,必须被其他线程唤醒后才能继续运行。( )
<>三、 选择题
* 下列有关Java多线程中静态同步方法的说法错误的是( )
A: 静态方法必须使用class对象来同步
B: 在使用synchronized块来同步方法时,非静态方法可以通过this来同步,而静态方法必须使用class对象来同步
C: 静态同步方法和以当前类为同步监视器的同步代码块不能同时执行
D: 静态同步方法不可以和以this为同步监视器的同步代码块同时执行
* 以下关于Runnable接口的描述错误的是( )
A: 通过实现Runnable接口可以创建多线程程序
B: Runnable接口是在java.lang包下
C: 实现Runnable接口必须重写run()方法
D: 通过Runnable接口中的start()方法可以开启线程
* 下列有关线程的两种创建方式说法错误的是( )
A: 通过继承Thread类与实现Runnable接口都可以创建多线程程序
B: 实现Runnable接口相对于继承Thread类来说,可以避免由于Java的单继承带来的局限性
C: 通过继承Thread类与实现Runnable接口创建多线程这两种方式没有区别
D: 大部分的多线程应用都会采用实现Runnable接口方式创建
* 下列关于线程优先级的描述,错误的是( )
A: NORM_PRIORITY代表普通优先级,默认值是5
B: 一般情况下,主函数具有普通优先级
C: 新建线程的优先级默认为最低
D: 优先级高的线程获得先执行权的几率越大
* 下面关于yield方法描述正确的是( )
A: yield方法是用于合并线程
B: yield方法是用于启动线程
C: yield方法是用于线程让步
D: yield方法是用于线程同步
<>答案
<>一、 填空题
* 唯一
* 实现Runnable接口
* 休眠
* join
* 对象
<>二、 判断题
* 对
* 对
* 错
* 对
* 对
<>三、 选择题
* D
* D
* C
* C
* C
<>第11章 网络编程
<>习题
<>一、 填空题
* 基于TCP/IP的参考模型将协议分成四个层次,分别是【 】、【 】、【 】和【 】。
* 【 】指本机地址,该地址一般用来测试使用。
* 在JDK中,提供了一个与IP地址相关的【 】类,该类用于封装一个IP地址。
* 【 】是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。
* DatagramPacket类的【 】方法用于返回发送端或者接收端的端口号。
<>二、 判断题
* 目前应用最广泛的网络通信协议是UDP协议。( )
* IP地址用于唯一标识一台计算机,它有IPv4和Ipv6两个版本。( )
* 在TCP程序中,ServerSocket类的实例对象可以实现一个服务器端的程序。( )
* 端口号的取值范围是0~65535。( )
* TCP是一种用户数据报协议。( )
<>三、 选择题
* 下列层次中,哪一层是整个TCP/IP协议的核心( )
A: 应用层
B: 传输层
C: 网络层
D: 链路层
* HTTP协议服务的默认端口号是( )
A: 8080
B: 8090
C: 8009
D: 80
* 在TCP/IP 网络中,为各种公共服务和系统保留的端口号范围是( )
A: 0~65525
B: 0~1024
C: 0~1023
D: 0~80
* 下列说法中,错误的是( )
A: UDP在数据传输时,数据的发送端和接收端不建立逻辑连接
B: TCP协议是面向连接的通信协议
C: 使用UDP协议传送数据保证了数据的完整性
D: TCP连接中必须要明确客户端与服务器端,由客户端向服务端发出连接请求
* 以下哪个类用于实现TCP通信的客户端程序( )
A: ServerSocket
B: Socket
C: Client
D: Server
<>答案
<>一、 填空题
* 链路层;网络层;传输层;应用层
* 127.0.0.1
* InetAddress
* UDP
* getPort()
<>二、 判断题
* 错
* 对
* 对
* 对
* 错
<>三、 选择题
* C
* D
* C
* C
* B
<>结束