第8章:
1、简述线程的状态迁移过程。
通过new语句生成一个Thread对象时,该线程位于新生态,通过调用该对象的start方法可以使他位于可执行态,在这里,程序就可以执行我们写在run里面的方法了。在可执行态中,调用sleep方法和wait方法可使其位于阻塞态,在阻塞态中,该线程不会执行,也可以使用notify或notifyAll方法使程序重新回到可执行态。在新生态、可执行态、阻塞态中可以调用stop方法停止该线程。
2、Java有哪几种创建线程的方式?
主要有两种,第一种是通过Thread子类实现,另一种是通过runnable接口实现。
- 通过生成Thread类的子类,并在子类中覆盖run方法,再通过new调用即可生成线程。
- 先在一个类中实现runnable接口,并在这个类中实现run方法,再通过new生成这个类的对象,使用Thread(Runnable target)构造器生成Thread对象,target填写刚刚生成的对象即可(target填写实现了Runnable接口的对象)
3、启动一个线程用什么方法。
使用start来启动一个线程
4、利用多线程设计一个程序,同时输出10以内的奇数和偶数,以及当前运行的线程名称,输出数字完毕输出end。
package com.ttj;
public class testThread {
public static void main(String[] args) {
SubThread temp = new SubThread();
Thread st1 = new Thread(temp, "thread_1");
Thread st2 = new Thread(temp, "thread_2");
st1.start();
st2.start();
}
}
class SubThread extends Thread {
static int count = 0;
@Override
public void run() {
try {
if(this.getName().equals("thread_2")){
System.out.println(Thread.currentThread().getName() + "****");
synchronized(this){
wait();
}
}
while(true){
System.out.println(Thread.currentThread().getName() + ":" + (count++));
synchronized(this){
notify();
if(count <= 9){
wait();
}
else{
break;
}
}
}
}catch(Exception e){
e.printStackTrace();
}finally{
System.out.println(Thread.currentThread().getName() + "end");
}
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YolLs347-1636446525119)(./img/1.png)]
第9章:
1、什么叫做流?输入输出流分别对应那两个抽象类?
流是字节序列的抽象概念,能够连续读取数据或被写入数据的就称为流。
对于字节流,输入输出对于InputStream与OutputStream;对于字符流,输入输出对应Reader与Writer。
2、在Java语言中,输入输出流分为哪两种类型?
字符流与字节流。
3、举例说明File类与RandomAccessFile类的使用相同与不同处。
相同点:都可以实现对文件的读取与操作,都位于java.io包中。
不同点:File是对文件或目录的抽象,通过它可以实现对文件的打开、关闭、删除、重命名等面向文件的处理方法。
而RandomAccessFile类最大的特点就是可以实现对文件的随机访问。这个类兼具输入与输出功能,可以支持从文件任意位置读、写数据。通过它可以实现对文件具体内容的增删改查。
4、在输入输出流中,为什么要使用缓冲技术,它们对应的类是哪些?
使用缓冲技术可以减少读写次数,可以提高程序运行效率。对应BufferedInputStream与BufferedOutputStream。
5、编程实现从键盘输入数据,保存到指定的文件中。
import java.util.Scanner; import java.io.*; public class fileTest { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println("Please input file name like this: \"./test.java\""); String path = in.next(); String data; System.out.println(path); FileOutputStream fos = null; BufferedOutputStream bos = null; try{ //对象的声明应该在try外,不然对象在此代码块外将失效。finally关闭文件时将无法访问。 fos = new FileOutputStream(path, true); bos = new BufferedOutputStream(fos); System.out.println("Please input the content to add:"); data = in.next(); bos.write(data.getBytes());//把字符转换成字节 while(in.hasNext()){ data = in.next() + " "; bos.write(data.getBytes()); } }catch(IOException e){ e.printStackTrace(); }finally{ try{//还要检查异常。 bos.close(); fos.close(); }catch(IOException e){ e.printStackTrace(); } System.out.println("done"); } } }
运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vpBRgxo5-1636446525123)(./img/2.png)]
相应文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OrCQG3zF-1636446525125)(./img/3.png)]
第10章:
1、请介绍java.net.Socket类最常用的三个方法 。
getInputStream 获取输入流,返回一个InputStream实例;
getOutStream 获取输出流,返回一个OutputStream实例。
getInetAddress 获取服务端端口。
2、请描述客户端/服务器结构的大致实现过程。
首先客户端向DNS服务器发送请求去寻找外网ip,通过ip向服务器发送请求,通过对应的端口号找到服务器端对应的服务,将相应的服务数据返回客户端。浏览器所在端口接收到数据后将内容呈现出来。
第11章:
1、请简述布局管理的概念,列出几种常见的布局管理器的名称。
布局管理指对组件的尺寸与位置进行管理。所有组件都会引用一个布局管理器的实例。
FlowLayout,BorderLayout,GridLayout,GridBagLagout,CardLayout。
2、在容器中调用的方法add()和setLayout()的作用是什么?
add(): 将部分组件加入该容器;
setLayout: 设置容器的布局管理器
3、举例说明如何在Swing中处理双击事件。
为待监听容器添加mouseListener,并实现鼠标点击事件。
xxx.addMouseListener(new MouseAdapter(){ public void mouseClicked(MouseEvent evt){ if(evt.getClickCount()==2){ //处理程序 } } })
4、什么是“事件”?
封装了GUI组件上发生的特殊事情(用户的点击、移动)
5、请说明java如何进行事件捕获。
为事件源注册事件监听器,再为相应的事件源书写事件处理程序。之后当事件发生时便会触发事件监听器,再由事件监听器调用相应的程序。
6、ActionEvent 中触发动作为“在文本框中输入回车”的代码如何实现?请查询资料后写出样例程序。
package com.ttj; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class bsp_GUI { public static void main(String[] args) { JFrame jf = new JFrame("title"); JTextArea jta= new JTextArea("在文本框中输入回车"); jf.add(jta); jf.setLayout(new FlowLayout()); jf.setSize(600, 400); jf.setVisible(true); jta.addKeyListener(new KeyAdapter(){ public void keyPressed(KeyEvent e){ if(e.getKeyCode() == '\n'){ System.out.println("You have pressed. "); } } }); } }
运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QSECaq9r-1636446525128)(./img/4.png)]
System.out.println("You have pressed. ");
} } }); }
}
运行结果: [外链图片转存中...(img-QSECaq9r-1636446525128)]