![](https://img-blog.csdnimg.cn/20200106202112501.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
java
文章平均质量分 69
学习java
逍遥云中君
社畜党
展开
-
JSON Web Token(JWT)对比Opaque Token
JWT Opaque翻译 2022-05-12 20:45:19 · 2269 阅读 · 0 评论 -
JDK动态代理底层源码剖析
1. 动态代理相关概念目标类:程序员自己写的、普通的业务类,是需要被代理的类;目标方法:目标类中的实现业务的具体方法,为了精简,只写核心业务代码,因此需要代理类来增强功能;增强器:是给目标方法增强功能的类,需要继承InvocationHandler接口,实现invoke(Object proxy, Method method, Object[] args)方法;代理类:由JDK相关类在程序执行过程中、为了给目标类的相关目标方法增强功能而生成的、存在于内存中的类;动态代理:在程序执行过程中,由JD原创 2021-09-01 16:49:26 · 296 阅读 · 1 评论 -
简单例子解释dao service domain结构设计
1. 业务需求人的信息person(name,age,gender)把(“jack”, 25, ‘男’)这条信息插入数据库2. 不用架构怎么做?一个User类、一个连接类即可,App此处代表操作数据的视图,看起来是不是很简洁问题是,如果我要换个数据库连接,那么源代码就得改变,各个类之间的耦合性非常高,牵一发而动全身,代码的扩展性、健壮性不好;3. 使用架构、框架maven + spring-context + mvc架构有什么业务需求,直接使用对应的service对象去解决,原创 2021-08-16 17:19:35 · 456 阅读 · 0 评论 -
java 线程控制的小程序
1. 要求线程Count负责报数字线程Master负责监听键盘输入,一旦输入的是大写字母S,线程Count就退出报数字,线程Master也退出2. 代码以下代码都没有包含包信息,复制代码请注意随机应变MyPanel : 绘画板,是监听按键的载体import javax.swing.*;import java.awt.*;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;public class My原创 2021-07-05 10:52:55 · 93 阅读 · 0 评论 -
HashMap如何做到通过EntrySet来查询?EntrySet什么时候放入数据了?
1. 继承关系Map是图,HashMap是其实现子类Collection是集合,Set是其实现接口,也是一种集合,AbstractSet是Set接口的抽象实现类EntrySet作为HashMap的内部类,由作为AbstractSet的直接实现类,架通了一条集合与图之间的桥梁;2. 数据到底存在哪里?当我们创建HashMap实例,并往里面put元素的时候,数据的存储如下:HashMap类确实维护了一个字段table,从图中看出其类型是HashMap$Node[ ] trans原创 2021-06-29 02:52:35 · 934 阅读 · 9 评论 -
java集合Collection与其迭代器Iterator的关系解剖
所有集合的顶级父接口就是CollectionCollection的父接口是Iterable,意思是所有的集合都是可迭代的一张UML图看Collection、Iterable、Iterator的关系:这三个都是接口Iterator是迭代器,它通过4个方法确定自己的地位,表明了一个迭代器必不可少的方法。Iteable是可迭代接口,它表明一种“可迭代的”特性,它是通过内置一个抽象方法Iterator<T> iterator();来确定它的特性的,该抽象方法的返回类型..原创 2021-06-22 05:19:52 · 766 阅读 · 0 评论 -
String创建对象两种方式的深入理解
引入:我们都知道,创建字符串对象的两种方式:String name1 = "jack";String name2 = new String("jack");1. String name1 = “jack”;的解读"jack"是字符串常量,也叫字符串字面量,位于字符串常量池中name1是一个栈变量,指向这个常量池中的String对象若常量池中已存在该字面量,则返回常量池中的该字面量地址给name1若池中没有该字面量,则在池中创建该字面量,再把地址返回给name1jdk1.7及以后,常量池从方原创 2021-06-16 04:31:58 · 397 阅读 · 1 评论 -
java方法重写、属性不重写的本质
引子:类的方法重写、属性不重写,只是类加载机制的外在表现形式。1. 混淆/** * OverrideIntro.java分支: * 3.重写易混淆的点 */public class OverrideConfuse{ public static void main(String[] args){ Rose rose = new Rose(); System.out.println(rose.name); rose.statement(); }}//花类class Flow原创 2021-05-06 16:53:36 · 754 阅读 · 0 评论 -
java this的深入理解
1.引入构造器的参数与属性命名的冲突:public class Test{ String name; int age; public Test(String name, int age){ name = name; age = age; }}假如像上述代码一样来定义构造器,是不会报错的,局部变量允许与属性同名,但是判定规则是就近原则,构造方法中的name都与构造器的参数列表中的变量更近,因此,这个构造器就是自己给自己赋值,完全没有访问到属性。因此,我们引入this关键字原创 2021-04-20 22:37:18 · 255 阅读 · 1 评论 -
java默认构造器存在的依据
1.我们新建两个类其中Dog类没有构造器,Cat类有一个构造器.class Dog{ String name;}class Cat{ String name; public Cat(String name){ this.name = name; }}2.我们对编译生成的.class文件进行反编译javap使用文档我们可以看到,Dog类没有显性定义任何构造器,但是编译的时候仍然有一个默认的Dog()而Cat类由于显性定义了一个含参构造器,因此原本的默认构造器便被原创 2021-04-19 21:26:04 · 264 阅读 · 0 评论 -
java静态方法VS非静态方法
1.背景案例 代码及结果展示在一个文件夹下有两个类:狗类、人类/** * 狗类. * 用于静态方法的展示 */public class Dog{ public static void main(String[] args) { bark(); new Dog().bark();//两者均可 cry(); new Dog().cry();//两者均可 new Dog().sleep();//只能先实例化,再调用 new Dog().eat();//只能先实原创 2021-04-14 18:34:53 · 96 阅读 · 0 评论 -
dos窗口下java自定义跨文件类引用的解决办法
我在使用dos来编译java源文件的时候,如果被编译的,java文件引用了其他文件夹的类,我使用import引入类,总是不成功。在编译时,总会提示引入的包名不合法,我也把根目录写入了classpath可是无济于事,我不知道哪里出现了问题,我想要单独可以编译执行引用了其他文件夹内的类的.java文件。不过也有办法可以成功,但是不是直接编译运行该源文件,必须显示地将该源文件引用的类加载进classpath中,像这样:...原创 2021-04-10 16:26:37 · 318 阅读 · 0 评论 -
java其实只有栈变量的值传递(深度理解参数传递)
1.JVM内存区域的简单划分我之所以把方法区画地这么小,是因为优化后的JDK已经逐渐减少了对方法区的使用,现在字符串常量池都是放在堆内的,详情请参见博文:Java 字符串常量池到底是在PermGen方法区、是在heap堆里面、还是在Metaspace 元空间里面呢?2.基本数据类型与引用数据类型int num = 10;double dec = 1.23;上述基本类型在内存中是这样的:int[][] twoDim = new int[][]{{6, 6, 6},原创 2021-04-05 12:10:34 · 168 阅读 · 1 评论 -
冒泡排序与快速排序速度的直观对比
1.常见排序方法的时间、空间复杂度2.代码展示冒泡排序核心代码在 31 - 45行快速排序函数在 65行注释掉其中一个运行另一个,比较两者之间的时间差别,当数据量AMOUNT越大时,差别越明显。/** * 排序,此处只讲解简单的冒泡排序和快速排序 */public class Sort{ public static void main(String[] args) { /** * 冒泡排序: * 要进行n次循环,每次找到一个元素的正确位置 * 每次循环原创 2021-04-01 15:50:20 · 815 阅读 · 1 评论 -
笔记本性能测试,直观感受
1. 概念阐述:自幂数: 一个正整数N,它有X位,N的十进制表示为X110X2X3……Xx,如果有:N = X1x + X2x + X3x + …… + Xxx成立,则称N为X位自幂数。2.特殊称呼1~10位自幂数有独特的名称:一位自幂数:独身数两位自幂数:没有三位自幂数:水仙花数四位自幂数:四叶玫瑰数五位自幂数:五角星数六位自幂数:六合数七位自幂数:北斗七星数八位自幂数:八仙数九位自幂数:九九重阳数十位自幂数:十全十美数3.题目要求java语言输出1-10位的原创 2021-03-28 20:25:37 · 177 阅读 · 0 评论 -
java字符串比较的两个思维方向
写在前面:整个过程,思考及举例,都在代码中完成,复制代码去执行,更能帮助你理解代码:/** * String相等的判断方式 */import java.util.Scanner;public class StringEqual{ public static void main(String[] args) { /** * 先引入一个案例: * 事先定义一个学科美术,让输入者猜测定义的是什么学科, * 如果猜对就输出"good";猜错输出"bad" */原创 2021-03-25 13:31:47 · 98 阅读 · 0 评论 -
java中运算符的优先级和结合性问题
引言:我们小时候学习加减乘除的时候:先算乘除,后算加减从左往右依次计算这个先算乘除,后算加减,就是一个优先级问题;从左往右依次计算,就是结合性问题,在同等优先级下,是从左往右运算的,就是说,加减乘除都是左结合的运算。总的来说:优先级和结合性都是为了解决计算中的次序问题。1.优先级表优先级从上往下依次降低:2. 结合性问题右结合:赋值运算符、三目运算符、单目运算符左结合:其他所有的都是左结合左结合非常好理解,因为我们一直采用的运算都是自左往右运算,这三个右结合的是新鲜玩意儿,赋值原创 2021-03-17 18:11:01 · 1505 阅读 · 7 评论 -
对原码、反码、补码普遍存在的误解
首先,对于这三个码,你是否是这样理解的?原码是一个有符号数在计算机内的二进制表示,最高位是符号位,最高位是1表示负数,最高位是0表示非负数正数的反码是正数本身,负数的反码是其原码基础上,符号位不变,其他位取反补码=反码+1如果你是这样理解的,那么读下去,这篇文章将对你大有好处以上的理解不能说错误,但它只能算是速记口诀,它掩盖了补码真正的内涵,使得我们的理解浮于表面,对进一步学习产生极大困扰。咱们言归正传,如何正确理解原码、补码、反码?【以下全部以8位二进制来举例,涉及到的全都是有符号数】原创 2021-02-20 16:12:54 · 594 阅读 · 0 评论 -
java注释-javadoc规范
写在前面:javadoc内嵌于JDK中,那么遵循javadoc规范自然就是java注释的正统,有javadoc帮忙生成API文档,简直不要太幸福。此文章在逐步完善中,我对于此规范也在学习中,希望能够掌握,也希望文章对你有所帮助。1.什么是注释注释是为了使代码更具有可读性,降低团队合作的交流成本。在一个团队中,你的代码更清晰、更易读,更规范,那么升职加薪肯定是你的,因为你可以兼容更多的人。前段时间听到一个说法:你的代码写的只有你一个人看得懂,那你就是那个不可或缺的人。说这话的人就是脑残,写的代码只有自己原创 2021-01-22 16:20:54 · 505 阅读 · 2 评论 -
JDK的安装说明,减少你对未知的恐惧,满满干货!
1.什么是JDK2.安装什么JDK3.下载并安装JDK84.执行java程序什么是classpath?5.配置环境变量原创 2021-01-18 21:43:50 · 419 阅读 · 0 评论