java
喝泉水的泉
这个作者很懒,什么都没留下…
展开
-
死锁无处不在
不经意间就写了个问题代码,多线程还是很有意思的哈class Foo{ private int number=0; void add(){ synchronized (this){ if(number==0){ System.out.println("add 1 "+(++number)); notify(); }else{ tr原创 2021-12-04 15:50:15 · 213 阅读 · 0 评论 -
两个线程交替打印1 2
方法一:信号量法pv操作,有的课本也叫wait siginal操作,都是那根豆芽import java.util.concurrent.Semaphore;class Solution2 { public static void main(String[] args) { FooBar fooBar = new FooBar(10); new Thread(new Runnable() { @Override p原创 2021-10-25 20:35:17 · 269 阅读 · 2 评论 -
如何验证java 类加载机制的存在?
相信学java的小伙伴们,都看过文章或者听老师讲过,类初次使用的时候,会加载到内存,有一个类加载器的存在。但是如何验证呢?你说有就有?如何去验证?我提供一种方法哈,大家有别的方法也可以在评论区说一下哈。public class Student {}public class Main { public static void main(String[] args) { Student student = new Student(); }}上面代码是一个St原创 2021-10-17 23:19:00 · 231 阅读 · 0 评论 -
java IO中的装饰器模式图解
java IO中的装饰器模式图解从网上找了张图,很详细的表达了IO中的装饰器模式内容。(如果不清晰,右键 选择在新标签页打开即可)先说核心,装饰器模式是用组合代替继承,达到灵活扩展的目的。装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。这是jdk源码FilterInputStream的原创 2021-07-23 17:21:45 · 430 阅读 · 0 评论 -
DecimalFormat对数值格式化的舍入问题——RoundingMode
DecimalFormat对数值格式化的舍入问题——RoundingMode看这篇文章,写的很详细https://blog.csdn.net/alanzyy/article/details/8465098转载 2021-07-23 17:03:29 · 107 阅读 · 0 评论 -
进入jdk源码内部进行调试,详细图解
进入jdk源码内部进行调试直接上步骤1.打开idea,找到file->settings2.搜索stepping3.去掉 do not step into the classes 前面的勾4.点击OK恭喜你可以自由翱翔在jdk源码内部了。原创 2021-07-23 16:58:44 · 183 阅读 · 0 评论 -
Integer相等问题,源码分析,一看就懂
Integer相等问题先上代码说结论,-128到127之间的两个Integer用==比较是相等的。之外的不等。 Integer n1 = 1; Integer n2 = Integer.valueOf(1); System.out.println(n1.equals(n2));//true System.out.println(n1 == n2);//true Integer m1 = Integer.valueOf(1原创 2021-07-23 16:52:20 · 302 阅读 · 0 评论 -
·java内部类小结
内部类1.定义定义在另一个类中的类。2.为什么需要内部类1.内部类可以对同一个包中的其他类隐藏。2.内部类方法可以访问这个类的作用域中的数据,包括原本的私有数据。3.使用内部类访问对象状态注意点:只有内部类可以是私有的,而常规类可以有包可见性或公共可见性。内部类私有后,只有内部类的外部类的方法才能构建内部类对象。1.一个内部类方法可以访问自身的数据字段,也可以访问创建它的外围类对象的数据字段。4.内部类的特殊语法规则public class demo { private int原创 2021-01-25 15:00:20 · 74 阅读 · 0 评论 -
lambda表达式小结
1.为什么java要引入lambda表达式在java中传递一个代码段并不容易,不能直接传递。java是面向对象语言,所以必须构造一个对象,这个对象的类需要有一个方法包含所需要的代码。在其他语言中,可以直接处理代码块,支持函数式编程。java却没有这个特性,于是lambda表达式就应运而生了。2.lambda表达式语法先看一个简单的举例(String first,String second)->first.length()-second.length() 如果代码要完成的计算无法放在一个表原创 2021-01-08 16:17:43 · 90 阅读 · 0 评论 -
Comparable与Comparator接口总结
1.Comparable接口Arrays类中的sort方法可以对对象数组进行排序,但是对象所属的类必须实现Comparable接口。下面是一个例子对象数组按score排序package com.fu.demo;import java.util.Arrays;public class Test { public static void main(String[] args) { A[] a=new A[4]; a[0]=new A(1,50);原创 2021-01-08 15:33:26 · 111 阅读 · 0 评论 -
java中的对象克隆
1.Object类中的clone方法声明为protected,子类只能调用受保护的clone方法来克隆它自己的对象。必须重新定义clone为public才能允许所有方法克隆对象。2.所有的数组类型都有一个公有的clone方法,而不是受保护的。可以用这个方法建立一个新数组,包含原数组所有元素的副本。下面是测试用例package com.fu.demo;import java.util.Date;public class myclone { public static void main(原创 2021-01-07 14:50:59 · 94 阅读 · 0 评论 -
java中受保护访问
1.在java中,保护字段对所有子类以及同一包中的所有其它类都可见。现考虑一个父类A,和子类B,C,子类与父类不在同一个包中。B类中的方法只能查看B类对象自己的保护属性,而不能查看其它A类,或A类其它子类C对象的保护属性。说简单一点, 在B类里面,自己可以用保护属性,或者创建一个B类对象去用保护属性。但是不能创建一个A类对象去用保护属性。2.受保护的方法更有实际意义。如果需要限制某个方法的使用,就可以将它声明为受保护的。这表明子类得到了信任,可以正确使用这个方法,而其它类不行。这种方法的一个很好的例子原创 2021-01-07 12:51:27 · 489 阅读 · 0 评论 -
java中的数组
3.10数组数组是一种数据结构,用来存贮同一类型值得集合。在声明数组变量时,需要指出数组类型(数据元素类型紧跟[])和数组变量的名字。例如:int[] a;不过这条语句只声明了变量a,并没有将a初始化为一个真正的数组。应该使用new运算符创建数组。int[] a=new int[100];在java中不要求数组长度是常量。在创建一个数字数组时,所有元素都初始化为0。boolean数组的元素初始化为false。对象数组的元素初始化为null,这表示这些元素还未存放任何对象。3.10.1 for e原创 2020-11-29 20:30:08 · 74 阅读 · 0 评论 -
java中的大数值(超过基本数据类型范围的数)处理方法
3.9大数值如果基本整数和浮点数精度不能满足需求,那么可以使用java.math包中的BigInteger和BigDecimal两个类。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。先来一个静态方法static BigInteger valueOf(long x);BigInteger a=BigInteger.valueOf(100);将普通的数值转换为大数值。常用方法:BigInteger a原创 2020-11-29 17:07:42 · 5581 阅读 · 3 评论 -
java的输入与输出总结
输入输出1.读取输入构造一个Scanner对象,并与“标准输入流”System.in关联Scanner in=new Scanner(System.in);常用方法:Scanner(InputStream in)//构造方法String nextLine() //读取下一行内容String next() //读取下一个单词(以空格为分隔符)int nextInt()double nextDouble()boolean hasNext()补充:因为输入是可见的有,所以Scanner类不原创 2020-11-29 12:14:25 · 151 阅读 · 0 评论 -
LinkedList的listIterator()方法,详细举例
LIinkedList的listiterator方法对于初学者来说,真的很容易搞错。LinkedList调用listiterrator方法后返回的是ListIterator类型的迭代器,这个类是Iterator的子类,你会发现这个子类中是有add方法的,而超类没有。为什么呢?很简单,因为对有序的集合使用迭代器添加元素才有实际意义。但java集合类库提供了子接口ListIterator,它有add方法,然后我们就可以根据迭代器的定位来添加元素了。如果理论看不懂文字解释,也无所谓,下面的方法,包原创 2020-11-11 20:56:43 · 1672 阅读 · 0 评论 -
IDEA无法创建java类的简单解决方案
File–>ProjectStructure–>Modules 把想要创建java类的文件夹 类型改为 Sources.亲测好用!!!原创 2020-10-14 20:02:35 · 1473 阅读 · 1 评论 -
java对象锁之wait,notify(wait会释放锁,notify仅仅只是通知,不释放锁)
wait是指在一个已经进入了同步锁的线程内,让自己暂时让出同步锁,以便其他正在等待此锁的线程可以得到同步锁并运行,只有其他线程调用了notify方法(notify并不释放锁,只是告诉调用过wait方法的线程可以去参与获得锁的竞争了,但不是马上得到锁,因为锁还在别人手里,别人还没释放),调用wait方法的一个或多个线程就会解除wait状态,重新参与竞争对象锁,程序如果可以再次得到锁,就可以继续向下运行。 1)wait()、notify()和notifyAll()方法是本地方法,并且为final方法,无法.转载 2020-08-15 12:56:25 · 537 阅读 · 0 评论 -
常用命令行操作
常用命令行1.#切换盘符 例如 D:2.查看当前目录下所有文件 dir3.cd.. 返回上一级4.cls 清理屏幕5.cd 加内容 进入相应文件夹6.退出 exit7.查看电脑iP ipconfig8. 打开计算器 calc9.打开画图工具 mspaint10.打开记事本 notepad11.ping www.baidu.com文件操作md 目录名rd 目录名cd> 文件名del 文件名...原创 2020-09-17 21:22:01 · 75 阅读 · 0 评论 -
两步搞定win10无法新建txt的问题
Windows10无法新建txt文本解决方案1.第一步windows键加R 输入regedit 打开注册表编辑器第二步找到 HKEY_CLASSES_ROOT ,然后找到 .txt文件夹 点击查看右侧“默认值”是不是txtfile,如果不是就右击修改为txtfile第三步恭喜你完成了,赶紧去试一下吧...原创 2020-09-17 16:13:01 · 7552 阅读 · 6 评论 -
线程通信举例1 管程法
//生产者生产物品,消费者消费物品package Syco;public class Contactbetwen { public static void main(String[] args) { contain contain = new contain(); new consumer(contain).start(); new producer(contain).start(); }}class food{int原创 2020-09-26 11:08:51 · 617 阅读 · 0 评论 -
线程通信举例2 信号灯法
package Syco;public class Conta2 { public static void main(String[] args) { Tv tv = new Tv(); new player(tv).start(); new whatcher(tv).start(); }}class player extends Thread{Tv tv; public player(Tv tv) { .原创 2020-09-26 12:12:47 · 84 阅读 · 0 评论 -
UDP消息发送 java网络基础
UDP消息发送package udpdemo;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;public class udp { public static void main(String[] args) throws Exception { DatagramSock原创 2020-09-29 21:39:10 · 68 阅读 · 0 评论 -
throws与throw区别
转载 2020-09-30 20:08:46 · 58 阅读 · 0 评论 -
递归理解举例 搜索一个磁盘中所有指定结尾的文件
import java.io.File;//搜索一个磁盘中所有指定结尾的文件public class test02 { public static void main(String[] args) { File file=new File("E:\\Java程序"); serach(file); } private static void serach(File file) { File[] files = file.list.原创 2020-10-02 20:27:09 · 114 阅读 · 0 评论