Java知识点整理(二)
——网络1801张咕咕
8.异常处理机制
程序出现了异常导致程序自动终止崩溃输出错误信息的话, 后面的程序会停止继续运行。
一个try可以搭配多个catch块
Java异常处理涉及五个关键字:
try, catch, finally, throws, throw
Finally语句定义一个总是要执行的代码块, 不需要考虑异常是否被捕获。
也可以有try…finally这样的结构。
getMessage() printStackTrace() 分别为得到错误信息和输出详细的错误信息
Java异常类主要分为两大类 :
错误类 Error类 无法处理, 线程终止
异常类 Exception类 分为RuntimeException 一般是逻辑错误引起
和 IOEexcption
java.lang.Throwable 作为所有异常的超类
常见的运行时异常 比如数字越界, 算术异常, 空指针异常, 数字格式异常, 下标越界, 字符串下标越界, 类型转换异常, 非法传递参数异常。
为了使程序更加健壮, 对于当前有些异常当前层无法处理的或者无法解决的, 则可抛出异常, 由上层调用者来进行处理。
throws Exception 允许throws后面跟着多种类型, 用逗号分割
throw出现在方法体中, 用于明确抛出一个具体的异常对象
可以自定义异常类, extends自 Exception
try…catch…finally中包含了return语句
9.集合和泛型
Java框架均在java.util包中
主要分为两个接口 Collection接口(允许重复,对象之间没有指定的顺序)和Map接口(不能有重复的key, 但是可以有重复的value)
ArrayList线性表 底层用Object数组实现, 查询快, 增删慢
LinkedList链表 查询慢, 增删快
Collection仅仅只是一个接口, 真正使用的时候, 是这个接口的一个实现类
集合Iterator迭代器
Collection c = new Arraylist();
c.add("s1");
Iterator it = c.iterator();
while(it.hasNext()) {
String ele = (String) it.next();//强行转换类型
System.out.print(ele);
}
it = c.iterator();
while(it.hasNext()) {
Object ele = it.next();//没有强行转换类型
System.out.print(ele);
it.remove();
}
ListIterator逆向遍历 参数为list.size()即可
Map中keySet()为所有键值的集合, 然后可以用迭代器一一取出
或者用entrySet()去的映射关系, 强制转换获得关系对象, 从对象中去除key和value;
Map.Entry me = (Map.Entry)it.next();
排序有两个接口,
Comparator接口 Collections。sort(List list, Comparator c)完成自定义排序。参数变成 list, new myComparator().在集合外部实现
重写的是compare方法
记得implements Comparator
自定义排序只要是前者减去后者按照顺序减的话那就是升序, 反之降序
Comparable重写的是compareTo()方法
也一样记得implements即可
排序用Collections.sort(list)
在集合内部实现
Comparator能将算法和数据分离, 不必改变对象本身, 可定义多种为同一个集合对象使用。
泛型就是一种模板
泛型中可用通配符来代替任意类型参数, 或者主观的加上限制。
泛型也可以有接口。
10.Java多线程
一个正在运行的程序称为进程
一个进程包含多个线程
多线程的目的是为了多个线程并发执行, 提高系统利用效率
Java线程生命周期图
生命周期分为创建, 就绪, 运行, 阻塞和死亡五个状态
Start()就是创建一个线程, 进入就绪状态(差cpu执行)
运行的时候suspend()或者sleep()IO阻塞都会让其进入阻塞队列去,
当sleep()时间到, IO方法返回, 或者resume()重新激活就绪
Stop()或者Error Exception 或者run()/call()都会使其执行完成而死亡
创建线程:
1.继承Thread类 extends Thread
myThread t = new myThread();
2.实现Runnable接口(常用)implements Runnable
Thread t = new Thread(new myThread());
两种方法都需要重写run()方法
Thread.currentThread().getName();获得当前线程名
也可以使用匿名类写法
new Thread(new Runnable(){
Public void run(){
}
}).start();
可以添加Thread.sleep()使运行暂停一段时间。
当一个变量成为类成员的时候, 他们会共享数据,不同线程之间结果可能会互相干扰, 所以线程并不一定安全。
线程同步时为了避免线程同步执行。
synchronized关键字:
修饰代码块, 一个时间只有一个线程得到运行
修饰方法, 该方法只能有一个线程执行, 其它出于等待状态
修饰某个类, 该类的所有方法都是synchronized
(注意要记得synchronized怎么写)
synchronized(this){
方法
}
其中的this也可以替换成一个对象实例。
synchronized public void show(){ }
同步是一种高开销的操作, 应该尽量减少同步的内容
线程通信基本机制: 等待/通知机制
Java线程通信:借助于Object类的wait()(可以将当前线程挂起)/notify()(唤醒阻塞队列中优先级最高的线程进入就绪队列)/notifyAll()(唤醒所有阻塞队列中的线程进入就绪队列)
(只能出现在synchronized的作用范围内)
11.SwingUI编程
JFrame是一个顶层容器, 支持多线程。
BorderLayout 是JFrame的默认布局管理器
常用组件分为
文本组件,JLabel, JTextField, JPasswordField
选择组件, JButton, JCheckbox, JRadioButton, JComboBox, JList
菜单组件, (考的少)
12.Jdbc编程
show databases/tables
Insert into 表名 values(各字段值)
Select 字段 from 表名 where 条件
Delete from 表名 where 条件
Update 表名 set 字段名 = 值 where 条件
Drop table 表名
Drop database 库名
Jdbc 是一种用于与数据库建立连接、执行SQL语句并处理结果的Java API
关键部分:
**String (连接字符串)url="jdbc:mysql://localhost:3306/userdb?serverTimezone=UTC";//
Class.forName("com.mysql.cj.jdbc.Driver");
(装载数据库的jdbc驱动程序)
Connection (建立与数据库的连接)conn=DriverManager.getConnection(url,"root","zh614288106");
Statement stmt=conn.createStatement();
(建立Statement对象)
String sql="select*from zhuce where username='"+username+"'";
ResultSet rs=stmt.executeQuery(sql);(用于返回结果集)
if(rs.next()) {
JOptionPane.showMessageDialog(null, "用户名已存在!");
}else {
sql="insert into zhuce values('"+username+"' "+",'"+encode(psd)+"')";
int rsCount=stmt.executeUpdate(sql);
(用于创建和更新表, 返回收影响行数(int))
JOptionPane.showMessageDialog(null, "注册成功");
}
Excute用于执行任何SQL语句 返回布尔值(如果结果是ResultSet:true 否则false)
结果集中的列号从1开始(根据列号取值)
依次关闭ResultSet, Statement 和 Connection对象
Rs.close(), stmt.close, conn.close();
记得加载MySql驱动**
13.JavaIO和网络编程
流是Java内存中的一组有序数据序列。
流分类可以分为: 输入流和输出流
处理数据的单位: 字节流和字符流 前者直接与计算机交互输入输出,后者一般是文本文件, 区别在于每次读写的字节数不同。
InputStream 和OutStream 都是字节流
Reader和 Writer都是字符流
缓冲前面加上Buffered, 文件前面加上File
**读文件:
BufferedReader br = new BufferedReader(new InputStreanReader(new FileInputStream(“”)));
BufferedReader br = new BufferedReader(new FileReader(“”));
写入文件:
BufferedWriter br = new BufferedWriter(new FileWriter());*
Java网络编程:
Socket是web应用程序进行网络通讯的接口
发起网络连接,需要知道远程机器的IP地址或者名字和端口号。
客户端和服务器必须事先约定所使用的端口。
TCP(可靠)/UDP(不可靠) 前者传输效率不如后者高。
Socket由java.net包中的类来实现
Socket连接主要流程: