Java
文章平均质量分 71
Java基础,JVM调优,JAVA并发编程
死牛胖子
在技术的路上渐行渐远
展开
-
Java基础 - String,StringBuffer,StringBuilder的区别
String,StringBuffer,StringBuilder都可用于字符串处理。原创 2017-04-09 19:00:37 · 318 阅读 · 0 评论 -
Class.getResourceAsStream()与ClassLoader.getResourceAsStream()的用法
Class.getResourceAsStream() 与 ClassLoader.getResourceAsStream() 两个方法都是加载类路径下资源的方法。类路径下文件的表示方法分为两种:绝对路径、相对路径,针对不同的路径,两个方法是否都支持? Class.getResourceAsStream()总结ClassLoader.getResourceAsStream()总结源码分析准备工作本文示例使用 Maven 进行构建,使用 .properties在 resources 目录下添加资源原创 2022-02-17 18:09:47 · 1257 阅读 · 0 评论 -
EnumMap&EnumSet的用法
目录EnumMap 的用法EnumSet 的用法创建空集合创建包含所有元素的集合创建包含指定元素的集合创建范围集合补集复制创建集合EnumMap 的用法EnumMap 在使用上跟 HashMap 差不多,但是 EnumMap 的性能更好,所以,如果键为 Enum 类型时,建议使用 EnumMap 代替 HashMap。public enum Color { YELLOW, RED, BLUE, BLACK}public static void main(String[] args) {原创 2022-01-14 18:13:32 · 642 阅读 · 0 评论 -
代码优化 | 如何设置HashMap的初始值大小
写在前面通过本文可以了解 HashMap 及 ArrayList 的扩容策略以及如何设置初始值大小。为什么要设置初始值大小?底层使用数组实现的集合类,比如:HashMap、ArrayList,都会存在扩容的问题,当数组空间不够用时,需要对数组进行动态扩容,不然就会造成 ArrayIndexOutOfBoundsException 异常。如果在创建集合时,就已经知晓集合的大小,那么就可以事先设置集合底层数据的大小,这样就可以避免添加元素的过程中自动扩容,从而达到提高性能的目的。以 HashMap 为原创 2022-01-13 20:37:43 · 4011 阅读 · 0 评论 -
工具类 | 集合工具类Collections介绍
前言通过本文,你可以学习到 Collections 工具类的一些方法使用,在编码过程中都是非常实用的。引入Collections 是 JDK 提供的工具类,不需要专门引入。工具方法介绍空集合当一个方法的返回值是集合时,如果返回值为空时,建议不要返回 null,而是返回一个空集合。但如果每次都新建一个 ArrayList 或者 HashMap,则会造成一定的内存浪费,Collections 为 List、Set、Map 等集合类定义了相应的空集合常量。// 空 ListCollections原创 2022-01-12 16:45:08 · 10227 阅读 · 1 评论 -
注解编程 | 自定义注解
目录注解的概念如何自定义注解元注解自定义注解如何使用注解通过反射得到注解通过反射得到元注解@Inherited 的用法@Repeatable 的用法待思考的问题如何快速得到注解?如何动态为元注解的属性设值?注解的概念注解(Annotation)从 JDK1.5 开始引入,具有以下几个特点注解是一种元数据形式,即注解属于 JAVA 的一种数据类型,和类、接口、数组、枚举类似注解用来修饰类、方法、变量、参数、包注解不会对所修饰的对象产生直接的影响如何自定义注解在学习如何自定义注解之前,先学习一原创 2022-01-04 20:06:42 · 806 阅读 · 0 评论 -
JAVA注解 | 可重复元注解@Repeatable
目录使用 @Repeatable使用反射获取注解约束@Repeatable 是 JDK1.8 增加的元注解,用于声明当前注解是可重复的。如果有没有声明 @Repeatable,在同一个地方使用相同的注解将编译报错。代码实践一下@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Value { String value();}在类上多次使用 @Value原创 2021-12-17 11:43:24 · 1235 阅读 · 0 评论 -
JAVA反射 | 泛型解析
通常我们使用 Class 来描述数据类型,其实在 JDK 中有一个更通用类型接口 Type,Type 是 JDK 中所有类型的公共父接口,Class 也是 Type 的其中一个实现类。public interface Type { default String getTypeName() { return this.toString(); }}在没有泛型之前,Java 只有原始类型(raw type),此时的类型都通过 Class 进行描述。public final原创 2021-11-29 05:02:06 · 1141 阅读 · 0 评论 -
JAVA反射之Class类型解析
在 Class 类中有众多方法用来判断当前 Class 的类型方法名描述isPrimitive()是否基本数据类型,如:int、long、doubleisInterface()是否是接口isEnum()是否是枚举isAnnotation()是否是注解isArray()是否是数组isAnonymousClass()是否匿名类isSynthetic()是否合成类,由 JVM 编译生成isMemberClass()是否内部类,包括静态原创 2021-11-23 17:12:05 · 418 阅读 · 0 评论 -
JAVA反射 | isAssignableFrom()与instanceof关键字的用法
isAssignableFrom() 与 instanceof 关键字,这两种方式是常用的判断继承关系的方式,它们的区别在于:isAssignableFrom() 是 Class 类中的方法,而 instanceof 是 JAVA 关键字isAssignableFrom() 的使用对象是 Class,而 instanceof 的使用对象是对象实例两者的用法如下,具体使用哪个方法就得看当前拥有的是对象实例还是只有 Class// isAssignableFrom() 的使用方法父类.class.原创 2021-11-23 10:49:38 · 521 阅读 · 0 评论 -
JAVA反射 | 桥接方法 method.isBridge()
什么是桥接方法桥接方法是 JDK1.5 引入泛型后,为了使泛型方法生成的字节码与之前版本的字节码兼容,由编译器自动生成的方法。通过代码可以更好地理解:声明一个泛型接口public interface A<T> { void test(T t);}使用 String 类型实现一个具体的实现类public class B implements A<String> { public void test(String s) { System.o原创 2021-11-20 15:24:57 · 736 阅读 · 0 评论 -
JAVA注解 | 组合注解的用法
目录如何自定义组合注解通过反射解析组合注解使用 Spring 提供的工具类解析组合注解如何自定义组合注解在自定义注解时,需要为注解声明两个很重要的元注解:@Retention:声明注解的生命周期@Target:声明可以注解在哪些元素之上自定义注解 @Retention 基本都是设置为 RetentionPolicy.RUNTIME,表明注解可以保留到运行期间。而 @Target 则可以选择多个元素。元素说明ElementType.TYPE注解在类、接口、枚举上El原创 2021-11-17 22:33:22 · 3329 阅读 · 0 评论 -
JAVA注解 | 继承元注解@Inherited的用法
@Inherited 是一个元注解,专门用来修饰注解,被 @Inherited 修饰的注解具备继承传递性。通过代码来验证,首先创建一个自定义注解,但是不加 @Inherited 修饰@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface Version { String value() default "1";}创建一个父类,使用 @Version 注解@V原创 2021-11-14 18:13:23 · 1105 阅读 · 0 评论 -
JDK/CGLIB/Spring三种方式实现动态代理
目录基于 JDK 实现动态代理基于 Cglib 实现动态代理基于 Spring 的 ProxyFactory 实现动态代理ProxyFactory 的实现源码分析基于 JDK 实现动态代理JDK 动态代理的原理是利用反射机制,在运行时创建代理类,必要条件是代理对象基于接口实现。创建一个接口及其实现类。public interface IService { void sayHello();}public class JdkServiceImpl implements IServi原创 2021-11-08 21:45:07 · 374 阅读 · 0 评论 -
JAVA8 | 默认方法的使用
目录什么是默认方法编写默认方法解决继承冲突什么是默认方法传统上来说,接口只负责声明方法约定,接口的实现类必须为接口中定义的每个方法提供实现。但是,一旦接口设计者需要更新接口,向其中加入新的方法,这种方式就会出现问题。因为接口设计者并不能控制接口实现者,这就意味着一旦接口发生变更,则需要所有的接口实现者修改其实现类。比如 JAVA8 在已有的 API 基础上增加了大量方法,这种修改带来的问题也就愈加严重。为了解决这一问题,JAVA8 引入了一种新的机制。 JAVA8 中的接口在声明方法的同时也可以提供实现原创 2021-10-22 18:04:25 · 906 阅读 · 0 评论 -
JAVA8 | 日期时间API(LocalDate、LocalDateTime、LocalTime)
目录日期时间合并日期和时间时间戳时间段DurationPeriod操作日期日期格式化时区日历Java8 引入全新的日期和时间 API,主要包括 LocalDate、LocalTime、LocalDateTime、Instant、Duration 以及 Period日期LocalDate 表示日期创建日期// 创建指定日期LocalDate date = LocalDate.of(2020, 4, 1);// 创建当前日期LocalDate date = LocalDate.now();获原创 2021-10-22 11:50:18 · 1387 阅读 · 0 评论 -
JAVA8 | Stream流
目录流流操作流的使用构建流查找与匹配类 SQL 操作映射归约收集器计数器比较器汇总收集字符串连接收集器List 收集器Set 收集器Map 收集器分组收集器多级分组收集器组内收集组内收集并转换组内转换分区集合是 Java 中使用最多的 API,几乎每个 Java 程序都需要 制造 和 处理 集合。为了更好地操作集合,JDK 提供了不少工具类,还有不少第三方类库,比如 Guava、Common Collections 等,但是,还不够。比如:在所有职员中,查找年龄小于 40,按工资进行倒序排序,列举工资原创 2021-10-13 17:55:28 · 195 阅读 · 0 评论 -
JAVA8日期处理工具方法汇总
目录获取当前日期时间获取指定日期时间日期比较日期格式化获取当前时间戳通过时间戳生成当前时间获取当天开始时间获取当天结束时间日期操作函数计算两个日期之间相差的天数判断是否生日这种周期性日期获取一个月有多少天获取时钟Java 8 推出了整套的日期时间 API,有了这套 API 就可以放弃所有的 java.util.Date、java.sql.Date、Timestamp、Calendar 等,也不用再担心 SimpleDateFormat 的线程安全问题,同时还提供了更好用的日期处理方法。接下来就开始学习一下原创 2021-08-15 12:52:31 · 435 阅读 · 0 评论 -
package-info.java 的使用
目录package-info.java 介绍创建 package-info.javapackage-info.java 作用提供包级别的注释提供包级别的注解@Deprecated 的使用提供包级别的变量package-info.java 介绍pacakge-info.java 是一个 Java 文件,目标是提供一个包级的文档说明及包级的注释。在 Java 5 之前,包级的文档是 package.html,是通过 JavaDoc 生成的。而在 Java 5 之后版本,包的描述以及相关的文档都可以写入 pa原创 2021-08-14 15:24:59 · 6825 阅读 · 0 评论 -
一文弄懂XML文件解析利器XPath
XPath 是一种为查询 XML 文档而设计的语言,它可以与 DOM 解析方式配合使用,实现对 XML 文档的解析。XPath 之于 XML 就好比 SQL 语言之于数据库。原创 2020-04-18 15:50:50 · 890 阅读 · 0 评论 -
Java基础之transient关键字
我们都知道JDK本身提供了一种对象序列化方式,即实现Serilizable接口。然而在实际开发过程中,我们常常会遇到这样的问题,这个类的有些属性需要序列化,而其他属性不需要被序列化。打个比方,如果一个用户有一些敏感信息(如密码,银行卡号等),为了安全起见,不希望在网络操作(主要涉及到序列化操作,本地序列化缓存也适用)中被传输,这些信息对应的变量就可以加上transient关键字。换句话说,这个...原创 2018-05-10 18:38:03 · 162 阅读 · 0 评论