java期末复习知识点整理(下)

异常处理

  1. Java的异常处理的基本概念
    在这里插入图片描述

  2. 理解JVM中的运行错误和Java的异常类之间的对应关系(由JVM帮我们对应);
    在这里插入图片描述

  3. 掌握PPT中关于异常的那张图(异常产生、传递、处理的流程图)
    在这里插入图片描述

  4. Java中异常类的分类:运行时异常、非运行时异常,分类标准是什么,分类的目的是什么?
    在这里插入图片描述在这里插入图片描述

  5. 异常的两种处理方法:(1)try-catch(重点);(2)在函数头部声明

  6. 自定义异常——了解一下:throw与throws的区别
    在这里插入图片描述

多线程

  1. Thread,Runnable是Java多线程编程中最重要的类、接口

  2. 多线程的四种状态图;
    在这里插入图片描述

  3. 两种编写多线程程序的方法——要会写代码。理解两种方法的区别、优缺点

继承Thread类:

package multithreading.test;

// 1.创建一个继承于Thread类的子类
class MyTest extends Thread {
    // 2.重写Thread类中的run()
    @Override
    public void run() {
        for (int i = 0; i < 1000; i++) {
            System.out.println(1);
        }
    }
}

public class Test {
    public static void main(String[] args) {
        // 3.创建Thread类的子类的对象
        MyTest t1 = new MyTest();

        // 4.通过此对象调用start
        t1.start();
        for (int i = 0; i < 1000; i++) {
            System.out.println("hello");
        }
    }
}

实现Runnable接口:

package multithreading.test;

public class Test2 implements Runnable{
    @Override
    public void run(){
        for (int i = 0; i < 1000; i++) {
            System.out.println(1);
        }
    }

    public static void main(String[] args){
        Thread t1 = new Thread(new Test2());
        t1.start();
        for (int i = 0; i < 1000; i++) {
            System.out.println("hello");
        }
    }
}

采用继承Thread类方式:
(1)优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。
(2)缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。

采用实现Runnable接口方式:
(1)优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标对象,所以非常适合多个相 同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
(2)缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。

  1. 了解Java中临界资源的同步,使用synchronized关键字

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 线程的Thread.sleep(), Thread.currentThread()获得当前正在运行线程

网络编程

  1. URL类的使用,InputStream openStream()会使用字节流、URL类下载网上的文件资源——会编程
package network.work;

import java.io.*;
import java.net.*;

public class Url {
    public static void main(String[] args) {
        try {
            URL url = new URL("https://cdn.jsdelivr.net/gh/YuJiZhao/picbed/108.jpg");
            HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

            urlConnection.connect();

            InputStream is = urlConnection.getInputStream();
            FileOutputStream fos = new FileOutputStream("yuanshen.png");

            byte[] buffer = new byte[1024];
            int len;
            while((len = is.read(buffer)) != -1) {
                fos.write(buffer, 0, len);
            }

            is.close();
            fos.close();
            urlConnection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

  1. 重点:理解Socket通信的模型、原理;掌握ServerSocket、Socket类的用法;基于Socket的网络通信程序的编写(结合实验三)

服务端:

package network.work;

import java.io.*;
import java.net.*;

public class Work3_server {
    public static void main(String[] args) {
        try{
            //1、创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口
            ServerSocket serverSocket = new ServerSocket(10086);//1024-65535的某个端口
            //2、调用accept()方法开始监听,等待客户端的连接
            Socket socket = serverSocket.accept();
            //3、获取输入流,并读取客户端信息
            InputStream is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String info =null;
            while((info=br.readLine()) != null){
                System.out.println("我是服务器,客户端说:" + info);
            }
            socket.shutdownInput();//关闭输入流
            //4、获取输出流,响应客户端的请求
            OutputStream os = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(os);
            pw.write("欢迎您!");
            pw.flush();


            //5、关闭资源
            pw.close();
            os.close();
            br.close();
            isr.close();
            is.close();
            socket.close();
            serverSocket.close();
        }catch (Exception e) {
            e.printStackTrace();
        }
    }
}

客户端:

package network.work;

import java.io.*;
import java.net.*;

public class Work3_client {
    public static void main(String[] args) {
        try{
            //1、创建客户端Socket,指定服务器地址和端口
            Socket socket = new Socket("localhost",10086);
            //2、获取输出流,向服务器端发送信息
            OutputStream os = socket.getOutputStream();//字节输出流
            PrintWriter pw = new PrintWriter(os);//将输出流包装成打印流
            pw.write("用户名:admin;密码:123");
            pw.flush();
            socket.shutdownOutput();
            //3、获取输入流,并读取服务器端的响应信息
            InputStream is = socket.getInputStream();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String info = null;
            while((info=br.readLine()) != null){
                System.out.println("我是客户端,服务器说:" + info);
            }

            //4、关闭资源
            br.close();
            is.close();
            pw.close();
            os.close();
            socket.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

在这里插入图片描述

GUI

  1. 掌握基本的GUI组件的使用:Label,Button,TextField,TextArea,Choice等等

Label构造函数:

  • Label() 创造一个包含空字符串的Label组件
  • Label(String text) 创造一个包含text字符串的Label组件
  • Label(String text, int alg) 创造一个包含text字符串的Label组件,并指定字符串对齐方式

Label类的方法定义:

  • int getAlignment() 获得Label组件的对齐方式
  • String getText() 获得Label组件的字符串
  • void setAlignment(int alg) 设置组件的对齐方式
  • void setText(String text) 设置Label组件显示的字符串

TextField类的构造函数:

  • TextField() 创建一个单行文本区组件
  • TextField(int columns) 根据指定的宽度创建单行文本区组件
  • TextField(String text) 创建包含指定字符串的单行文本区组件
  • TextField(String text, int columns) 结合上述两点

TextField类的常用方法:

  • int getCoumns() 获得单行文本区的可见部分宽度
  • boolean echoCharlsSet() 测试此单行文本区是否设置遮蔽字符
  • char getEchoChar() 获得此文本区的遮蔽字符
  • dimension getMinimumSize() 获得此单行文本区可显示的最小范围
  • void setColumns(int columns) 设置单行文本区的可见部分的宽度
  • void setText(String s) 设置此单行文本区欲显示的文字字符串

TextArea类的属性:

  • SCROLLBARS_BOTH 同时显示垂直与水平滚动条
  • SCROLLBARS_NONE 不显示任何滚动条
  • SCROLLBARS_HORIZONTAL_ONLY 只显示水平滚动条
  • SCROLLBARS_VERTICAL_ONLY 只显示垂直滚动条

TextArea类的构造函数

  • TextArea() 使用默认值创造一个文本区文件
  • TextArea(int row,int columns) 使用指定的列数与行数创建一个文本区组件
  • TextArea(String text) 在创建文本区时将指定的字符串加入并使用指定的列数与行数
  • TextArea(String text,int rows,int cols) 在创建文本区时将指定的字符串加入并使用指定的列数与行数
  • TextArea(String text,int rows,int cols,ine scrollbaes) 使用指定的列数、行数、字符串与滚动条显示形式来创建文本区
  • String getSelectedText) 获得此文本组件中已被选中的文字
  • void setEditable(Boolean b) 设置是否允许编辑文本区
  • void selectAll() 设置文本组件中所有的文字

TextArea类的常用办法

  • void append(String str) 将指定字符串加入到文本区中的最后位置
  • int getCoumns() 获得文本区的行数
  • int getrows() 获得文本区的列数
  • int getScrollbarVisibility() 获得文本区的滚动条的显示形式
  • int getScrollbarVisibility() 获得文本区的滚动条的显示形式
  • void insert(String str,int pos) 插入指定的字符串到文本区中的指定位置
  • void replaceRange(String str,int start,int end) 将指定的开始与结束位居中的字符串用指定的字符串取代
  • void setCoumns(int columns)设置文本区的行数
  • void setRows(int rows) 设置文本区的列数

Button类的构造函数

  • Button() 创造一个没有标签的按钮组件
  • Button(String label) 创建一个含有标签的按钮组件

Button 类的常用办法

  • String getLabel() 获得按钮组件的标签
  • void setLabel(String label) 设置按钮组件的标签

Choice类的构造函数

  • Choice() 创建一个没有选项的下拉列表
  • void add(String item) 在下拉列表中加入选项
  • void addltem(String item) 在下拉列表中加入选项
  • String getltem(int index) 获得下拉列表中指定位置的选项名称
  • int getltemCount() 获得下拉列表所有选项的个数
  • int getSelectedIndex() 获得下拉列表中被选取选项的位置
  • String getSelectedltem 获得下拉列表中被选取的名称
  • getSelectedObjects(0) 获得下拉列表中所有被选取的选项
  • void insert(String item,int idx) 插入新的选项到指定位置
  • void remove(int position) 删除指定位置的下拉列表选项
  • void remove(String item) 删除指定名称的下拉列表选项
  • void removeAll()删除所有的下拉列表选项
  • void select(int pos) 选取下拉列表中指定位置的选项
  • void select(String str) 选取下拉列表中指定名称的选项
  1. 掌握常用的容器Frame,Panel的使用(知道四种容器:(1)Window ,Frame——默认布局BorderLayout;(2)Panel,Applet)——默认布局FlowLayout
    在这里插入图片描述在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

  2. 容器的最常用的方法add(),setLayout(),setSize(),setVisible()

package GUI;

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class Test3 {
    public static void main(String[] args) {
        Frame frame = new Frame();

        // 布局的概念
        Panel panel = new Panel();

        // 设置布局
        frame.setLayout(null);

        // 坐标
        frame.setBounds(300, 300, 500, 500);
        frame.setBackground(new Color(100, 80, 200));

        // panel设置坐标, 相对于frame
        panel.setBounds(50, 50, 400, 400);
        panel.setBackground(Color.red);

        // 将面板添加至frame
        frame.add(panel);

        // 设置可见性
        frame.setVisible(true);

        // 添加监听事件,监听窗口关闭事件    System.exit(0)
        // 适配器模式
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {  // 程序关闭要做的事情
                // 结束程序
                System.exit(0);
            }
        });
    }
}
  1. AWT事件监听模型,PPT那张图、那张表要掌握
    在这里插入图片描述

  2. 以ActionEvent为例,自己编写一个按钮的消息响应代码(实验三全部包含)

计数器案例:

package GUI;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Objects;

public class Test7 {
    static int num = 0;

    public static void main(String[] args) {
        // 窗口
        Frame frame = new Frame("Counter");
        frame.setVisible(true);
        frame.setSize(400, 350);

        // 显示面板
        Panel showPanel = new Panel(null);
        showPanel.setBounds(0, 0, 400, 275);
        TextField textfield = new TextField("0");
        textfield.setBounds(50, 37, 300, 200);
        showPanel.add(textfield);

        // 操作面板
        Panel operPanel = new Panel();
        operPanel.setBounds(0, 275, 400, 75);
        Button addbtn = new Button("+");
        Button redbtn = new Button("-");
        operPanel.add(addbtn);
        operPanel.add(redbtn);

        // 布局
        // frame.setLayout(new FlowLayout());  // 流式布局
        frame.add(showPanel, BorderLayout.NORTH);
        frame.add(operPanel, BorderLayout.SOUTH);

        // 事件
        AddActionListener myAddActionListener = new AddActionListener(textfield, num);
        addbtn.addActionListener(myAddActionListener);
        redbtn.addActionListener(myAddActionListener);

        // 窗口可关闭
        frame.addWindowListener(
                new WindowAdapter() {
                    @Override
                    public void windowClosing(WindowEvent e) {
                        System.exit(0);
                    }
                }
        );
    }
}

// 点击事件
class AddActionListener implements ActionListener {
    TextField textfield;
    int num;

    AddActionListener(TextField textfield, int num) {
        this.textfield = textfield;
        this.num = num;
    }

    @Override
    public void actionPerformed(ActionEvent e){
        String s = e.getActionCommand();
        if (Objects.equals(s, "+")) num += 1;
        if (Objects.equals(s, "-")) num -= 1;
        this.textfield.setText(String.valueOf(num));
    }
}

在这里插入图片描述

如果有兴趣了解更多相关知识,欢迎来到我的个人网站看看:eyes++的个人空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值