Idea Maven创建Java Web项目的坑
摘要:1.先创建一个Maven-JavaWeb项目,并配置Tomcat https://blog.csdn.net/weixin_33446857/article/details/82143258 这一步,点击运行tomcat,java web的默认页面可以打开了,但不能新建java class文件。 2
阅读全文
Idea利用SpringMVC创建servlet web工程需要的maven配置
摘要:1.如果不需要spring mvc,删除相关dependency即可。 2.Idea->pom.xml <!-- 以下为创建java spring mvc restful风格使用的jar包 --> <dependency> <groupId>javax.servlet</groupId> <arti
阅读全文
Java链式编程与流式计算
摘要:需求: 要求,只能用一行代码实现 现有5个用户,按照以下条件赛选: 1.ID必须是偶数 2.年龄必须大于23岁 3.用户名转为大写字母 4.用户名字倒着排序 5.只输出一个用户 以下是代码示例: import java.util.Arrays; import java.util.List; publ
阅读全文
Java的四大函数式接口
摘要:1.什么是函数式接口: 函数式接口是 Java8 引入的一个新特性,是一种特殊的接口:SAM类型的接口(Single Abstract Method),但本质上还是接口。相比较于其他接口,函数式接口有且只能有一个抽象方法。只要接口中出现多个抽象方法,那么就不能称之为函数式接口,运行的时候就会报错。为
阅读全文
Java多线程生产者消费者模式(二)之死锁与虚假唤醒
摘要:前提: 当只有一个生产者与消费者,也就是只有两个线程时,唤醒的永远时对方线程。 当只有一个生产者时和两个消费者,或者两个生产者与两个消费者时,唤醒的就是所有线程了,这样就会产生死锁和虚假唤醒。 多线程对多线程,必会有死锁和虚假唤醒问题。 比如下面的代码,初看正常,刚运行几次也正常,但多运行几次就出现
阅读全文
Java多线程(六)锁机制之JUC的locks接口
摘要:java.util.concurrent.locks这个接口是关于锁的。与synchronized相比,lock更具有灵活性. java.util.concurrent.locks的三个实现类: ReentrantLock ReentrantReadWriteLock.ReadLock Reentr
阅读全文
Java多线程生产者消费者模式(一)之两个线程交替执行
摘要:生产者与消费者模式能够实现两个线程交替执行,进一步深入之后能够实现让线程A->B->C->A这个多个线程互相唤醒,形成一个圈。 本篇,我们模拟一个包子铺,厨师线程作为生产者;吃货线程作为消费者。 生产者消费者模式的基本套路 1.生产者与消费判断是否等待的判断条件是相反的 2.生产者线程处理完后,唤醒
阅读全文
Java多线程(四)实现多线程的三种方法之JUC的Callable接口
摘要:什么是Callable: Callable是java.util.concurrent的一个接口,常常需要与java.util.concurrent.Executor类一起使用. java.util.concurrent简称JUC. Callable与Runnable的异同. 不同点 Runnable
阅读全文
Java线程的6种状态
摘要:一: Java的线程一共有6种状态,这是来自java官方源代码里面定义的,是最权威的。 NEW RUNNABLE BLOCKED WAITING TIMED_WAITING TERMINATED 二: 如何查看源码: 输入以下代码,在IntelliJ Idea中按快捷键ctrl+B Thread.S
阅读全文
Java lambda表达式的进化论
摘要:前情提示: lambda表达式是JDK1.8的新特性 1. 进化的初级阶段之静态内部类 public class LambdaDemo { //静态内部类 static class ListenMusic implements Runnable { @Override public void run
阅读全文
Java内部类
摘要:1.内部类分为4种: 成员内部类(定义在类里面的类),又称普通内部类 局部内部类(定义在方法体或者代码块里面的类) 静态内部类(static关键字修饰的内部类) 匿名内部类 2.内部类的特点: 可以使用外部类的属性,即使这个属性是private的也可以使用 可以调用外部类的方法 在多线程时常用内部类
阅读全文
Java多线程(五)锁机制之synchronized 同步方法和同步块
摘要:1.锁是什么: 锁是为了控制共享的资源在被多个线程同时使用时产生冲突而产生的。 Java为了解决多线程带来的安全问题,采用了同步的方式来解决安全问题。 2.被锁住的时什么 被锁的资源只有两种:1) 类的对象 2) 或者类的Class 3.怎么锁 解决多线程的安全问题,Java提供了三种方式: 同步方
阅读全文
Java装饰者模式
摘要:1 什么是装饰者模式装饰者模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰者来包裹真实的对象。所以装饰者可以动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的方案。2 装饰者模式组成结构 抽象构件 (Component)
阅读全文
Java多线程(三)实现多线程的三种方法之Runnable接口
摘要:Java实现多线程的三种方法 继承Thread类 实现Runnable接口 实现Callable接口,这JUC并发包下的,属于比较高级的用法 这里讲的是第二种方法. 本篇内容: 演示如何通过Runnable接口实现多线程 演示多线程模拟龟兔赛跑 1. 通过实现Runnable接口 public cl
阅读全文
Java多线程(二)实现多线程的三种方法之Thread类
摘要:Java实现多线程的三种方法 继承Thread类 实现Runnable接口 实现Callable接口,这JUC并发包下的,属于比较高级的用法 一:继承Thread类的步骤: 继承Thread类 重写run方法 调用start方法启动多线程.run是普通方法,只有调用start()方法才能启动多线程。
阅读全文
Java静态代码块,普通代码块和构造函数的执行顺序
摘要:1.静态代码块和普通匿名代码快都比构造函数先运行 2.静态代码块比非静态代码块先执行。 3.静态变量、静态方法都属于类,类加载时便有了,而此时还没有对象 示例: public class Demo { public static void main(String[] args) { A a = ne
阅读全文
Java中的普通类、抽象类、接口的区别
摘要:知乎: https://zhuanlan.zhihu.com/p/94770324 接口JDK1.8 https://zhuanlan.zhihu.com/p/86191186 https://www.runoob.com/java/java-interfaces.html 其它 https://z
阅读全文
Java的多线程(一)
摘要:并发:指两个或多个事件在同一时间段内发生 并行:指两个或多个事件同时发生。 进程:内存中的运行的程序 线程:线程是进程中的一个执行单元。 关于线程与进程的具体区别: https://www.cnblogs.com/qianqiannian/p/7010909.html 线程调度的方法: 分时调度,所
阅读全文
Java的File类之打印文件以及文件夹,递归调用
摘要:代码 import java.io.*; public class FileDemo { public static void main(String[] args) { String path = "D:\\ideaSpace\\LearnJava01"; File file = new File
阅读全文
Java的输入与输出流InputStream/OutputStream
摘要:先看InputStream和FileInputStream的结构 操作输入流的步骤: 创建源 选择流 操作 释放源 代码示例: import org.testng.annotations.Test; import java.io.*; public class FileDemo { @Test pu
阅读全文
Java的File类浅析
摘要:File类,输入输出流基本上是离不开File类的。 File类里面常用的构造方法 File(String pathname) File(File parent, String child) File(String parent, String child) File(URI uri) 常用实例方法
阅读全文
Java的Collection,List,ArrayList,LinkedList
摘要:先来看看Collection,List,ArrayList,LinkedList它们之间的关系 Collection/Iterable/List都是接口。 List是有序的可重复的,这一点可以从官方文档中得出。 List是一种有序的集合 An ordered collection (also kno
阅读全文
Java方法的递归调用求100以内自然数的累加和以及斐波拉契数列
摘要:问题: 求100以内自然数的累加和。1+2+3+4+5...+98+99+10 考察:方法的递归调用 难点: 递归调用可以看作的循环,既然时循环就要有结束循环的条件,不然就是个死循环。 方法一: 用for循环来实现累加求和。难点在于,要定义一个变量"sum"来接收每次相加的和。 @Test publ
阅读全文
Java求100以内的质数的四种方法
摘要:质数: 又称素数,只能被1和它本身整除的数就是质数。 难点: 需要两层循环,外层循环99遍; 内层循环,控制除数为2到98(也就是2到被除数前面的一个数)。 为什么从2开始?因为所有数都能被1整除。 需要定义一个变量flag来记录某个数是不是质数 内层循环结束后需要重新把flag重置为true 方法
阅读全文
Java二分查找(折半查找)
摘要:难点: 查找之前必须把数组排序,从大到小或从小到大都可以,不排序没法查找。 定义三个变量,min代表数组的开始脚标;max代表数组的结束角标,mid代表数组的中间角标 如果要查找的数大于数组Array[mid],则把min的值设置为mid+1; 如果要查找的数小于数组Array[mid],则把min
阅读全文
Java冒泡排序
摘要:冒泡排序通过比较相邻两个数的大小来排列顺序。 难点: 需要两层循环 需要交换相邻两个数组元素的值 下面这段代码,只有一层循环。这个循环执行完毕时只是找出了最大的数,剩下的数并没有排序。 import org.junit.Test; import java.util.Arrays; public cl
阅读全文
Java数组的三种初始化方法
摘要:import org.junit.Test; //import org.testng.annotations.Parameters; public class Demo { @Test public void test() { //数组的静态初始化 int a[] = {2, 0, 1, 9, 20
阅读全文
Java的抽象类与抽象方法(abstract class and abstract method)
摘要:为什么需要抽像Abstract 当多个类出现相同的功能,而只是功能的主体不同时,可以向上抽象。 所谓抽象就是,只抽取功能的定义,而不抽取功能的主体 抽象Abstract,简单理解就是:看不懂。 抽样类的特点: 抽象方法一定定义在抽象类中,但抽象类中的方法不必全是抽象的,也可以有非抽象的方法。 只要类
阅读全文