java学习总结
我是廿六啊
放开手去看这个世界
展开
-
单元测试&反射机制(未完结)
单元测试单元测试是指程序猿写的测试代码给自己的类中的方法进行预期正确性的验证单元测试一旦写好了这些测试代码,就可以一直使用,可以实现一定程度上的自动化验证单元测试一般是要使用框架进行单元测试的经典框架:JunitJunit是什么?Junit是Java语言编写的第三方单元测试框架Junit框架的方案可以帮助我们方便且快速的测试我们代码的正确性单元测试概念单元:在Java,一个类就是一个单元单元测试:程序员用Junit编写的一小段代码,用来对某个方法进行功能测试或业务逻辑测试。Ju原创 2020-11-11 21:28:38 · 345 阅读 · 1 评论 -
Socket文件上传演示
目标:实现客户端上传图片给服务器端保存起来客户端常量包public class Constants { public static final String SRC_IMAGE = "E:\\默认\\图片\\证件照\\ZJZ.jpg"; public static final String SERVER_DIR = "D:\\资源\\美女\\"; public static final String SERVER_IP = "127.0.0.1"; public stat原创 2020-11-08 16:41:46 · 112 阅读 · 0 评论 -
实现一个服务端可以同时接收多个客户端的消息
实现一个服务端可以同时接收多个客户端的消息需要在服务端引入多线程在每接受一个客户端的Socket通道,就为他分配一个独立的线程来处理他的消息如此便可实现:一个服务端可以同时接受多个客户端的消息客户端代码public class ClientDemo01 { public static void main(String[] args) throws Exception { // 1.客户端要请求于服务端的socket管道连接。 // Socket(Stri原创 2020-11-08 15:53:59 · 2219 阅读 · 0 评论 -
并发包
并发包CountDownLatch的使用CountDownLatch允许一个或者多个线程等待其他线程完成操作,再执行自己例如;线程1要执行打印:A和C,线程2要执行打印B但线程1在打印A后要线程2打印B之后才能打印C所以:线程1在打印A后,必须等待线程2打印完B后才能继续执行构造器:public CountDownLatch(int count) //初始化唤醒需要的down几步方法:public void await() throws InterruptedException 让当前线程等待,原创 2020-11-04 22:45:58 · 84 阅读 · 0 评论 -
锁的相关知识(悲观锁、乐观锁)
死锁多个线程同时被阻塞,他们中的一个或者全部都在等待某个资源被释放。由于线程无限期的阻塞,因此程序不可能正常的终止。Java死锁产生的四个必要条件:互斥使用,当资源被一个线程使用时,别的线程不能使用不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放请求和保持,当资源请求者在请求其他的资源的同时保持对原有资源的占有循环等待,存在一个等待循环队列:p1要p2的资源,p2要p1的资源,这样就形成了一个循环等待。上面的四个条件都成立的时候,就形成死锁。死锁情况下,打原创 2020-11-04 22:45:01 · 149 阅读 · 0 评论 -
线程池详解
线程池什么是线程池?其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁的创建和销毁线程对象的操作,无需反复的创建线程而消耗过多的资源为什么使用线程池?三个好处:降低资源消耗:减少创建和销毁线程的次数,每个工作线程都可以被重复使用,可执行多个任务提高响应速度:不需要频繁的创建线程,如果有线程可以直接用,不会出现系统僵死提高线程的可管理性(线程池可以约束系统最多只能有多少个线程,不会因为线程过多而死机)线程池的核心思想:线程复用,同一个线程可以被重复使用,来处理多个任务。目原创 2020-11-04 22:43:13 · 81 阅读 · 0 评论 -
文件夹的复制(面试题,有一定难度)
文件夹的复制(面试题,有一定的难度)package com.fudao.digui;import java.io.*;import static com.sun.deploy.cache.Cache.copyFile;/*目标:复制文件夹(面试题 拓展) * 源文件:D:/*/public class CopyFile { public static void main(String[] args) { copyDir(new File("E:/fudao/JAVA原创 2020-11-01 15:47:47 · 149 阅读 · 0 评论 -
非规律化递归问题(啤酒问题)
众所周知,递归算法是在java学习中一定会遇到的问题。规律化递归问题可以总结为三要素来进行解决:终结点公式方向(递归算法的方向一定是指向终结点的)而非规律化递归问题是没有章法可寻的 只能靠自己来创建解决的逻辑代码演示package com.fudao.digui;/*目标:非规律化递归 * 啤酒问题 * 一个人有10元钱,一瓶啤酒2元,2个瓶子可以换一瓶酒,4个盖子可以换一瓶酒, * 问 喝酒总数 和剩余瓶子数 和剩余盖子数 15 1 3 * * 核心问题解决方式就是 将原创 2020-11-01 15:11:02 · 647 阅读 · 3 评论 -
字符流不同编码读取乱码问题的解决(转换流)
字符流不同编码读取乱码的问题/** 目标:字符流不同编码读取乱码的问题。 引入: 我们之前用的代码编码和文件编码都是UTF-8编码,字符流读取没有出现乱码!! 字符流读取: 代码编码 文件编码 中文情况。 UTF-8 UTF-8 不乱码! GBK GBK原创 2020-10-31 22:23:09 · 482 阅读 · 0 评论 -
IO流初步解析
字符集、编码集各个国家为自己国家的字符去了一套编号规则计算机的最小单位是字节B 1B = 8ba=97A=650=48这套编码是ASCII编码中国人:GBK,一般两个字节代表一个中文字符美国人:UTF-8,一个中文一般占三个字节注意:编码前与编码后的编码集必须一致才不会导致乱码英文和数字在任何编码集中都可以通用,不会乱码IO流File类只能操作文件对象本身,不能读写文件对象的内容读写数据内容,应该使用IO流io流就是水流模型,可以将io理解成水管,将数据理解成水流IO流的分类:原创 2020-10-31 19:33:05 · 148 阅读 · 0 评论 -
简单解析递归算法
递归算法核心三要素:终结点公式算法的走向(走向终结点)经典案例(猴子吃桃)/** 目标:递归的经典案例。 猴子吃桃: 猴子第一天摘了若干个桃子,当即吃了一半,觉得好不过瘾,然后又多吃了一个。 第二天又吃了前一天剩下的一半,觉得好不过瘾,然后又多吃了一个。 以后每天都是如此 等到第十天再吃的时候发现只有1个桃子,请问猴子第一天总共摘了多少个桃子。 公式: f(x+1) = f(x) -原创 2020-10-31 19:30:06 · 211 阅读 · 0 评论 -
File类
File类创建File类的格式File f = new File(相对路径/绝对路径)绝对路径:从磁盘的的盘符一路走到目的位置的路径。– 绝对路径依赖具体的环境,一旦脱离环境,代码可能出错!!– 一般是定位某个操作系统中的某个文件对象。相对路径:不带盘符的。(重点)– 默认是直接相对到工程目录下寻找文件的。– 相对路径只能用于寻找工程下的文件。– 能用相对路径就应该尽量使用,可以跨平台!小结:创建文件对象可以使用绝对路径也可以使用相对路径相对路径只能找到工程下的路径文件对象可以表原创 2020-10-31 19:28:43 · 64 阅读 · 0 评论 -
并发包
并发包(重点的重点)来历:在实际开发中如果不需要考虑线程安全问题,大家不需要做线程安全,因为如果做了反而性能不好!但是开发中在很多业务是需要考虑线程安全问题,此时就必须考虑了。否则业务出现问题java为很多业务场景提供了性能优异,且线程安全的并发包,程序员可以选择使用Map集合中的经典集合:Hashmap他是线程不安全的,性能好如果要求+线程安全的业务情况下就不能用这个集合做Map集合,否则业务会崩溃为了保证线程安全,可以使用Hashtable 注意:线程中加入了计时Hashtable是线程安原创 2020-10-31 19:28:05 · 218 阅读 · 0 评论 -
死锁 悲观锁 乐观锁
死锁多个线程同时被阻塞,他们中的一个或者全部都在等待某个资源被释放。由于线程无限期的阻塞,因此程序不可能正常的终止。Java死锁产生的四个必要条件:互斥使用,当资源被一个线程使用时,别的线程不能使用不可抢占,资源请求者不能强制从资源占有者手中夺取资源,资源只能由资源占有者主动释放请求和保持,当资源请求者在请求其他的资源的同时保持对原有资源的占有循环等待,存在一个等待循环队列:p1要p2的资源,p2要p1的资源,这样就形成了一个循环等待。上面的四个条件都成立的时候,就形成死锁。死锁情况下,打原创 2020-10-31 19:27:22 · 107 阅读 · 0 评论 -
线程池
线程池什么是线程池?其实就是一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁的创建和销毁线程对象的操作,无需反复的创建线程而消耗过多的资源为什么使用线程池?三个好处:降低资源消耗:减少创建和销毁线程的次数,每个工作线程都可以被重复使用,可执行多个任务提高响应速度:不需要频繁的创建线程,如果有线程可以直接用,不会出现系统僵死提高线程的可管理性(线程池可以约束系统最多只能有多少个线程,不会因为线程过多而死机)线程池的核心思想:线程复用,同一个线程可以被重复使用,来处理多个任务。目原创 2020-10-31 19:25:10 · 91 阅读 · 0 评论 -
线程安全问题(同步)
线程安全问题多个线程同时操作同一个共享资源的时候可能出现线程安全线程安全问题的解决(线程同步)线程同步的方式有三种:同步代码块同步方法lock显示锁同步代码块作用:把出现线程安全问题的核心代码给上锁,每次只能一个线程进入执行完毕以后自动 解锁,其他线程才可以进来执行格式: synchronized(锁对象){//访问共享资源的核心代码}锁对象:理论上可以是任意的“唯一”对象即可原则上:锁对象建议使用共享资源。 在实例方法中建议用this作为锁对象。此时thi原创 2020-10-31 19:24:10 · 122 阅读 · 0 评论 -
多线程(并发编程)
多线程(并发编程)创建线程的三种方式运行中的程序就是进程进程的三个特征:动态性 : 进程是运行中的程序,要动态的占用内存,CPU和网络等资源。独立性 : 进程与进程之间是相互独立的,彼此有自己的独立内存区域。并发性 : 假如CPU是单核,同一个时刻其实内存中只有一个进程在被执行。CPU会分时轮询切换依次为每个进程服务,因为切换的速度非常快,给我们的感觉这些进程在同时执行,这就是并发性。并行:同一个时刻同时多个在执行什么是线程?线程是属于进程的,一个进程可以包含多个线程,这就是多线原创 2020-10-31 19:22:52 · 160 阅读 · 0 评论 -
异常
常见的运行时异常数组越界异常 ArrayIndexOutOfBoundException空指针异常NullPointerException类型转换异常ClassCastException数学操作异常ArithmeticException数字转换异常NumberFormatException迭代器遍历没有此元素异常编译时异常编译时异常必须马上处理,否则编译不通过编译时异常的处理方式一抛出异常格式:代表一切异常方法throws Exception{}方式一:出现编译时异常的地方层层原创 2020-10-31 19:19:49 · 90 阅读 · 2 评论