Java SE考试--编程题总结

更新时间:2024-04-03 02:34:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

线程和进程的区别:

(1)进程是运行中的程序,拥有自己独立的内存空间和资源;

(2)一个进程可以有一个或多个线程组成,且至少有一个线程称为主线程; (3)线程是最小的处理单位,多个线程共享一块内存和资源;

(4)当一个线程改变了所属进程的变量时,其它线程下次访问该变量时得到这种改变。 简述什么是多线程。

线程的最主要功能是多任务处理,即多线程。多线程也就是在主线程中有多个线程在运行,多个线程的执行是并发的,在逻辑上“同时”,而不管是不是物理上的“同时”。

多线程和传统上的单线程在程序设计上的区别在于: 由于各个线程的控制流彼此独立,使得各个线程之间的代码是乱序执行的,由此带来的线程调度、同步等问题是需要重点留意的。

引入线程的优点:

1 充分利用CPU资源。 2简化编程模型。

3简化异步事件处理。4使GUI更有效率。5节约成本 线程状态:

Thread和Runnable区别:

(1)Thread是类,具有线程的所有方法,其对象就是一个线程对象。但继承Thread,就不能再继承其他的类(Java只支持单一继承)。

(2)Runnable是接口,只提供run()方法。实现该接口的类还可以继承其他类,但其对象不是线程对象,不能直接运行,必须通过Thread将其启动。 通过Runnable接口创建线程的步骤如下: 1、实例化实现Runnable接口的类; 2、建立一个Thread对象,并将第一步实例化后的对象作为参数传入Thread类的构造方法; 3、通过Thread类的start()方法建立线程。 线程优先级:

(1)线程的优先级代表该线程的重要程度。

(2)当有多个线程同时处于可执行状态并等待获得CPU时间时,线程调度系统根据各个线程的优先级来决定CPU分配时间。

(3)优先级高的线程有更大的机会获得CPU时间。

(4)线程的默认优先级值:Thread.NORM_PRIORITY,值为5。每个新线程均继承创建线程的优先级。setPriority()设置线程优先级。

值为MIN_PRIORITY(1)和MAX_PRIORITY(10)之间的值。getPriority() 获取线程的优先级值。 线程通信:

(1)线程通信的方法:wait()、notify()和notifyAll() (2)调用notify()方法时可以随机选择一个在该对象调用wait()方法的线程,解除它的阻

1

塞。

(3)调用notifyAll()方法可以唤醒等待该对象的所有线程。但唤醒时无法控制唤醒哪个线程,唤醒过程完全由系统来控制。

(4)notify()方法和notifyAll()方法只能在同步方法或同步块内部使用。 产生死锁的原因主要是:

所谓死锁,是指两个或多个线程都在等待对方释放对象资源而进入的一种不可“调节”的状态。

1、因为系统资源不足;

2、进程运行推进的顺序不合适; 3、资源分配不当等。

如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。 wait()方法区别于sleep()方法的是:

(1)wait()方法调用时会释放对象锁,而sleep()方法不会 (2)sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用 (3)sleep()是Thread类的Static(静态)的方法; (4)wait()方法是Object类里的方法;wait()使用notify或者notifyAlll或者指定睡眠时间来唤醒当前等待池中的线程。

(5)wait()必须放在synchronized block中,否则会在运行时扔出”java.lang.IllegalMonitorStateException“异常。

通信协议指网络中传递、管理信息的一些规范。TCP/IP协议,IPX/SPX协议,NetBEUI协议等。

TCP/IP协议

IP协议:网络层协议,保证计算机之间发送和接收数据,能适应各种网络硬件。 无连接,不可靠的协议。

TCP协议:端对端的协议,端与端之间建立连接、发送、接收数据以及终止连接。 利用重发技术和拥塞控制机制,向应用程序提供可靠通信连接。

区别与联系:IP协议只保证计算机能发送和接受分组数据,而TCP协议则可提供一个可靠的、可流控的、全双工的信息流传输服务。两个协议统称为TCP/IP协议。

A类地址:0-126,默认掩码:255.0.0.0。B类地址:128-191,默认掩码:255.255。C类地址:192-223,默认掩码:255.255.255.0。D类地址:广播地址,E类地址保留。

常用端口以及对应的服务 7:Echo服务端口 21:FTP服务端口 23:Telnet服务端口 25:SMTP服务端口 80:HTTP服务端口 网络API:

(1)Java中有关网络方面的功能都定义在java.net包中。 (2)使用InetAddress类封装IP地址和域名

(3)URL由四部分组成。协议名:指明获取资源所使用的传输协议。主机名:指定获取资源的域名。端口:指定服务的端口。文件路径:指定访问的文件名以及路径。 URLConnection类:

(1)通过URL的方法openStream()只能从网络上读取数据,如果如要输出数据,就要用到URLConnection类。

2

(2)URLConnection是个抽象类,代表与URL指定的数据源的动态连接。

(3)URLConnection类提供比URL类更强的服务器交互控制,允许用Post或者Put和其他HTTP请求方法将数据送回服务器。 Socket的工作步骤:

1根据指定的地址和端口创建一个Socket对象。

2调用getInputStream()方法或getOutputStream()方法打开连接到Socket的输入/输出流。 3客户端与服务器根据一定的协议交互,直到关闭连接。 4关闭客户端的Socket。 ServerSocket的工作步骤:

1根据指定端口创建一个新的ServerSocket对象。

2调用ServerSocket的accept()方法,在指定的端口监听到来的连接。Accpet()一直处于阻塞状态,知道有客户端试图建立连接。这时accpet()方法返回连接客户端与服务器的Socket对象。

3调用getInputStream()方法或getOutputStream()方法打开连接到Socket的输入/输出流。

4服务器与客户端根据一定的协议交互,直到关闭连接。

5关闭服务器端的Socket。6回到第2步,继续监听下一次的连接。 多线程Socket通信实现:

服务器总是在指定的端口监听是否有客户端请求,一旦监听到客户请求,服务器就会启动一个专门的服务线程来响应客户请求,而服务器本身在启动完线程之后马上有进入监听状态,等待下一个客户的到来。 synchronized两种使用方式:

1.修饰方法,使调用该方法的线程均能获得该对象的锁。 2.放在代码块中,修饰对象,当前代码获得对象的锁。。。锁定的是对象,而不是方法或代码块。

Swing的结构:

(1)Swing组件位于javax.swing包中,javax是一个Java扩展包。 (2)在javax.swing包中,定义了两种类型的组件:

顶层容器(不包含在其他容器中的容器,JFrame,JApplet,JDialog和Jwindow 4个)和轻量级组件。

Swing组件都是AWT的Container类的直接子类和间接子类。 布局:

(1)用来管理组件在容器中的布局格式。

(2)FlowLayout, BorderLayout, GridLayout和CardLayout四种。位于java.awt包中。 (3)FlowLayout流布局一般用来安排面板中的按钮。它使得按钮呈水平放置,直到同一条线上再也没有适合的按钮。线的对齐方式由align属性确定。 (4)BorderLayout边界布局,JFrame的默认布局。

(5)GridLayout网格布局,类似于表格,按照行列排列所有组件,每个单元格大小一样。添加组件使,按照从左至右,自上而下的顺序加入。

(6)CardLayout卡片布局,将加入到容器的组件看作一叠卡片,只能看到最上面的组件 常用的事件类:

java.awt.event包中常用的事件类:

ActionEvent, AdjustmentEvent, ItemEvent, FocusEvent, KeyEvent, MouseEvent, WindowEvent。

3

java.awt.event包中常用的监听接口:

ActionListener,AdjustmentListener, ItemListener, FocusListener, KeyListener, MouseListener, WindowListener。 适配器:

(1)扩展监听接口时,有些事件处理方法是不需要的,但必须重写。

(2)出于简化代码的目的,java.awt.event包中提供了一个抽象适配器类,分别实现每个具有多个事件处理方法的监听接口。

(3)继承适配器后,可以仅重写需要的事件处理方法。 事件处理的步骤:

1创建监听类,监听类中,事件处理方法中编写事件处理代码 2创建监听对像。

3利用组件的addXXXListener()方法将监听对象注册到组件上 3者区别联系:

监听类:是一个扩展监听接口的类,可以扩展一个或多个监听接口。

事件处理方法:是监听接口中已经定义好的相应的事件处理方法,要重写。 监听对象:是监听类的一个实例对象,具有监听功能。

事件用于实现用户界面的交互,是GUI编程的重要组成部分。 Java最新的事件处理方法是基于委派事件模型的。

事件包含3个组件:事件对象、事件源和事件处理程序。

事件是一个描述事件源状态改变的对象,不是通过new 创建的,而是由用户操作触发的。 一个事件源可能会生成不同类型的事件。 可以将一个事件发送到多个监听器对象。

监听类是实现监听接口的类,监听对象是监听类的实例化对象 在组件中注册监听器的方法是:addXxxxListener()。 适配器是实现相关监听接口的类,目的是简化程序代码 创建菜单的步骤:

1创建一个JMenuBar菜单栏对象,将其设置到窗体中。

2创建若干个JMenu菜单对象,将其放置到JMenuBar对象中,或按要求放到其他JMenu对象中。

3创建若干个JMenuItem菜单项对中,将其放置到对应的JMenu对象中。 JPopupMenu:弹出式菜单 位置不固定、无标题

(JDialog类)模式对话框:必须首先对该对话框进行响应(单击“确定”或“取消”)后,才能对对话框以外的应用程序进行操时;

无模式对话框:可以不响应对话框,对其以外的程序进行操作。 JTable类--表格模型 TableModel:

TableModel本身是个接口,若要实现此接口建立表格非常复杂,因此Java提供了两个类实现了TableModel接口: (1)AbstractTableModel:抽象类,实现了大部分的TableModel方法。AbstractTableModel 类 对 TableModel 接口中大部分方法提供部分实现,它关注监听器的管理,并生成TableModeEvents 事件,以及把他们发送到监听器提供方便。

(2)DefaultTableModel:继承AbstractTableModel,是默认的表格模型类。

(3)要创建一个TableModel,可以简单扩展AbstractTableModel类并且至少实现下列三

4

个方法 public int getRowCount()、public int getColumnCount()、public Object getValueAt(int row,int column)

使用JDBC访问数据库的基本步骤:

1加载JDBC驱动程序(Class.forName(“oracle.jdbc.driver.OracleDriver”); )。2建立数据库连接(Class.forName(“oracle.jdbc.driver.OracleDriver”); Connection conn = DriverManager.getConnection(

“jdbc:oracle:thin:@localhost:1521:orcl”, “scott”, “tiger”);)。3创建Statement对象 4执行SQL语句。5 处理返回结果。6 关闭创建的对象 Statement中3个执行方法的不同:

(1)execute():用于执行返回多个结果集、多个更新计数或二者的混合。 (2)executeUpdate():用于执行insert、update、delete语句及SQl DDL语句。插、更、删效果是修改表中的行或列,返回值一个整数,即影响行数。对于建立、删除返回值为0。 (3)executeQuery():用于产生单个结果集的语句,例如select语句。 事务的ACID特性:

数据库中的操作通常是一个独立单元,事务是构成单一逻辑单位的操作集合。 已提交事务是指成功执行完毕的事务,未能成功完成的事务成为中止事务,对中止事务造成的变更需要进行撤销处理,成为事务回滚。 原子性(Atomicity )、一致性( Consistency )、隔离性( Isolation)、持久性(Durabilily)。 保存点: 集元数据: 集元数据 Meta Data,是有关数据库和表格结构的信息,如数据库的表、表的列、表的索引、数据类型、对SQL的支持程度等信息。 DatabaseMetaData接口

(1)主要用来得到数据库的信息,如:数据库中所有表格的列表、系统函数、关键字、数据库产品名和数据库支持的JDBC驱动名。

(2)通过Connection.getMetaData()方法创建。 (3)主要提供了两大类方法:

1.返回类型boolean的,用于检查数据库或驱动器是否支持某项功能。 2.用于获取数据库或驱动器本身的某些特征值。

通过Statement实现静态SQL查询

使用PreparedStatement实现动态SQL查询 使用CallableStatement实现存储过程的调用

DatabaseMetaData接口用于得到关于数据库的信息 ResultSetMetaData接口主要用来获取结果集的结构 JDBC默认的事务提交模式是自动提交

通过setAutoCommit()方法控制自动提交模式,使用rollback()方法实现事务回滚 开发RMI--步骤:

1 定义远程接口。2 实现远程接口。3 编写和实现远程服务类。4 编写客户端程序 RMI机制原理:

2个独立程序。服务器端、客户端 服务器端:

5

(1)创建多个远程对象,

(2)调用注册服务程序使得名字与远程对象关联,使得这些远程对象能够被引用, (3)等待客户端调用这些远程对象的方法。 客户端:

(1)在服务器上的注册服务程序中用远程对象名称查找一个或者多个远程对象的引用, (2)调用远程对象的方法。

JOptionPane类中四种对话框的静态方法

1消息对话框(showmessagedialog)2输入对话框(input) 3确认对话框(Option)4选项对话框(Confirm) Locale常用定义:

Locale类是用来标识本地化消息的重要工具类。该类包含对主要地理区域的地域化特征的封装。通过设定Locale为特定的国家或地区,提供符合当地文化习惯的字体、图标和表达格式。

简述java异常处理机制 :

java提供了两种处理异常的机制:一是捕获异常,二是声明抛出异常. 在java运行过程中系统得到一个异常对象时,它会沿着方法的调用栈逐层回溯,寻找处理这个异常的代码,,找到后,系统把当前异常对象教给这个方法处理,这就是捕获异常.如果方法中不知道如何处理所出现的异常,则可在定义方法时,声明抛出异常.

使用JDBC查询Scott用户的emp表中的所有信息? String sql=\

PreparedStatement stmt =conn.prepareStatement(sql); ResultSet rs = stmt.executeQuery();

int columnCount = rs.getMetaData().getColumnCount(); //这地方补充了一下 while (rs.next()) { for (int i = 1; i <= columnCount; i++) {

System.out.println( md.getColumnName(i) + \JDBC API的三个组成部分: 1 JDBC驱动程序管理器 2 JDBC驱动程序测试包 3 JDBC-OCBC桥

加载JDBC驱动程序中加载驱动程序的一种简单方法是使用Class.forName方法显示加载: Class.forName(“DriverName”);

对于JDBC/ODBC桥,加载JDBC-ODBC数据库驱动程序的方法为: Class.forName(“sun.jdnc.odbc.JdbcOdbcDriver”);

6

而对于Oracle数据库,加载数据库驱动程序的方法为: Class.forName(“oracle.jdbc.driver.OracleDriver”); 对于Oracle驱动连接的是URL是:

Jdbc:oracle:thin:@serverName:port:instance 通过Oracle驱动获得数据库连接的实力语句:

Class.forName(“oracle.jdbc.driver.OracleDriver”); Connection conn = DriverManager.getConnection(

“jdbc:oracle:thin:@localhost:1521:orcl”,”scott”,”tiger”);

多线程Socket通信中多个while循环是用来监听的。

TableModel本身是一个借口,若是要直接实现此接口来建立表格是非常复杂的,因此java中还提供了AbstractTableModel和DefaultTableModel这两个类分别实现TableModel接口。 ListSelecyionModel接口中的常量:

static final int SINGLE_SELECTION 单一选择模式 static final int SINGLE_INTERVAL_SELECTION 连续区间选择模式 static final int MULTIPLE_INTERVAL_SELECTION 多重选择模式

简述实现一个自定义的对话框的步骤?

(1)继承JDialog类,在构造方法中传入参数 (2)在对话框中添加用户界面组件 (3)添加事件处理 (4)设置对话框大小

什么是检查型异常,非检查型异常

检查型异常:指编译器要求必须处置的异常,是程序运行时由于外界因素造成的一般性异常 非检查型异常:指编译器不要求强制处理的异常,该异常是因设计或实现方式不当导致的,可以避免这种异常的发生.

简述一下使用泛型有什么优点?

答:泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是安全简单。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

2.简要描述ArrayList,Vector,LinkedList的存储性能和特性? 答:ArrayList支持可随需要而调整的动态数组。其内部封装了一个动态再分配的Object[]数组。每个ArrayList对象有一个capacity,表示存储列表中元素的数组的容量。当元素添加到ArrayList时,它的capacity自动增加。在向一个ArrayList对象添加大量元素的程序中,可使用ensureCapacity()方法增加Capacity,此法可以减少或增加重分配的数量。Vector 由于使用了synchronized 方法(线程安全),通常性能上较ArrayList 差,而LinkedList 使用双向链表实现存储,按序号索引数据需要进 行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。 3.简述Collection和Collections的区别。 答:java.util.Collection 是一个集合接口集合接口集合接口集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。 java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态静态静态静态多

7

态方法多态方法多态方法多态方法。此类不能实例化不能实例化不能实例化不能实例化,就像一个工具类个工具类个工具类个工具类,服务于Java的Collection框架。 Java代码 。 4、List、Map和Set三个接口,存取元素时,各有什么特点? 答:List 以特定次序来持有元素,可有重复元素。 Set 无法拥有重复元素,内部排序。 Map 保存key-value值,value可多值。 5、描述HashMap和Hashtable的区别。 答:Hashtable和HashMap类有三个重要的不同之处。第一个不同主要是历史原因。Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。 最重要的不同是Hashtable的方法是同步的,而HashMap的方法不是只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。

6、简述序列化和反序列化概念?

对象的序列化就是把对象写入到一个输出流中,对象的反序列化是指从一个输入流中读取一个对象。

7、简述适配器与监听接口的区别?

区别:适配器只需要重写需要的事件处理方法,而监听接口需要实现全部的方法。

监听接口中定义了抽象的事件处理方法,这些方法针对不同的操作进行不同的处理。在程序中,通常使用监听类实现监听接口中的事件处理方法。监听接口定义在java.awt.event包中,该包中提供了不同事件的监听接口,这些接口中定义了不同的抽象的事件处理方法。 扩展监听接口时,有些事件处理方法是不需要的,但必须重写。

处于简化代码的目的,java.awt.event包中有提供了一套抽象适配器类,分别实现每个具有多个事件处理方法的监听接口。这样继承适配器后,可以仅重写需要的事件处理方法。

8

本文来源:https://www.bwwdw.com/article/ykfr.html

Top