
Java学习
Zlase
这个作者很懒,什么都没留下…
展开
-
Java类的排序
目录Java中类型的排序重写Collection比较器(常用)定义的类中实现Comparable接口数组的排序实例应用:LeetCode406Java中类型的排序Java中类型的排序,通常使用的是实现Comparator的方式,通过重写compare方法实现该功能。主要有两种方式实现:重写Collection比较器(常用)在Collection.sort(Collections, Comparator)中重写Comparator,这种方式也是最常用的方...原创 2020-12-08 10:25:06 · 1308 阅读 · 0 评论 -
Java的Log架构(Log4j2 + Slf4j)
目录常见的日志门面常见的日志实现日志框架介绍JULLog4jLogBackLog4j2SLF4J的使用简介slf4j-api 和 slf4j-simple 使用Log4j2的使用简介Demo异步日志(效率提升的原因)使用Log4j2和slf4j的日志架构包引入Domo实现Log4j2的配置文件Log4j2配置异步日志Log4j2无垃圾机制常见的日志门面JCL,slf4j(Simple Logging For java)原创 2020-12-03 02:54:00 · 1466 阅读 · 0 评论 -
Java的注解和反射
参考文献:类的加载过程:Java的内存分析堆 存放new的对象和数组 可以被所有的线程共享,不会存放别的对象引用 栈 存放基本变量类型(会包含这个基本类型的具体数值) 引用对象的变量(会存放这个引用在堆里边的地址) 方法区(Java 1.8 中已经没有这个概念了) 可以被所有的县成功向 包含了所有的Class和static变量 类加载过程当程序主动使用某个类时,如果该类还没有被加载到内存中,系统会通过如下三个步骤来对该类进行初始化。类的加载 ..原创 2020-11-22 22:22:23 · 191 阅读 · 0 评论 -
Java中不能在foreach中进行元素的remove和add操作
参考文献:https://juejin.im/post/6844903794795347981在阿里巴巴Java开发手册中,有这样一条规定:但是手册中并没有给出具体原因,本文就来深入分析一下该规定背后的思考。foreach循环Foreach循环(Foreach loop)是计算机编程语言中的一种控制流程语句,通常用来循环遍历数组或集合中的元素。Java语言从JDK 1.5.0开始引入foreach循环。在遍历数组、集合方面,foreach为开发人员提供了极大的方便。fore.原创 2020-11-19 11:26:43 · 304 阅读 · 0 评论 -
Java中的NaN和INFINITY
参考文献:https://www.cnblogs.com/zhisuoyu/p/5314541.html总述:Java的浮点型引入了两个新的概念INFINITY(无限的),NaN(不确定的)两个概念。他们仅存在于浮点型即Float和Double中,整形和其他类型不包含这个概念。INFINITY概念:在浮点数运算时,有时我们会遇到除数为0的情况,这个时候引入了INFINITY的概念,表示无穷,有正无穷和负无穷两种概念。定义如下:public static final do..原创 2020-11-18 17:48:35 · 495 阅读 · 0 评论 -
JVM的静态分派和动态分派
参考文献:https://blog.youkuaiyun.com/u011116672/article/details/50086611这里所谓的分派指的是在Java中对方法的调用。Java中有三大特性:封装、继承和多态。分派是多态性的体现,Java虚拟机底层提供了我们开发中“重写”和“重载”的底层实现。其中重载属于静态分派,而重写则是动态分派的过程。除了使用分派的方式对方法进行调用之外,还可以使用解析调用,解析调用是在编译期间就已经确定了,在类装载的解析阶段就会把符号引用转化为直接引用,不会延迟到运行期间再去完成原创 2020-11-17 19:33:40 · 268 阅读 · 0 评论 -
Java中try catch finally语句中含有return语句的执行情况
转载链接:https://blog.youkuaiyun.com/ns_code/article/details/17485221 在这里看到了try catch finally块中含有return语句时程序执行的几种情况,但其实总结的并不全,而且分析的比较含糊。但有一点是可以肯定的,finally块中的内容会先于try中的return语句执行,如果finall语句块中也有return语句的话,那么直接从finally中返回了,这也是不建议在finally中return的原因。下面来看这几种情况...转载 2020-11-13 15:23:01 · 187 阅读 · 0 评论 -
Java的Switch-case使用细节
参考文献:https://www.runoob.com/java/java-switch-case.html经常使用switch-case但是从来没有注意过过多的细节,现在把所有的细节总结出来。java中的switch-case的结构:witch(expression){ case value : //语句 break; //可选 case value : //语句 break; //可选 //你可以有任意原创 2020-11-12 20:33:41 · 215 阅读 · 0 评论 -
Java String、StringBuffer和StringBuilder的使用方式
如果现在希望初始化一个String,里边由10个0组成,如何快速初始化?1. 循环拼接: String stringDemo = new String(); for (int i = 0; i < 10; i++) { stringDemo += "0"; }这种方式最差,效率最低,非常耗时。2. 利用StringBuilder StringBuilder sbDemo = new String原创 2020-06-20 15:29:42 · 230 阅读 · 0 评论 -
Java的equal()和hashCode()
参考文献:https://juejin.im/post/6844904005575901191Java中经常会问这样的问题:为什么定义一个类,如果重写equal()就一定要重写hashCode()?这个问题可以分成几步来看: 什么是equal? 什么是hashCode? 为什么要重写equal() ? 为什么要在重写完equal()之后重写hashCode()?1. equal()方法是什么?Object中,...原创 2020-11-11 17:36:02 · 279 阅读 · 0 评论 -
Java的IO和NIO
参考视频:https://www.bilibili.com/video/BV1Tz4y1X7H7?p=12参考文档:https://www.cnblogs.com/coderzjz/p/13670088.htmlJava 的IO操作java中的IO是input和output的缩写,是java中的传统的输入输出,流的分类:按照数据流向区分流:IO stream是 内存和存储设备(硬盘)之间的传输通道。Input stream 输入流,将硬盘中的数据,读入到内存中。O..原创 2020-11-06 17:35:41 · 204 阅读 · 0 评论 -
java三目运算符 内的隐式类型转换规则
在三目运算符java开发的环境下可以简单的理解为双目运算符的类型转换问题(便于理解)。其具体规则总结如下: 1)如果定义了数据类型的变量与未定义变量的数值共同参与三元运算符的后双目运算,,那么返回的结果就是范围大(精度高)类型 2)如果两个定义了数据类型的变量共同参与三元运算符的后双目运算,那么返回的结果就是范围大(精度高)类型 3)如果直接进行数值的比较,会自动转型成为范围大(精度高)的数据类型而jvm在给数值分配数据类型的时候会选取刚好能装下该数据大小精度的数据类型进行分配(99.0..原创 2020-10-16 13:53:24 · 931 阅读 · 0 评论 -
【转】GSON 完整版使用教程-原文基础上进行补充
转载地址:https://www.jianshu.com/p/923a9fe78108【链接可以从原地址点进去】Gson是google推出的用于Java对象和JSON之间序列化和反序列化的公开库。使用Gson可以使我们的JSON解析工作更加方便。如果你还不懂得JSON是什么,请查看它的JSON官方文档,我觉得这是最言简意赅的说明。如果你想从大体上知道Gson用法而不追究细节,那么你可以先大体的浏览一下Gson的官方用户指南。它的原址在这里Gson User Guide。如果你不喜欢看英文,我转载 2020-10-08 22:12:59 · 270 阅读 · 0 评论 -
JVM GC调优:关键性能指标
当对java应用的内存和GC调优时,我们应该基于关键性能指标来做决定,但是指标有很多,哪些我们应该着重考虑呢?这篇文章将尝试讨论这个问题。哪些是我们应该考虑的指标?1. 吞吐量2. 延迟3. CPU消耗1. 吞吐量吞吐量是指单位时间内能完成的生产任务的量,首先我们得明确一下,什么是生产任务,什么是非生产任务?生产任务:大部分时间在执行的业务任务非生产任务:像GC等跟业务无关的任务举个例子,假设你的应用跑了60分钟,其中2分钟在做GC操作,那么,应用有3.33%的时间在做GC(2/60)..转载 2020-09-21 20:08:39 · 389 阅读 · 0 评论 -
Java中的method覆盖和static method覆盖
确切来讲,static method是在加载的时候就已经完成实例化的了,所以并不存在覆盖一说。直接看代码,看Main中的输出结果:在普通的method中,如果初始化的是子类的内存,那么前边引用,调用的也是覆盖后的方法。在static method中,不存在覆盖的写法,因此,即便开了子类的内存,也需要根据引用的类型来确定执行的方法。public class ClassA { public static void method1() { System.out.print原创 2020-09-17 15:12:33 · 370 阅读 · 0 评论 -
浅析Java中CountDownLatch用法
文章转载,原地址:https://blog.youkuaiyun.com/u013136708/article/details/494444591、CountDownLatch是什么CountDownLatch可以控制线程的执行,他可以让所有持有他的多个线程同时执行,也可以控制单个线程执行。他初始化的时候会传出一个int类型的参数i,调用一次countDown()方法后i的值会减1。(所有的值必须 >=0,不能存在负数)在一个线程中如果调用了await()方法,这个线程就会进入到等待...转载 2020-09-16 16:31:58 · 182 阅读 · 0 评论 -
Java 四种线程池的用法分析
介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用,本文是基础篇。转载请标注原地址:http://blog.youkuaiyun.com/u011974987/article/details/51027795;1、new Thread的弊端执行一个异步任务你还只是如下new Thread吗?new Thread(new Runnable() { @Override public void run() { // TODO Auto-g..转载 2020-09-15 19:41:21 · 150 阅读 · 0 评论 -
Java反射的使用
参考文档:https://www.jianshu.com/p/e55770dd48d3一、概述1、Java反射机制(Java-Reflect):在运行状态中,对于任意一个类,都能够知道这个类中的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java的反射机制。反射是Java开发中一个非常重要的概念,掌握了反射的知识,才能更好的学习Java高级课程.因为所有的状态都是在运行时确定下来的,所以读取Class中信...原创 2020-09-15 13:37:21 · 155 阅读 · 0 评论 -
Java泛型通配符的上下界和用法 ? extend T(上界) ? super T(下界)
引用链接:https://blog.youkuaiyun.com/weixin_39800144/article/details/812990461.二者的意思? extends T :表示上界是T, ? 都是继承自T的,都是T的子类;? super T :表示下界是T,?都是T的父类;2.用法例1,我们有多个对象,其中Cat,Dog,Chicken都是extends Animal的。 List<? extends Animal> list = new Arr...原创 2020-09-14 20:45:18 · 787 阅读 · 0 评论