多线程 (支持多人操作)例如qq
IO流 输入输出流
异常
API的使用、集合等
1、GUI(Graphical User Interface)图形用户界面
2、开发使用的java.swing包中的工具类 JFrame
java.awt包中的工具类 Frame (老的 繁琐)
3、swing包中工具类的分类:
1)基本的组件:界面编程中包含的内容。例如:按钮 文本输入框 单选按钮...
2)容器:基本组件放在一起的就是容器 例如:窗体 面板
4、组件、容器
1)窗体(JFrame)
(1)创建 (2)导包 (3)调用方法对窗体设置
2)标签 JLabel
功能1:用于显示文本或者图片
JLabel组件的创建方式:
(1)new JLabel() 创建空标签
(2)new JLabel(String) 创建文本的标签
(3)new JLabel(icon) 创建带图片的标签
3)文本输入框(文本域) JTextField JTextArea
主要用于用户输入姓名、输入信息等。是一个能够接受用户键盘输入内容的小块区域
文本输入框的创建方式:
(1)创建一个空文本域
(2)创建内容空但是带有指定长度的文本域
(3)创建带指定内容的文本域
(4)创建带指定内容,指定长度的文本域
4)按钮 JButton
5)面板 JPanel 一个小板子
JFrame 墙
6)图标 ImageIcon
5、布局管理器
1)FlowLayout布局管理器
是一种最为简单的布局管理方法,也是面板的默认布局
它是以流的方式,从左到右,从上往下的存放组件,默认居中对齐方式
2)BorderLayout布局管理器
3)GridLayout布局管理器
6、事件处理
三部分:事件源 事件 事件监听
事件源:比如按钮、文本域、单选按钮、图片、标签等
事件:单击事件、双击事件等
事件监听:ActionListener
事件处理的实现形式:
外部类形式**
内部类形式**
类本身作为监听器的形式
匿名内部类的形式
类 public class A{ .... } A a=new A();
抽象类 == 接口
public abstract class Person{.... } Persion p=new Person(); ×
public abstract class Animal{ ... } Animal am=new Animal(); ×
接口是一种特殊的抽象类
抽象类:public abstract class M{ .... }
接口: public interface M{ .... }
注意:抽象类和接口都不能直接new创建
ActionListener接口
类 extends 类 √
类 extends 接口 ×
类 implements 接口 √
监听器接口: ActionListener事件监听器
WindowListener窗口监听器(接口) WindowAdapter窗体监听适配器(抽象类)
implements 接口,extends 抽象类
实现接口,必须实现接口中所有定义的方法,但是适配器(抽象类)可以只调出需要用到的某几个方法
MouseListener鼠标监听器 MouseAdapter鼠标监听适配器
ItemListener下拉列表框监听器
ChangeListener 滑块移动的监听
7、Java中的IO流
InputOutput流 -- 输入输出流
1)File类:是一个文件或者文件夹,可以使用该类对文件或者目录进行新建、删除、重命名等操作
但是File类不能读写文件里的内容
2)File类的创建方式:
File f=new File("文件夹或者文件");
f表示文件夹或者文件
File f=new File(File,"文件夹或者文件");
f表示在File下的文件或者文件夹
3)File中的方法
getName() 获得文件名或者文件夹名
getCanonicalPath() 获得文件或者文件夹的路径
mkdir() 创建文件夹
exits() 判断文件或者文件夹是否存在
isDirectory() 判断是否是文件夹
isFile() 判断是否是文件
length() 求文件的大小
createNewFile() 创建文件
listFiles() 查看当前文件夹下有哪些内容
delete() 删除文件 文件夹(空)
4)FileFilter(接口) java.io包中的接口 文件过滤器
5)Java中的IO流
File类不能对文件进行读写操作,所以使用IO流对文件进行读写
(1)Java中IO流的分类
a 输入流 : 从文件中读取数据
输出流: 向文件中写数据
b 字节流:以字节为单位进行读写 '中'->字节编码
字符流;以字符为单位进行读写 '中' ***
c 节点流:向IO设备(磁盘 网络等)读写的流
包装流(功能流):有特定功能的流,在基本的流上封装了一些特定的功能
流的概念:使用输入或者输出的处理方式,对文件、图片、音频、视频等进行处理
6)字符流(字符流依赖于字节流完成对文件的读写操作)
(1)InputStreamReader 字符输入流 分类:输入流-读 字符流 节点流
(2)OutputStreamWriter 字符输出流 分类:输出流-写 字符流 节点流
字节流
(1)FileInputStream 字节输入流 分类:输入流-读 字节流 节点流
(2)FileOutputStream 字节输出流 分类:输出流-写 字节流 节点流
7) 字符缓冲输入流 BufferedReader -- 读 分类:输入流 字符流 包装流(功能流)
字符缓冲输出流 BufferedWriter -- 写 分类:输出流 字符流 包装流(功能流)
为了提高对文件的读写效率,缓冲流是把一次读写的内容变大了
8、Java中的多线程
1)概念:
程序:计算机支持的每一个任务都可以理解为是一个程序 QQ.exe
进程:运行中的程序叫做进程。 一个程序安装后启动运行,在计算机内存中会出现对应的进程
多线程:是一个进程内部的更小单位。在一个进程的内部,出现的“并发执行”的现象叫做多线程
qq: 张三 A同学
B同学
C同学
群
2)java程序的执行顺序
(1)顺序执行:从main方法开始,从上往下依次执行
(2)并发执行:各自执行,互不干扰 -- 用到多线程
“并发执行”并不是真正意义上的同时执行,同时执行只能在现实中做到。
在计算机中做不到真正意义上的同时执行,只能做到并发执行。
计算机会使用CPU分配不同的线程时间片(执行权限),拿到时间片的线程执行,其他的线程等待。
CPU分配时间片是不可控制的,人为控制不了,取决于计算机本身。
微观上看这些线程是走走停停的,但是CPU分配时间片速度非常快,宏观上看就是同时执行的现象。
3)多线程的创建方式
(1)继承Thread类
1)让一个类去继承Thread,继承之后该类就成为一个线程,具有并发执行的功能
2)在该类中调出run方法重写,在run方法中实现多线程要做的事
3) 调用start方法启动线程
(2)实现Runnable接口
1)让一个类去实现Runnable接口,实现之后该类具有并发执行的功能
2)在该类中调出run方法重写,在run方法中实现多线程要做的事
3)调用start方法启动线程
4)线程的生命周期
(1)创建状态
当new创建了一个线程实例,创建完成以后该线程就处于新建状态
new FirstThread();
new FirstRunnable(); -->新建状态
(2)就绪状态
当线程对象调用了start()方法之后,该线程就处于一种就绪状态
first.start()
t1.start(); -->就绪状态
(3)运行状态
如果处于就绪状态的线程获得了cpu,就会开始执行run方法,该线程就会处于运行状态
public void run(){...} -->运行状态
(4)阻塞状态
当一个线程开始运行后,它不可能一直处于运行状态,线程在运行过程中需要被中断,目的是让其他线程获得执行的机会。
当出现以下情况时,线程会进入阻塞状态:
①线程调用了sleep()方法, 睡眠
②线程调用了一个阻塞的IO方法
③等待一个通知等...
被阻塞的线程会在合适的机会重新进入就绪状态,等待CPU的调用
(5)死亡状态
结束后的线程处于死亡状态
出现出现以下几种情况会自动结束,进入死亡状态
①run()方法正常执行完了
②线程出现了异常或者错误
③直接调用线程的stop方法结束线程
5)线程的操作
(1)线程睡眠的操作
如果让当前正在执行的线程暂停一段时间,并进入阻塞状态,可以通过sleep睡眠的方法来实现。
Thread.sleep();
(2)后台线程的操作
概念:①后台线程的特点是随着主程序的结束而结束的,但是前台线程不会。正常创建的线程默认都属于前台线程
②设置后台线程的方法:用setDaemon(true)可以将该线程设置为后台线程
isDaemon()可以判断一个线程是前台线程还是后台线程, true为后台线程,false为前台线程
③setDaemon()方法必须在start方法之前设置,否则会抛出异常
6)线程安全问题
(1)线程安全
可以在计算机中运行各种计算机软件程序,在每一个运行的程序中可能包含多个独立运行的线程。
当多个线程同时读写同一份共享资源的时候,可能会引发冲突。这时候需要引入线程同步机制,即各个线程之间要有顺序。
线程同步的真实意义是一个一个的对共享资源进行操作,而不是同时进行
(2)线程同步:一个一个的顺序操作共享资源,会避免这种安全隐患
线程同步可以解决线程安全问题,可以给共享资源加一把锁,加上锁之后,当一个线程访问该共享资源的时候,另外其他线程没有权限访问。
Java中提供了一个同步锁,使用synchronized给一段代码加同步锁
线程并发:多线程默认是并发执行的,并发执行会对同一共享资源触发安全隐患
例子:银行卡 2000元
丈夫卡取1500元 妻子存折1500元
丈夫取钱是一个线程,妻子取钱也是线程,多线程是并发执行,就会有安全隐患,丈夫去了1500,妻子也取了1500
9、Java中的网络编程
基于TCP协议的网络编程
1)TCP协议
TCP协议是一种可靠的网络协议,通信两端的Socket让他们之间形成网络虚拟链路,两端的程序可以通过虚拟链路进行通信
Java使用Scoket对象代表两端的通信端口,通过Socket产生的IO流进行通信
2)服务器端ServerSocket
服务器端的ServerSocket对象使用accept()方法用于监听来自客户端Socket的链接请求,如果接收到了客户端Socket的链接请求,该方法就会返回一个
与客户端Socket对应的Socket对象。如果没有链接,该方法一直处于等待状态。
3)客户端Socket
主要是用于描述ip地址和端口
服务器端 客户端
ServerSocket Socket
accept()方法->Socket Socket1(ip和端口)
数组的框架
数组:容器 数据 int[] arr={1,2,3,4,5,6,7,8,9,10}; int[] arr=new int[10];
10、Java中的集合 -- 容器 -- 数据 集合的底层就是由数组实现的,集合操作数据比数组更加方便
分类:
1)List集合
List是一个接口,使用List集合不能直接创建,可以使用List接口的实现类ArrayList,ArrayList可以理解为线性表数据结构
(1)ArrayList的创建方式和常用方法
创建方式:List<泛型> a=new ArrayList<泛型>();
ArrayList<泛型> b=new ArrayList<泛型>();
常用方法:
add(E e) 往集合中添加内容
add(int index,E e) 指定下标插入内容
get(int index) 根据下标取单个内容
set(int index,E e) 根据下标修改对应的内容
remove(int index) 根据下标删除对应的内容
toArray() 将集合转换数组
Arrays.asList() 将数组转换为集合
subList(start,end) 截取集合的中的内容
2)Set集合 -- 存储数据用的,Set集合的特点是:不能放重复内容
Set是一个接口,要Set接口的实现类HashSet
3)Map集合 -- 存储数据用的,Map集合的特点是:以键值对的方法存储内容
Map是一个接口,要Map接口的实现类HashMap