Java基础
文章平均质量分 89
微观尽头
求木之长者,必固其根本
展开
-
Java map 优雅的元素遍历方式
Java 8 , Lambda + foreach 语法糖, 写起来非常的 cleanpublic static void main(String[] args) { // map init Map<String, String> map = new HashMap<>(); map.put("k", "v"); /*=====处理函数只有单条语句=====*/ map.forEach((k...原创 2020-07-03 17:32:17 · 813 阅读 · 0 评论 -
Java优先队列(PriorityQueue)重写compare
we can custom min heap or max heap by override the method compare.package myapp.kit.quickstart.utils;import java.util.Comparator;import java.util.Queue;/** * priority queue (heap) demo. * * @author huangdingsheng * @version 1.0, 2020/5/8 */pu原创 2020-05-09 01:03:26 · 763 阅读 · 0 评论 -
Java内部类的底层实现原理
摘要:定义:在一个类中创建另一个类,叫做成员内部类,这个内部类可以是静态的,也可以是非静态的。已知静态内部类的应用(可以解决的问题):通过内部类解决java 的单继承问题,外部类不能同时继承的类可以交给内部类继承 设计模式中,builder 模式通过定义一个静态内部类实现类型汇总:静态内部类 成员内部类 方法内部类 匿名内部类一、静态内部类静态内部...原创 2020-01-14 19:56:23 · 635 阅读 · 0 评论 -
Java 反射 getFields 和 getDeclareds 的区别
参考 stackoverflow 社区的一个回答:https://stackoverflow.com/questions/16966629/what-is-the-difference-between-getfields-and-getdeclaredfields-in-java-reflectio#getFields()All thepublicfields up the ...原创 2019-10-15 23:33:10 · 116 阅读 · 0 评论 -
java 流与 byte[] 的互转
1. InputStream -> byte[] 引入 apache.commons.is 包import org.apache.commons.io.IOUtils;byte[] bytes = IOUtils.toByteArray(inputStream);2. byte[] -> InputStream In...原创 2019-06-23 19:32:47 · 9698 阅读 · 0 评论 -
java文件流处理异常 mark/reset not supported
原因:给定的流不支持mark和reset就会报这个错误。获取到一个网络流,这个网络流不允许读写头来回移动,也就不允许mark/reset机制.解决办法:用BufferedInputStream把原来的流包一层.BufferedInputStream buffInputStream = new BufferedInputStream(fileInputStream)...原创 2019-06-23 19:38:43 · 3957 阅读 · 0 评论 -
Java正则校验手机号
package com.app.main.utils;import java.util.regex.Pattern;/** * Created with IDEA * author:Dingsheng Huang * Date:2019/7/2 * Time:下午6:51 */public class RegexUtils { /** * 正则:手机号(...原创 2019-07-02 18:59:43 · 29516 阅读 · 0 评论 -
JVM内存模型
Java堆(Heap),是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。方法区(Method Area),方法区(Method Area)与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器...原创 2019-06-24 17:07:17 · 100 阅读 · 0 评论 -
Java多线程基础(一)Thread 类 API 详解
介绍 Thread 类的 核心API,在使用这些 API 的过程中,会出现一些意想不到的情况,其实这也是多线程不可预知性的一个体现,学习并掌握这些常见 case,也就掌握了多线程开发的命脉与特点。 概览: -Thread 类与 Runnable 接口介绍 -getId()方法 线程唯一标识 ID -currentThread()方法 ...原创 2019-06-28 19:48:46 · 854 阅读 · 0 评论 -
Java 如何遍历 String 字符串所有字符
package com.app.main.utils;/** * Created with IDEA * author:Dingsheng Huang * Date:2019/6/28 * Time:下午8:48 */public class StringUtils { public static void main(String[] args) { ...原创 2019-06-28 20:52:20 · 26618 阅读 · 1 评论 -
Java 时间戳格式化
package com.app.main.utils;import java.text.SimpleDateFormat;import java.util.Date;/** * Created with IDEA * author:Dingsheng Huang * Date:2019/6/29 * Time:下午6:47 */public class DateTimeUt...原创 2019-06-29 19:19:04 · 21129 阅读 · 0 评论 -
Java 基本类型与自动装箱、拆箱
基本数据类型基本类型,或者叫内置类型,是 Jav 中不同于类(class)的特殊类型。它们是我们编程中使用最频繁的类型。Java 是一种强类型语言,第一次申明必须说明数据类型,第一次变量赋值称为变量的初始化。Java 的基本类型共有八种,基本类型可以分为三类: 字符 类型 char布尔类型 boolean数值类型 byte short int long float d...原创 2019-06-30 15:44:49 · 443 阅读 · 0 评论 -
如何查看Java native 方法源码
java 源码中的 native 方法源码是不能直接在 jdk 中看到的,因为 jdk 不是 开源的。现在只有 openjdk 被 sun 公司授权可以下载完整的 OpenJDK源码包:http://jdk.java.net/用 sublime text 打开:找到openjdk/jdk/src/share/native/...原创 2019-07-18 14:22:24 · 1151 阅读 · 0 评论 -
Snowflake 算法分析与Java实现(参考 Twitter 官方 Scala 原版实现)
参考:Twitter 官方 Scala 原版实现https://github.com/twitter-archive/snowflakepackage com.app.main.snowflake;/** * Created with IDEA * author:Dingsheng Huang * Date:2019/8/4 * Time:下午4:28 * *...原创 2019-08-04 17:48:31 · 249 阅读 · 0 评论 -
Java 重写 Collections.sort 排序方法
package com.app.main.utils;import com.alibaba.fastjson.JSONObject;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;/** * Created wit...原创 2019-08-23 16:38:34 · 1477 阅读 · 1 评论 -
Java 截取字符串常用手法小结
日常开发中,时常遇到截取字符串需求,在这里做个小结方法1:调用 split() 将正则传入 split()。 返回的是一个字符串数组类型。【解析正则比较耗时,有一定性能损耗】String str = "10000:0";String[] res = str.split(":");for (int i = 0; i < res.length; i++) { ...原创 2019-06-20 21:25:23 · 5350 阅读 · 0 评论 -
Java - 解压和打包Jar命令详解
概览:1. 解压包 jar -xvf test.jar2. 压缩包 压缩指定文件: jar -cvf xxx.jar a.class b.class 全部压缩: jar -cvf xx.jar *详解:jar 命令有生成、查看、更新、解开 jar 包的作用,包含 META-INF/MANIFEST.MF 文件。它是 jar 包生成的...原创 2019-06-20 21:23:10 · 34969 阅读 · 1 评论 -
Java中构造方法和普通方法的区别
问题起源: 面向切面编程中,基于动态代理的SpringAOP和AspectJ相比,是一个功能比较弱的AOP解决方案,SpringAOP只能支持方法的切面通知。 当我们需要在创建对象时应用通知,构造器切点就非常方便。然而,Java构造器方法不同于其它正常的方法,这使得Spring基于动态代理的AOP无法把通知应用于对象的创建过程。 那么,相对于普通方法,Java中构造方法有何特点?1)构造方...原创 2018-10-09 15:41:55 · 4650 阅读 · 0 评论 -
Java中 "equals" 和 "==" 用法总结
equals介绍:Java当中所有的类都是继承于Object这个超类的,在Object类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地址,但在一些类库当中这个方法被复写了,如String、Integer、Date。在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。 所以说,对于复合数据类型之间进行equals比较,在没有覆写equals方法...原创 2018-09-29 15:46:43 · 323 阅读 · 0 评论 -
Java-HashMap底层实现原理和性能分析
摘要 HashMap是Java开发人员使用频率最高的一种数据类型。Java在实现键值对映射时定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap。JDK1.8对HashMap底层的实现进行了优化,比较重要的是引入红黑树的数据结构和扩容的优化。 HashMap根据键的hashCode值存储数据...原创 2018-09-30 16:37:09 · 386 阅读 · 0 评论 -
Java计算两个日期相差天数
思路:取两个日期对应的时间戳,相减后除以一天的毫秒数public int daysOfTwo(Date fDate, Date oDate) { // 安全检查 if (fDate == null || oDate == null) { throw new IllegalArgumentException("date is null, check it a...原创 2019-03-06 20:41:08 · 8518 阅读 · 2 评论 -
日常开发问题集 - error “java.net.BindException: Address already in use: JVM_Bind”
在 stackoverflow 社区中找到:How do I resolve the “java.net.BindException: Address already in use: JVM_Bind” error?解决:If you know what port the process is running you can type:lsof -i:<port>.F...原创 2019-03-14 23:33:03 · 133 阅读 · 0 评论 -
Java 枚举类用法、注意事项
维基百科定义: 枚举(enum): 在数学和计算机科学理论中,一个集的枚举是列出某些有穷列集的所有成员的程序。枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见,例如表示星期的 SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY 就是一个枚举。 项目中常用写法示例:/** * 逻辑删除标志位枚举类 * @a...原创 2019-03-13 20:43:40 · 907 阅读 · 0 评论 -
Java 中 this 和 super 使用总结
定义:this: this 是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针super: super可以理解为指向自己超(父)类对象的一个指针,而这个超类指的是离自己最近的一个父类。总结:super() : 调用基类中的某个构造函数(需放在函数体第一条) this(): 调用本类中构造函数(同上) super: 它引用当前对象的...原创 2019-04-04 18:45:41 · 225 阅读 · 0 评论 -
Java StopWatch 任务执行时间监视器
StopWatch 是 apache commons lang3 包下的一个任务执行时间监视器类需求场景:记录代码执行时间,分析耗时瓶颈主要方法: start(); //开始计时 split(); // 设置 split 点 getSplitTime(); // 获取从 start 到最后一次 split 的时间 reset(...原创 2019-04-04 18:47:02 · 2379 阅读 · 0 评论 -
conver Json to map by fastJson
如题:public class JsonUtil { /** * 将json转化成map * @param jsonStr * @return */ public static Map<String, Object> convertJsonStrToMap(String jsonStr){ Map...原创 2019-04-24 23:36:09 · 93 阅读 · 0 评论 -
java emoji 表情存储的解决方法
背景: MySQL 用的 utf8编码,存储 emoji 表情报错原因: MySQL 的 utf8编码的一个字符最多存3个字节,而一个 emoji 表情占4个字节,所以 utf8不支持存储 emoji 表情。解决方法1:数据库编码集设置为 utf8mb4(数据库、表、字段),最多可存4个字节。解决方法2: 不想修改数据库编码时,可以对 e...原创 2019-05-13 16:56:52 · 1575 阅读 · 1 评论 -
fastjson java List/Map 转 JsonString
依赖包:<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.49</version></dependency>1. List -...原创 2019-06-19 16:57:37 · 1303 阅读 · 0 评论 -
Logger.error 正确打印完整异常堆栈信息的姿势
有时候logger.error不能完全地打印出网站的错误堆栈信息,只能打印这个错误是一个什么错误。为什么?看Logger.error源码public void error(String msg, Throwable t);public void error(String msg);如果只传一个参数e进去,那么e就被认为是String类型(会自...原创 2019-06-20 21:17:44 · 4528 阅读 · 1 评论 -
linux 安装 jdk1.8环境
1. 下载 jdk8 在如下链接http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择 jdk-8u151-linux-x64.tar.gz 下载2. 创建 jvm 目录、解包 sudo mkdir /usr/lib/jvm ...原创 2019-06-20 21:18:59 · 212 阅读 · 0 评论 -
Java 重写 equals()方法时,为什么必须重写 hashcode()
为什么重写 equals()方法时,不能再用默认的 hashcode 实现,而必须重写 hashcode() ?hashcode()的默认实现: Object 对象中的默认实现返回的是对象的内存地址如果每个对象都是唯一的,则默认实现工作正常如果重写 equals(),则表示隐含地说具有不同地址的对象可以彼此相同,在这种情况下,必须覆盖 hashcode()想想String类....原创 2019-06-20 21:21:19 · 370 阅读 · 0 评论 -
Java中String转Long方式及注意事项
字符串转Long: Long.ValueOf(String); 返回Long包装类 Long.parseLong(String); 返回long基本数据类型 注意事项:1.字符串内不能包含除数字之外的字符 不然会报错,java.lang.NumberFormatException2.字符串长度要限制,不然也会出错 比如:String...原创 2018-11-05 19:00:56 · 11847 阅读 · 0 评论