JAVA中级知识
JAVA中级
一、异常处理
1、文件不存在异常FileNotFoundException
2、异常处理常见手段:try catch finally throws
3、throw和throws区别
(1)throws 出现在方法声明上,而throw通常都出现在方法体内。
(2)throws 表示出现异常的一种可能性,并不一定会发生这些异常;throw则是抛出了异常,执行throw则一定抛出了某个异常对象。
4、运行时异常
(1)运行时异常RuntimeException指 不是必须进行try catch的异常
(2)除数不能为0异常:ArithmeticException
下标越界异常:ArrayIndexOutOfBoundsException
空指针异常:NullPointerException
5、Throwable
(1)Throwable是类,Exception和Error都继承了该类
二、I/O
1、文件对象
(1)文件和文件夹都是用File代表
(2)exists文件存在 isDirectory文件夹 isFile文件 length长度
lastModified最后修改时间 renameTo重命名
(3)list所有文件 listFiles文件 getParent文件夹
mkdir创建 mkdirs createNewFile listRoots所有盘符
delete删除文件
deleteOnExitJVM结束的时候,刪除文件,常用于临时文件的删除
2、Stream流
(1)一系列以字节的形式的数据,输入流: InputStream输出流:OutputStream
(2)文件输入流:
FileInputStream fis =new FileInputStream(f);
通过这个输入流,就可以把数据从硬盘,读取到Java的虚拟机中来,也就是读取到内存中
3、字符流
(1)Reader字符输入流 、Writer字符输出流、专门用于字符的形式读取和写入数据
4、中文问题
(1)常见编码
ISO-8859-1 包含 ASCII
GB2312 是简体中文,BIG5是繁体中文,GBK同时包含简体和繁体以及日文。
UNICODE 包括了所有的文字,无论中文英文,藏文,法文,世界所有的文字都包含其中
(2)用FileReader字符流正确读取中文
new InputStreamReader(new FileInputStream(f),Charset.forName(“UTF-8”))
5、缓冲流
(1)使用缓存流读取数据
缓存字符输入流 BufferedReader 可以一次读取一行数据
(2)使用缓存流写出数据
PrintWriter 缓存字符输出流, 可以数据
// 创建文件字符流
FileWriter fw = newFileWriter(f);
// 缓存流必须建立在一个存在的流的基础上
PrintWriter pw = newPrintWriter(fw);
(3) flush
//强制把缓存中的数据写入硬盘,无论缓存是否已满 pw.flush();
6、数据流
(1)DataInputStream 数据输入流 DataOutputStream 数据输出流
7、对象流
(1)对象流指的是可以直接把一个对象以流的形式传输给其他的介质,比如硬盘
(2) 一个对象以流的形式进行传输,叫做序列化。
(3)该对象所对应的类,必须是实现Serializable接口
8、System.in
(1)System.out 是常用的在控制台输出数据的 System.in 可以从控制台输入数据
三、集合框架
1、ArrayList存放对象–容器的容量“capacity”会随着对象的增加自动增长
2、常用方法:
add增加 contains是否存在 get获取指定位置的对象 indexOf获取对象所处的位置
remove删除 set替换 size获取大小 toArray转换成数组 clear清空
addAll把另一个容器所有对象都加进来
3、List接口
(1)ArrayList实现了接口List----java.util.List
4、泛型Generic
(1)List genericheros = new ArrayList();
5、遍历
(1)for循环遍历、增强型for循环 iterator迭代器遍历
Iterator it= heros.iterator();
5、其他集合
(1)ListedList
序列分先进先出FIFO,先进后出FILO
FIFO在Java中又叫Queue 队列
FILO在Java中又叫Stack 栈
(2)双向链表–Deque / 队列Queue(offer在最后添加元素、poll取出第一个元素、peek查看第一元素)
(3)HashMap存储数据的方式—键值对
HashMap<String,String> dictionary = newHashMap<>();
(4)HashSet
元素不能重复HashSet names = newHashSet();
无顺序
HashSet是作为Map的key存在
(5)Collection:Set List Queue和 Deque的接口
Collections是一个类,容器的工具类,就如同Arrays是数组的工具类
reverse反转 shuffle混淆 sort排序 swap交换
rotate滚动 synchronizedList线程安全化
四、泛型
1、集合中的泛型
(1) ArrayList 默认接受Object类型的对象,所以所有对象都可以放进ArrayList中
(2) 泛型的用法是在容器后面添加,可以是泛型的子类放入
2、通配符
(1)?Extends
ArrayList heroList<? extends Hero> 表示这是一个Hero泛型或者其子类泛型
(2)? super —泛型或者父类泛型
(3)泛型通配符?代表任意泛型
五、Lambda表达式
六、多线程
1、启动一个线程
(1)多线程即在同一时间,可以做多件事情,进程(Processor)和线程(Thread)
(2)设计类继承Thread,并且重写run方法
启动:实例化对象,调用start方法
(3)实现Runnable接口
(4)使用匿名类,继承Thread,重写run方法
2、线程方法
sleep当前线程暂停 join加入到当前线程中 setPriority线程优先级
yield临时暂停 setDaemon守护线程
3、同步Concurrency 问题
(1)多线程的同步问题指的是多个线程同时修改一个数据的时候,可能导致的问题
(2)synchronized同步对象synchronized表示当前线程,独占 对象 someObject
(3)Synchronized(this){ }
4、线程安全
(1)HashMap不是线程安全的类(可存null) Hashtable是线程安全的类(不可存null)
(2)StringBuffer 是线程安全的 StringBuilder 是非线程安全的
(3)Vector是线程安全的类,而ArrayList是非线程安全的。
(4)避免死锁现象
5、线程池
(1)线程池类ThreadPoolExecutor在包java.util.concurrent下
6、Lock对象
(1)与synchronized类似的,lock也能够达到同步的效果
(2)Lock是一个接口,lock()方法表示当前线程占用lock对象,一旦占用,其他线程就不能占用了
(3)Trylock()方法: trylock会在指定时间范围内试图占用
五、JDBC(Java DataBase Connection)
1、流程
(1)导入jar包
(2)初始化驱动
Class.forName(“com.mysql.jdbc.Driver),Class.forName是把这个类加载到JVM中,加载的时候,就会执行其中的静态初始化块,完成驱动的初始化的相关工作。
(3)建立与数据库的连接
(4)Statement是用于执行SQL语句的,比如增加,删除
(5)s.execute执行sql语句
(6)关闭连接(先关闭Statement,后关闭Connection)
2、增、删、改、查
(1)C 增加(Create) R 读取查询(Retrieve) U 更新(Update) D 删除(Delete)
(2)查询: executeQuery执行SQL查询语句
3、预编译Statement
(1)PreparedStatement:参数设置、性能表现、防止SQL注入式攻击
4、execute和executeUpdate
(1)相同点: 增加、删除、修改
(2)不同点: executeUpdate不能执行查询语句;
execute返回boolean类型、executeUpdate返回的是int
5、ORM
ORM=Object Relationship Database Mapping
对象和关系数据库的映射 (一个对象,对应数据库里的一条记录)
6、DAO
DAO=Data Access Object 数据库访问对象
7、数据库连接池
六、图形界面
1、GUI-Graphic User Interface 图形用户界面
2、事件监听
(1)ActionListener 按钮监听
(2)KeyListener 键盘监听
(3)MouseListener 鼠标监听
(4)Adapter 适配器
3、容器
(1)窗体型容器有两个,一个是JFrame,一个是JDialog
(2)JFrame是最常用的窗体型容器,默认情况下,在右上角有最大化最小化按钮
(3)JDialog也是窗体型容器,右上角没有最大和最小化按钮
(4)模态JDialog:
当一个对话框被设置为模态的时候,其背后的父窗体,是不能被激活的,除非该对话框被关闭
(5)窗体大小不可变化:setResizable(false)
4、布局器
(1)布局器是用在容器上,用来决定容器上的组件摆放的位置和大小
(2)绝对定位、FlowLayout、BorderLayout、GirdLayout、CardLayout
(3)setPreferredSize向布局器建议该组件显示的大小
5、组件
(1)图形界面两个控件:awt , swing
(2)JLabel标签 setIcon使用JLabel显示图片 JButton按钮 JCheckBox复选框
JRadioButton单选框 ButtonGroup按钮组 JComboBox下拉框
JOptionPane对话框 JTextField文本框 JPasswordField密码框
JTextArea文本域 JProgressBar进度条 JFileChooser文件选择器
6、面板
(1)基本面板 JPanel即为基本面板,把组件放在面板上,然后再把面板放在窗体上。
(2)ContentPane
(3)SplitPanel
(4)JScrollPanel: 带滚动条的面板
(5)TabbedPanel
(6)CardLayerout布局器
7、菜单
(1)菜单栏和菜单项
8、工具栏用于存放常用的按钮、设置提示信息、禁止工具栏拖动
9、日期控件
(1)DatePicker: datepicker.jar 包,不能设置时间,只能在创建控件的时候传入指定日期。
(2)JXDatePicker: 包swingx-core-1.6.2.jar,界面比较简约,可以设置日期
10、Swing中的线程
(1)三种线程
初始化线程、事件调度线程、长耗时任务线程
七、网络编程
1、IP地址 端口
(1)IP:在网络中每台计算机都必须有一个的IP地址
(2)端口: 服务器和客户端之间的通信通过端口进行
(3)获取本机IP地址:
InetAddress host = InetAddress.getLocalHost();
String ip =host.getHostAddress();
(4)ping命令:使用ping判断一个地址是否能够到达
windows中的一个小工具,用于判断一个地址的响应时间
2、Socket
(1)使用 Socket(套接字)进行不同的程序之间的通信
(2)一旦建立了连接,服务端会得到一个新的Socket对象,该对象负责与客户端进行通信。
(3) 把输出流封装在DataOutputStream中 使用writeUTF发送字符串 “Legendary!”
把输入流封装在DataInputStream 使用readUTF读取字符串,并打印
(4) 多线程,同时收发消息