![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
流雪扶风
明其原理,知其本质。
展开
-
论重写和里式替换原则(LSP)
对于重写的原则,很多人总是巴拉巴拉一大堆两同两小一大,记不住不说,还不明白为啥,搞得花里胡哨。其实万事万物的结果自然有其原理,JAVA作为一门编程语言,其更是有严格的语言规范和简洁性要求。那为啥重写看起来好特么花里胡哨啊,其实说到底就是一个话,重写的定义+里式替换原则。重写的定义:父子之间 同一个方法里式替换原则:子类能顶替父类的位置而不会出任何问题 反之不行由这两条我们再来看下所谓的两同两小和一大两同说的是方法名相同,参数类型相同,其实说白了就是说两个方法相同的基本定.原创 2020-09-18 12:53:22 · 219 阅读 · 0 评论 -
JVM概论
编写类 编译类 javac xxx.java 运行类 java xxx 加载类(加载、验证、准备、解析、初始化、使用和卸载7个阶段。其中验证、准备、解析三个阶段称之为连接) 双亲委派机制 Bootstrap ClassLoader(加载java lib基本类库)Extension ClassLoader(加载lib/ext非java库)Application Clas...原创 2020-09-14 14:53:14 · 117 阅读 · 0 评论 -
java final static
final:修饰类:类不能被继承 修饰方法:方法不能被重写 修饰变量:不能修改变量的指向,且只能赋值一次 全局变量是有默认值的,所以如果用final修饰全局变量,能在定义的同时赋值,或在构造函数中赋值(注意,其他方法不能给final全局变量赋值,会报错) 局部变量不会默认赋值,因此如果用final修饰,可以初始化一次 注意:final变量是不能修改指向(即地址),但不代表不能改值...原创 2019-04-18 11:28:21 · 192 阅读 · 0 评论 -
运算表示式求值算法
表达式由 运算符 ,括号 ,数字 组成E.W.Dijkstra算法将操作数压入操作数栈 将运算符压入运算符栈 忽略左括号 如果遇到右括号,则弹出一个操作符,并弹出操作符所需的操作数,并将结果继续压入操作数栈eg.(1+((2+3)*(4*5))) = 1 + 5 * 20 = 1011. 操作数栈:1 2 3 运算符栈: + +2. 遇到右括号 ...原创 2019-04-17 19:43:03 · 155 阅读 · 0 评论 -
Java 泛型
语法:Collection<E>泛型存在的最根本意义:写程序的时候很难知道类的准确数量,如果要将其储存起来,用数组很难办到,因为数组是固定长度的,或者说对数组进行扩容的代价较大(进行数组复制),所以对象的储存就需要新的东西,这个就是容器。容器长度无限,且可以储存任何数据类型(基本数据类型不行,但基本数据类型会自动装箱)容器因为要存储长度不一对象,所以将其形参设置为Ojec...原创 2019-04-17 16:26:41 · 88 阅读 · 0 评论 -
Java 自增原理
很多人都知道 i++ 和 ++i 的区别a = i++; a = i; i = i+1; a = ++ i; i = i + 1; a = i; 但碰到 i = i ++;的时候很多人就懵了? i是原来的值,还是 i+1 ?答案是 原来的值。其中的原理其实很简单,Java在执行自增一类的操作的时候是会产生一个中间缓存变量原理解释 :i++ 代码:in...原创 2019-04-17 10:44:48 · 988 阅读 · 0 评论 -
回环变位
《算法 4edit》1.2.6Q:如果字符串s中的字符循环移动任意位置之后能够得到另一字符串t,那么s就被称为t的回环变位。例如,ACTGACG 就是 TGACGAC 的一个回环变位,反之亦然。判定这个条件在基因组序列中的研究是十分重要的。编写一个算法检查两个给定的字符串s和t是否互为回环变位.A:将s2进行自我拼接,如果s1的长度等于s2的,并且拼接后的s2包含s1,则是回环变位...原创 2019-04-16 20:12:57 · 181 阅读 · 0 评论 -
Java中private、protected、public和default的区别
public:具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。protected:主要的作用就是用来保护子类的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西default:有时候也称为friendly,它是针对本包访问而设计的,任何处于本包下的类...转载 2019-04-10 08:43:56 · 115 阅读 · 0 评论 -
Java JRT
解释器运行步骤:找到环境变量CLASSPATH,CLASSPATH包含一个或者多个目录,用作查找.class文件的根目录 从根目录开始,解释器获取包名并将每个.替换成\或/(取决于操作系统) 得到的路径会与CLASSPATH的各个不同项相连接 解释器就在这些目录中查找与你所要创建类的名称相关的.class文件...原创 2019-04-09 20:52:40 · 1212 阅读 · 0 评论 -
Java 数组
申明及初始化申明方式及初始化方式数组的申明及初始化 int[] arr = new int[5]; int arr[1] = 3; int[] arr = {1,2,3,4}; /*不允许分开写,下面是错误的 int[] arr; arr={1,2,3,4}*/ int[] arr = new int[]{1,2,3,4}; //注意右边不需要指...原创 2019-04-09 17:02:42 · 138 阅读 · 0 评论 -
Java 面向对象
对象创建过程首次创建对象时或者对象的静态方法或静态属性被首次访问,Java解释器查找类路径,定位ClassName.class文件 载入ClassName.class(创建一个对象),所有静态初始化动作执行(首次使用这些动作或属性时),并且所有静态初始化动态只在此时执行一次 当new ClassName()创建对象时,首先在堆为className对象分配足够的内存空间 相对应的内存空间...原创 2019-04-09 16:32:55 · 117 阅读 · 0 评论 -
java 的类型转换方式
隐式转换byte等整型转int,最高位(符号位保留),中间补0byte bt=-13;bt 源码:1000 1101 反码:1111 0010 补码:1111 0011int it=bt;it 源码:1000 0000 0000 1101 反码:1111 1111 1111 0010 补码:1111 1111 1111 0011...原创 2019-04-03 16:10:45 · 528 阅读 · 0 评论 -
java运行时内存分配详解
一、基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个或者多个线程,每一个Java进程对应唯一一个JVM实例,每一个JVM实例唯一对应一个堆,每一个线程有一个自己私有的栈。进程所创建的所有类的实例(也就是对象)或数组(指的是数组的本身,不是引用)都放在堆中,并由该进程所有的线程共享。Java中分配堆内存是自动初始化的,即为一个对象分配内存的时候,会...转载 2019-04-12 16:44:18 · 494 阅读 · 0 评论 -
运行时间判定
次方级典型:for循环 for(int i = 0 ; i < N ;i++ ) 语句循环次数嵌套for循环, for(int i =0 ;i < N; i++) for(int j = i + 1 ; i <N ;j++) 循环次数 ...原创 2019-04-24 10:55:41 · 187 阅读 · 0 评论 -
数组复制速度 System.arraycopy()&clone() &Arrays.copyof() &for()探究
先申明复制速度结果System.arraycopy() clone() Arrays.copyof() for()背后原理探究首先要申明的是这4种方法中的前3种是没有本质区别的,对象都是浅复制(复制地址),而普通类型都是深复制(复制值),简单来说浅复制:复制地址,相当于复制了房子(内存数据)的钥匙,一改全改深复制:复制值,通俗意义上的拷贝,相当于建了一个一模一样的房子(内存...原创 2019-07-24 22:56:56 · 1625 阅读 · 4 评论 -
return本质探究以及try-finaly下的return探究
return本质探究 其实reutrn语句本质上我们可以把它分为两步 1.return语句获取到变量的地址 2.return将获取的地址返回,也就是return本质是传地址这里可以看下面的结果try字符串的hashcode:115131StringBuilder里的try的hashCode:1361960727catch里面return语句返...原创 2019-07-24 15:28:57 · 300 阅读 · 0 评论 -
AnnotationConfigApplicationContext ad has not been refreshed yet 错误
在使用spring框架使用IOC获取bean时有时可能会碰到这个错误AnnotationConfigApplicationContext ad has not been refreshed yet看起来似乎是annotationConfigApplicationContext未刷新的问题,但事实并不是,在添加annotationConfigApplicationContext.refre...原创 2019-07-06 11:14:32 · 32049 阅读 · 2 评论 -
Spring DI注入规则
1.Spring怎么知道注入哪个实现?As long as there is only a single implementation of the interface and that implementation is annotated with @Component with Spring’s component scan enabled, Sspring framework can...翻译 2019-07-12 21:39:38 · 169 阅读 · 0 评论 -
Spring MVC中的基本流程
以上是一个日志模块的基本流程图,从业务来讲流程会更简单一点,而且对其中的DI注入并不多讲,DI注入时间不一,不好添加箭头,而且再添加箭头的话图片会较为混乱,所以并未添加。浏览器发起请求,请求网站日志页面 Controller返回日志页面 浏览器加载日志网页,触发JS,开始请求日志数据(先加载网页,后加载数据,因为数据的加载需要访问服务器,较为耗时,所以分批次加载有利于用户观感和网...原创 2019-07-12 21:32:53 · 158 阅读 · 0 评论 -
Java入门学习思维导图
基本不涉及具体代码,更多是作为引导,引导方向Xmind地址:https://download.csdn.net/download/qq_34834846/11271498pdf版地址:原创 2019-07-03 15:06:02 · 276 阅读 · 0 评论 -
三大性质总结:原子性,有序性,可见性
转载自:https://www.jianshu.com/p/cf57726e77f21. 三大性质简介在并发编程中分析线程安全的问题时往往需要切入点,那就是两大核心:JMM抽象内存模型以及happens-before规则(在这篇文章中已经经过了),三条性质:原子性,有序性和可见性。关于synchronized和volatile已经讨论过了,就想着将并发编程中这两大神器在 ...转载 2019-07-03 14:21:21 · 342 阅读 · 0 评论 -
Java 树的构造算法
连通的定义:从A定点出发能到达B定点,则称A-B连通连通的基本性质:自反性:A一定连通A(ps:自己可以和自己PY交易) 对称性:如果A和B连通,则B和A也连通(无向的情况下) 传递性:如果A连通B,B连通C,则A连通C 树:大小(size):树的节点数量 深度(depth):某个节点到根节点的链接路径的数量 高度(height):树所有节点中深度最大的值森林的构造(目标...原创 2019-05-11 17:08:58 · 703 阅读 · 0 评论 -
Java 数据类型内存分析
基本数据类型:由上向下,可以自动转型,注意:整形可以转换成浮点型,但会有精度损失,浮点型内部是科学计数法储存的byte (1 byte = 8 bit ) short ( 2 byte ) char ( 2 byte ) int ( 4 byte ) long ( 8 byte ) float ( 4 byte ) double (8 byte)引用数据类型: 注意...原创 2019-05-07 17:41:57 · 247 阅读 · 0 评论 -
Java 环形缓冲器(Ring Buffer)
环形缓冲器(Ring Buffer):环形队列,这里使用数组实现,但并未用上环形功能,因为设置了队满直接出队清空队列,如果只读取部分数据,又或者想要覆盖冲写,则可以用上环形功能package chapter1_3;/** * @author : jeasion * @name * @comment * @return */public class practice39 {...原创 2019-05-06 20:44:22 · 2264 阅读 · 0 评论 -
Java 约瑟夫环(循环链表解决)
问题描述:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。解题思路:因为是围成一圈,所以用循环链表是最符合相关思维的(不是最优解),对于第M个人进行出队,然后前后节点连接起来继续形成闭环(新约瑟夫环)代码(Java版)import java.util.Scanner;/** *...原创 2019-05-06 19:42:40 · 2224 阅读 · 0 评论 -
前序表达式 中序表达式 后序表达式
中序表达式:中序表达式就是我们日常使用的表达式,由左往右阅读,结构清晰,但需要括号改变优先级,对计算机不友好eg: (1+4)*3+10/5前序表达式(波兰表示法Polish notation,或波兰记法):一种逻辑、算术和代数表示方法,其特点是操作符置于操作数的前面,如果操作符的元数(arity)是固定的,则语法上不需要括号仍然能被无歧义地解析,不需要括号来改变优先级,未推广使用...原创 2019-04-19 19:29:50 · 7885 阅读 · 1 评论 -
【JAVA】关于向上转型与向下转型
向上转型: 子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口 如果子类重写了父类的方法,就根据这个引用指向调用子类重写的这个方法,不是调用父类的,,这个调用过程就称为“动态绑定”。 ”动态绑定“的意义:如果父类是接口意味则父类是没办法实现方法的,必须要子类去实现,这时如果发生了向上转型,如果不实行动态...转载 2019-04-02 21:58:45 · 191 阅读 · 0 评论 -
浮点型的三个特殊值 Double.NEGATIVE_INFINITY Double.POSITIVE_INFINITY Double.NaN
Double.NEGATIVE_INFINITY 负无穷 Double.POSITIVE_INFINITY 正无穷 Double.NaN 非数注意:浮点数才有无穷的概念,整数是没有的比如:int a = 1/0;//直接报错抛出运算异常:Exception in thread "main" java.lang.ArithmeticException: / by zerof...转载 2019-04-11 21:29:56 · 1842 阅读 · 0 评论 -
尚学堂java 参考答案 第八章
一.选择题1.BD解析:B:Integer是对象,所以默认的应该是null对象.D使用的是自动装箱2.A解析:String类的对象是final型,是不能修改的,concat()方法是生成一个新的字符串,不是修改原字符串3.B解析:https://blog.csdn.net/qq_34834846/article/details/814311034.C5.A解析:...原创 2018-08-13 15:16:55 · 1905 阅读 · 0 评论 -
java string字符拼接符"+"的研究
程序: public class Test { public static void main(String args[]) { String s1 = "abc"; String s2 = "abc"; String s3 = "abc" + "def"; String s4 = "abcdef"; ...原创 2018-08-13 11:16:54 · 1060 阅读 · 0 评论 -
尚学堂java答案解析 第一章
本答案为本人个人编辑,仅供参考,鉴于时间久远,我现在没有题目了,所以不在回复各位了,抱歉!一.选择题:1.C解析:java为了安全,中并没有引入C语言的指针概念.2.AD解析:B:Java先通过javac编译,再通过java解释器进行解释运行.C:java具有跨平台特性,字节码是相同的.3.D解析:编译命令是javac.且编译需要加.java文件后缀,解释时才不需要,且...原创 2018-08-03 11:56:38 · 9040 阅读 · 4 评论 -
尚学堂java 参考答案 第七章
本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改一.选择题1.ACD解析:B:java中左边不能直接直接指定长度,和C语言不一样2.B3.C解析:B各行分开皆对,但放在一起会产生重复定义错误.D的第一个按定义来说应该是错的,但编译器并不报错,经过试验也可使用4.B解析:binarySearch(Object[], Object ke...原创 2018-08-11 13:31:56 · 3978 阅读 · 0 评论 -
尚学堂java 答案解析 第六章
本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改一.选择题1.C解析:对void下的函数,可以使用"return;"表示结束之意,但不能"return i",因为数据是void,try-catch-finally:正确执行:try->finaly,除非try里含有System.exit(0)强制退出.错误执行:try(错误时跳)->ca...原创 2018-08-10 09:58:15 · 1705 阅读 · 0 评论 -
尚学堂java 答案解析 第五章
本答案为本人个人编辑,仅供参考,鉴于时间久远,我现在没有题目了,所以不在回复各位了,抱歉!一.选择题1.AB解析:A可以被所有类访问,B可以被当前包的所有类访问,也可以被所有子类访问2.A解析:所有子类会先用super()方法调用父类构造方法,再调用自己的构造方法3.D解析:上转型对象无法使用对象的新增方法,只能使用继承或重写的方法4.ABD解析:A.abstr...原创 2018-08-05 19:35:47 · 4608 阅读 · 8 评论 -
Java中的equals和==的差别 以及Java中等价性和同一性的讨论
==对基本数据类型比较的是值,对引用类型比较的是地址equals()比较的是对象的数据的引用等价性原理:自反性 x.equals(x)为true 对称性 x.equals(y) 为true时,y.equals(x) 也为true 传递性 若x.equals(y) 为true , y.equals(z) 为true, 则x.equals(z) 为true 一致性...原创 2018-08-05 14:45:54 · 640 阅读 · 0 评论 -
抽象类的有参与无参构造函数的研究
即使我们声明一个没有构造函数的抽象类,编译器还会为我们生成一个默认的保护级别的构造函数。子类实例化时(不管是否为带参构造)只会调用所有父类的无参构造函数,而带参构造必须通过显式去调用.调用顺序是先调用抽象类的无参构造函数,如果子类实例化时是使用带餐的构造函数,则再接着调用抽象类的带参构造函数,最后调用子类本身的构造函数。abstract class Person { //定义一个抽象类,...原创 2018-08-04 18:03:45 · 2609 阅读 · 0 评论 -
尚学堂java 答案解析 第四章
本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改一.选择题1.BD解析:B:类必须有构造方法,若程序未写,这系统自动调用系统构造方法. D:super()会调用父类的构造方法,但父类的构造方法不一定无参2.D解析:3+4=73.AC解析:A:静态方法在类被加载进内存时就分配入口地址,此时不一定有非静态方法 ...原创 2018-08-04 15:09:31 · 2640 阅读 · 3 评论 -
尚学堂java答案解析 第三章
本答案为本人个人编辑,仅供参考,如果读者发现,请私信本人或在下方评论,提醒本人修改一.选择题1.A2.BD解析:switch的的判断表达式的数据类型:byte short int char,注意case里的数据是int型,所以String并不行3.A解析:0+3+5=84.BD解析:函数重载时对返回数据类型不做检查,但形参数量或类型必须变化,B和原函数是同一...原创 2018-08-03 19:44:00 · 5534 阅读 · 16 评论 -
尚学堂java答案解析 第二章
本答案为本人个人编辑,仅供参考,鉴于时间久远,我现在没有题目了,所以不在回复各位了,抱歉!一.选择题:1.CD解析:A public是关键字. B 第一个不能是数字2.C解析:j=i++ <=> j=i; i++3.A解析:float数据需要在尾部加f,且f不能省略4.AB解析:C 字符串必须是双引号 D数据类型错误5.AB解析:A的赋值运...原创 2018-08-03 16:19:00 · 4408 阅读 · 9 评论 -
firstchild.data与childNodes[0].nodeValue意思
x.firstchild.data:获取元素第一个子节点的数据;x.childNodes[0]::获取元素第一个子节点;x.childNodes[0].nodeValue.:也是获取元素第一个子节点值的意思另外在 DOM 处理中一个普遍的错误是,认为元素节点包含文本。在这里澄清一下文本总是存储在文本节点中不过,元素节点的文本是存储在文本节点中的。在这个例子中:<year>2005<...转载 2018-02-14 17:04:55 · 2649 阅读 · 0 评论