摘要:.puml文件是什么? 是根据PlantUML插件生成的一个类图格式。如果需要查看,也必须在插件的帮助下,查看类图 PlantUML基础使用教程 一、下载idea插件 idea从 FIle-->Settings-->Plugins-->Marketplace 进入到插件下载界面,搜索PlantUML
阅读全文
摘要:总结 JDK中的unmodifiableList的构造函数是对原始集合的浅拷贝, 而Guava.ImmutableList.copyOf是对原始集合的深拷贝 public class ImmutableDemo { public static void main(String[] args) { L
阅读全文
摘要:为了实现Java方法调用的动态绑定,HotSpot使用了与C++虚函数类似的机制,同时为了避免每个对象都维护一个虚函数表,就是设计了Oop-Klass模型,用Klass类保存类的元数据和虚函数表。 多态的理解 从java语言层面看,多态是指在编译期间不确定实际类型,在运行期间才根据实际类型调用具体的
阅读全文
摘要:Java Agent是什么? java agent本质上可以理解为一个jar包插件,这个jar包通过JVMTI(JVM Tool Interface)完成加载,最终借助JPLISAgent(Java Programming Language Instrumentation Services Agen
阅读全文
摘要:一、正则表达式 正则表达式是Java中一门独立的语言,用于检测特定字符串是否符合规则。正则表达式就是用来定义匹配的规则的。 1.1 规则定义 1.2 用法 System.out.println("aaabbb".matches("(a|b)*"));//只能是a或b位数任意 System.out.p
阅读全文
摘要:List优雅初始化 List<String> ukAttribute = Arrays.asList("bookName","bookProp","asOfDate","displayType","displaySubType","calcDataSource","summaryType"); Ha
阅读全文
摘要:1. 什么是Stream? Stream作为java8中增加的一个非常重要特性,为我们提供了对集合的一系列操作,简化了对集合元素的操作复杂度,让我们可以更加专注与业务逻辑的实现,stream的操作一般需要和Lambda表达式进行结合使用,达到简便的操作及清晰的代码。 Stream的使用主要分两部分:
阅读全文
摘要:总结 答案:不一定。不同的策略,hashcode返回值会不一样。 1-根据Object.hashcode()的注释,说明hashCode返回值与对象内存地址有一定关系。但只是其中一种策略而已。 2-根据c++ native hashcode()的源码,通过一个JVM启动参数-XX:hashCode,
阅读全文
摘要:因为类型擦除的问题,所有的泛型类型变量最后都会被替换为原始类型。 既然都被替换为原始类型,那么为什么我们在获取的时候,不需要进行强制类型转换呢? 看下ArrayList.get()方法: public E get(int index) { RangeCheck(index); return (E)
阅读全文
摘要:总结 一句话:为了兼容JDK 5 之前(有泛型功能之前)的项目,否则有大量代码修改的工作。 1-“真泛型”是怎么操作的? 若 Java 语言实现"真泛型",对泛型类型(泛型类、泛型接口)、泛型方法的名字使用特别的编码,例如将 Factory<T> 类生成为一个名为 “Factory@@T” 的类,这
阅读全文
摘要:类型擦除 对于泛型,只是允许程序员在编译时检测到非法的类型而已。 但是在运行期时,其中的泛型标志会变化为 Object 类型。 1 List<Integer> list = new ArrayList<>(); 2 list.add(12); 3 list.add("a"); //编译时,泛型起作用
阅读全文
摘要:方法1:实现 Cloneable 接口,重写 clone() 方法 实现 Cloneable 接口,重写 clone() 方法 --> 一般重写,就是调用super.clone() ...就是Object的native方法clone() 易错: 如果调用某个对象的clone(),但是该类没有实现 C
阅读全文
摘要:总结 不是必要的!有@Override注解,IDE会检查,重载是否规范,是否符合要求!否则会给出错误提示!没有@Override注解,要自己注意是否实现了所有的方法,方法签名是否正确等信息,很容易出错。 /** * Annotation type used to mark methods that
阅读全文
摘要:transient总结 当有些属性不希望序列化时,transient关键字为我们提供了便利。你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。 transient关键字只能修饰变量,而不能修饰方法和类
阅读全文
摘要:String的字符串拘留 String s="abcd" String s="abcd"是一种非常特殊的形式,和new 有本质的区别。它是java中唯一不需要new 就可以产生对象的途径。以String s="abcd";形式赋值在java中叫直接量,它是在常量池中而不是象new一样放在压缩堆中。
阅读全文
摘要:总结 编译期间 确定 类的静态方法,构造方法,私有方法 方法的重载 运行期间 确定 方法的重写,重载 解析 编译期间就确定了。类的静态方法,构造方法,私有方法。 调用目标在程序代码写好、编译器进行编译时就必须确定下来。这类方法的调用称为解析。在Java语言中符合“编译期可知,运行期不可变”这个要求的
阅读全文
摘要:总结 1-valueOf()缓存使用到设计模式:享元模式 单例模式和享元模式都是为了避免重复创建对象,但是其本质是不一样的: 其实现方式不一样,单例是一个类只有一个唯一的实例,而享元可以有多个实例,只是通过一个共享容器来存储不同的对象。 其使用场景不一样, 单例是强调减少实例化提升性能,因此一般用于
阅读全文