Java--SE简答题2
2019-11-09 09:48:16
1. 简述static关键字的作用。(5分)
static可以修饰变量、方法和代码块和内部类,分别称为静态变量,静态方法,静态代码块和静态内部类。
1) 静态变量属于这个类所有,即由该类创建的所有对象共享同一个static变量。
a) 不管有多少个对象,静态变量只有1份。(0.5分)
b) 静态变量存在方法区中。(0.5分)
c) 可通过对象名.静态变量名,类名.静态变量名两种方式访问。(0.5分)
d) 静态变量在第一次使用类的时候分配空间。(0.5分)
2) 静态方法:可通过对象名.静态方法名和类名.静态方法名两种方式访问。(1分)
3) 静态代码块:当类被第一次使用时执行静态代码块,且只被执行一次,主要作用是实现static属性的初始化。(1分)
4) 静态内部类:属于整个外部类,而不是属于外部类的每个对象。(1分)
2. 2.简述接口和抽象类的相同和不同之处。(5分)
相同点
抽象类和接口均包含抽象方法(0.5分)
抽象类和接口都不能实例化(0.5分)
两者的区别主要体现在两方面:语法方面和设计理念方面。
语法方面的区别是比较低层次的,非本质的,主要表现在:
接口中只能定义全局静态常量。抽象类中可以定义常量和变量(0.5分)
接口中所有的方法都是全局抽象方法。抽象类中可以有0个、1个或多个,甚至全部都是抽象方法(0.5分)
抽象类中可有构造方法,但不能实例化。接口中不能定义构造方法(0.5分)
一个类只能有一个直接父类(可以是抽象类),但可以实现多个接口(0.5分)
二者的主要区别还是在设计理念上,其决定了某些情况下到底使用抽象类还是接口:
抽象类体现了一种继承关系,目的是复用代码.父类和子类之间必须存在“is-a”的关系,即父类和子类在概念本质上应该是相同的(1分)
接口定义了“做什么”,而实现类负责完成“怎么做”,体现了功能(规范)和实现分离的原则。接口和实现之间可以认为是一种“has-a的关系”(1分)
3. 简述List、Set、Collection、Map的区别和联系。(5分)
1) List和Set是Collection接口的两个子接口(1分)
2) Collection 接口存储一组不唯一,无序的对象(1分)
3) List 接口存储一组不唯一,有序(插入顺序)的对象(1分)
4) Set 接口存储一组唯一,无序的对象(1分)
5) Map接口存储一组键值对象,提供key到value映射。Key无序,唯一。value不要求有序,允许重复。(如果只使用key存储,那就是Set)(1分)
4. 简述进程和线程的联系和区别。(5分)
进程和线程的联系:(2分)
1) 线程是指进程内的一个执行单元,也是进程内的可调度实体(0.5分)
2) 一个线程只能属于一个进程,一个进程可有多个线程,至少一个线程(1分)
3) 进程和线程都可以并发执行(0.5分)
线程与进程的区别:(3分)
1) 根本区别:线程是调度和执行基本单位,进程时分配资源的基本单位。(1分)
2) 开销:进程间切换开销大,线程间切换开销小(1分)
3) 所处环境:在操作系统中能同时运行多个任务(进程) 在同一应用程序中有多个顺序流(线程)同时执行(1分)
5. 简述基于TCP的Socket编程的主要步骤(5分)
服务器端编程步骤:
1) 构建一个ServerSocket实例,指定本地的端口。(1分)
2) 调用accept()方法来获得客户端的连接请求。通过accept()方法返回的socket实例,建立了一个和客户端的新连接。(1分)
3) 通过这个返回的socket实例获取InputStream和OutputStream,可以通过这两个stream来分别读和写数据。(0.5分)
4) 结束的时候调用socket实例的close( )方法关闭socket连接。(0.5分)
客户端编程步骤:
1) 构建Socket实例,通过指定的远程服务器地址和端口来建立连接。(1分)
2) 通过Socket实例包含的InputStream和OutputStream来进行数据的读写。(0.5分)
3) 操作结束后调用socket实例的close方法,关闭。(0.5分)