
Java
文章平均质量分 79
程序员就得有个程序员学习的ya子,博客我来la
Cccccrj
这个作者很懒,什么都没留下…
展开
-
Java并发编程 死锁的排查
死锁代码两个线程获取锁的顺序不同就会互相等待,形成死锁public class DeadLock { public static void main(String[] args) { String lock1 = "lock1",lock2 = "lock2"; new Thread(new DeadLockDemo(lock1,lock2),"A").start(); new Thread(new DeadLockDemo(lock2,lock1原创 2020-09-25 20:15:07 · 284 阅读 · 0 评论 -
Java JUC并发编程 (线程状态 / ReentrantLock / CopyOnWriteArrayList / ConcurrentHashMap / 常用集合类)
文章目录java.util.concurrent线程六种状态java.util.concurrent.locksReentrantLockLocks 和 Synchronized区别集合类不安全List集合VectorCollections.synchronizedListCopyOnWriteArrayList性能比较HashMapHashTableCollections.SynchronizedMapConcurrentHashMap常用集合类CountDownLatchCyclicBarrierSem原创 2020-09-24 16:13:43 · 672 阅读 · 0 评论 -
Java 注解(Annotation)
定义: Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 语言中的类、方法、变量、参数和包等都可以被标注。说明程序的@+注解名称作用:通过代码中的注解生成文档通过注解对代码进行分析【使用反射】通过注解让编译器进行基本的代码检查JDK中预定义注解:@Override:检测该注解标注的方法是否是继承自父类的(接口)@Dprecated:该注解标注的内容,表示已过时@SuppressWarnings:压制警告//IDE侧面原创 2020-05-21 14:50:02 · 207 阅读 · 1 评论 -
Java HashMap1.7头插法扩容时出现循环链表 1.8换成尾插法
HashMap扩容流程单线程下扩容多线程下扩容当前顺序: 用Key值表示键值对,顺序为5->9->11->null插入节点流程next=node.next;//存储下一个需要加入的节点node.next=table[1];//当前头节点变为nexttable[1]=node;//node成为新头节点node=next;//继续下一个节点线程1:首先将5插入正确位置线程1要插入下一个节点next是9table[1]位置头节点是5线程2:直接完成reha原创 2020-05-20 20:26:43 · 2427 阅读 · 1 评论 -
Java String、StringBuilder、StringBuffer区别,源码分析
三者区别:String是不可变字符序列,StringBuffer类和StringBuilder类是可变自字符序列StringBuilder类是线程不安全的,而StringBuffer类是线程安全的StringBuilder类运行速度比StringBuffer类快,在不要求线程同步时建议优先使用StringBuilderString源码分析//用于存储String的char数组private final char values[];存储字符数组是final类型,所以String是不可变字符原创 2020-05-19 22:41:06 · 89 阅读 · 0 评论 -
Java内存分析 构造器this理解
内存分析内存详解线程拥有自己的栈,不同线程的栈之间不互通。创建的对象存储在公用的堆中。构造过程JVM在堆中分配空间并赋默认值执行显式初始化,进行赋值执行构造方法,返回对象给相关变量,变量中存储的指向堆中对象的地址值this关键字理解this作为隐含参数传入构造方法中,this指向当前对象重载构造器时,使用this(参数),必须位于第一行静态方法中不可以使用this,this指向特定的对象,static方法从属于当前类,不属于对象...原创 2020-05-19 17:20:59 · 132 阅读 · 0 评论 -
Java反射(Reflect) 框架设计的灵魂
反射:框架的设计灵魂框架:半成品软件,可以在框架上开发软件,简化代码反射机制将类的个个组成部分封装为其他对象,这就是反射机制源代码对象中有变量,构造方法,成员方法等内容。在第二部分,把不同的部分封装成对象。第三部分才是声明对象。反射好处:在程序的执行中操作,第二部分这些对象可以解耦,提高程序的扩展性获取字节码对象的方式class对象功能Field:成员变量ge...原创 2020-01-31 20:43:49 · 160 阅读 · 0 评论 -
Java Junit单元测试
黑盒测试:不需要写代码,只需要判断输入输出值白盒测试:需要写代码,关注程序执行流程Junit使用:白盒测试直接运行test方法进行测试public class CalculatorTest { /* * 测试add方法 * */ @Test public void testAdd(){ Calculator c = new Calc...原创 2020-01-31 16:18:50 · 189 阅读 · 0 评论 -
方法引用
用途用方法引用改进Lambda方法,::为引用运算符,所在表达式被称为方法引用。如果lambda要表达的函数方法已经存在于某个方法的实现中,那么可用双冒号来引用该方法作为Lambda的代替。integerStream.forEach(num-> System.out.println(num));integerStream.forEach(System.out::println);可...原创 2020-01-31 15:32:42 · 92 阅读 · 0 评论 -
Java 1.8 新特性 Stream流(map / filter / foreach / limit 方法)
Stream流Lambda函数式编程,解决集合类带来的弊端例如:lambda让我们关注做什么而不是怎么做,for循环语法是怎么做,for循环内容是做什么for循环筛选遍历集合:Stream流:public static void main(String[] args) { //创建一个List,存储姓名 List<String> list ...原创 2020-01-30 21:35:47 · 1175 阅读 · 0 评论 -
Array、Arrays、collection、collections
Array数组int[] String[] char[] boolean[]等Arrays用来操作array数组的包,方法都是静态的通过Arrays.方法名来调用List asList();将数组当作list返回boolean equals(array[] a1,array[] a2);比较两个数组是否相同void fill(int[] a, int num);将指定元素填充到数组v...原创 2019-12-10 13:56:58 · 92 阅读 · 0 评论 -
Java jdk8后更新 函数式编程
Lambda延迟执行lambda延迟执行,减少代码不使用的浪费lambda优化日志日志等级如果是2,先拼接字符串在调用方法,并不会输出,对资源造成浪费lambda优化后代码:/** 使用lambda优化日志案例* lambda延迟加载* lambda必须存在函数式接口* */public class Lambda { public static void showLo...原创 2019-11-13 10:58:43 · 152 阅读 · 0 评论 -
Java 函数式接口(Function / Predicate / Supplier / Consumer)
定义接口中只有一个抽象方法,称为函数式接口可以包含其他类型方法判断方法:在接口前加 @FunctionalInterface如果不是函数式接口会报错@FunctionalInterfacepublic interface MyFunctionalInterface { public abstract void method(); //public abstract vo...原创 2019-11-07 16:52:00 · 177 阅读 · 0 评论 -
Java 网络编程
CS结构client/serverBS结构browser/server协议java.netUDP无连接,高效率,消耗小,出现包丢失TCP面向连接,无差数据传输三次握手:客户端向服务器发送链接请求服务器回复响应客户端回复服务器建立链接TCP通信客户端通过两个IO流对象接收数据服务器不需要自己创建IO流,使用客户端Socket中提供的输入输出流进行读写数据服务器通...原创 2019-11-06 16:58:27 · 100 阅读 · 0 评论 -
Java File类
java.io.File类把文件和文件夹封装成File类,对文件和文件加进行操作File是系统无关类,与操作系统无关File 静态变量File.pathSeparator;//路径分隔符 win:分号 linux:冒号File.separator;//文件分割符 win:反斜杠\ linux:正斜杠/File.pathSeparatorChar;File.separatorChar;...原创 2019-10-31 19:44:14 · 123 阅读 · 0 评论 -
Java 编程式思想 lambda 用法&简化
lambda例子public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { System.out.println("线程名: "+Thread.currentThr...原创 2019-10-31 15:22:14 · 89 阅读 · 0 评论 -
Java线程同步
主线程执行main方法的线程单线程程序:java程序中只有一个线程,从main方法开始从上到下一次执行。程序中出现异常,导致之后的程序不能执行,通过多线程解决问题。Thread:创建Thread的子类重写Thread中的run方法,设置线程任务创建Thread子类调用start()方法启动线程中的开启新的线程。void start()使线程开始执行,Java虚拟机调用该线程的r...原创 2019-10-29 22:00:46 · 91 阅读 · 0 评论 -
Java 异常
Throwable:1.Exception:编译异常出现异常没有try-catch把异常跑出给JVM方法在控制台显示,中断当前程序执行处理方式:option+Enterthrows Exception:异常抛给虚拟机,程序执行过程中,抛出异常中断程序。try{程序}catch{异常}:程序抛出异常不影响执行,会执行完全部程序。子类:RuntimeException:运行期异常,J...原创 2019-10-28 21:52:29 · 85 阅读 · 0 评论 -
Java Map使用及常用方法
java.util.Map<k,v>特点:Map集合是一个双列集合,一个元素包含两个值 key和valueMap集合中的元素key value可相同可不同key不允许重复key和value一一对应java.util.HashMap<k,v> implements Map<k,v>接口底层哈希表查询速度快hashMap无序存入取出顺序不一致...原创 2019-10-22 18:23:08 · 123 阅读 · 0 评论 -
Java 泛型(类、方法、接口)以及泛型通配符
泛型:是一种未知数据类型,当不知道使用什么数据类型,可以使用泛型。也可以看作一种变量E e: Element元素 T t: Type类型ArrayList 函数:不知道接收什么数据,使用element接收。创建集合对象时,才会确定泛型的数据类型ArrayList list = new ArrayList();//不写<>集合类型,默认为object不使用泛型...原创 2019-10-19 22:50:07 · 117 阅读 · 0 评论 -
Java 变量和修饰符
变量局部变量局部变量声明在方法、构造方法或者语句块中;实例变量声明在类里面,方法外在对象创建的时候创建,至少应该被一个方法使用import java.io.*;public class Employee{ // 这个实例变量对子类可见 public String name; // 私有变量,仅在该类可见 private double salary; //...原创 2019-10-19 22:19:31 · 200 阅读 · 0 评论 -
Java单列集合Collection
集合就是存储数据的容器单列集合 java.util.Collection和双列集合java.util.Map和数组的区别数组存储相同类型基本数据。集合存储对象,可以存储类型不同的对象。Collection橙色内容为接口类型,蓝色框是具体的实现类]List接口:有序的集合允许有重复元素有索引可以for遍历Set接口:不允许有重复元素每有索引不能用普通for遍历Tr...原创 2019-10-19 21:22:34 · 191 阅读 · 0 评论 -
Java interface接口
接口方法抽象方法:public abstract 返回类型 接口名(参数);抽象方法不能有方法体,使用接口的类进行重写。默认方法public default 返回类型 方法名(参数){方法体}默认方法可以有方法体,解决接口升级问题当其他类使用接口后,在接口中增加新的默认方法,不用让所有类对方法进行重写。静态方法public static 返回类型 方法名(参数){...原创 2019-10-17 15:58:23 · 96 阅读 · 0 评论 -
Java equal ==
1. 基本类型只能用==对数值进行比较2.对象类可以用equal方法和==进行比较两者实际上都是对地址进行比较String,Date,Integer等类重写了equal方法会对实际值进行比较String s1 = "abc";String s2 = "abc";String s3 = new String("abc");s1 == s2//trues1 == s...原创 2019-10-16 16:41:54 · 307 阅读 · 0 评论 -
Java IO流(字节流、字符流、缓冲流、转换流、序列化、打印流)
读取控制台输入BufferedReader br = new BufferedReader(new InputStreamReader(System.in));c = (char) br.read();//通过read()函数从控制台读取字符输入,通过循环读取多字符从控制台读取字符串str = br.readLine();//读取一行输入文件读写FileInputSt...原创 2019-10-15 18:41:13 · 647 阅读 · 0 评论 -
Java中的内存和参数传递
内存5各部分stack存放的是方法中的局部变量,方法的运行一定在栈中运行方法的参数或者 {}内部的变量超出作用域立刻从栈内存中消失int [] array = new int[3];int[] array 是局部变量存在Stack中new int[3] 是对象存在Heap中heapnew出的 对象 存放在heap当中堆内存中都有一个地址值数据有默认值整数 0浮点数 0....原创 2019-10-15 10:47:04 · 165 阅读 · 0 评论