Mongoosej.Blog.Software.Programing.Java.API


rt.jar

ClassLoader

java.lang.ClassLoader

getSystemResourceAsStream(String name)

程序开发中,经常会存在将一些资源放到jar内的情况,比如属性文件、图标、图片等等。
由于使用java.io.File只能获取到jar包以外的资源,获取jar包内的资源通常使用java.util.jar.JarFile或者java.lang.ClassLoader来获取,前者操作较为麻烦,通常使用该方法来加载jar包内类路径下的资源。核心思路就是,使用该方法将指定类路径下的资源作为输入流来执行操作。
在某些情况下,资源文件存在编码问题,此时需要注意使用java.io.InputStreamReader来指定编码,防止读取的资源文件乱码。
Java中getResourceAsStream的用法
Java中getResource()的详细介绍

Locale

java.util.Locale

  1. Locale locale = Locale.getDefault();// 根据当前系统环境,获取语言、区域信息
  2. // 返回此语言环境的国家/地区代码,将为空字符串或大写的 ISO 3166 两字母代码。
  3. locale.getCountry();// CN
  4. // 返回适合向用户显示的语言环境国家/地区名。
  5. locale.getDisplayCountry();// 中国
  6. // 返回此语言环境的语言代码,可以是空字符串或小写的 ISO 639 代码。
  7. locale.getLanguage();// zh
  8. // 返回适合向用户显示的语言环境语言名。
  9. locale.getDisplayLanguage();// 中文
  10. // 返回此语言环境国家/地区的三字母缩写。
  11. locale.getISO3Country();// CHN
  12. // 返回此语言环境语言的三字母缩写。
  13. locale.getISO3Language();// zho
  14. // 返回适合向用户显示的语言环境名。
  15. locale.getDisplayName();// 中文 (中国)
  16. // Returns a well-formed IETF BCP 47 language tag representing this locale.
  17. locale.toLanguageTag();// zh-CN

File

java.io.File

文件是否相等

通过计算文件的md5值来比较。

  • 如果文件B由文件A复制得到,那么A和B这两个文件的md5值相等。
  • 如果文件B由文件A复制得到,并且修改了文件B的文件名称,那么A和B这两个文件的文件名不相等,但是这两个文件的md5值仍然相等。 ```java import org.apache.commons.codec.digest.DigestUtils;

String file1Md5 = DigestUtils.md5Hex(new FileInputStream(file1)); String file2Md5 = DigestUtils.md5Hex(new FileInputStream(file2)); System.out.println(file1Md5.equals(file2Md5));

  1. <a name="ZXR4S"></a>
  2. # Aspect
  3. <a name="ZGTbm"></a>
  4. ## keywords
  5. <a name="l3pPT"></a>
  6. ### final
  7. [浅析Java中的final关键字](https://www.cnblogs.com/dolphin0520/p/3736238.html)
  8. <a name="faW7h"></a>
  9. ## doc
  10. <a name="csILk"></a>
  11. #### 表格
  12. 代码注释插入表格,可以参考以下类:
  13. - javax.swing.BoxLayout
  14. <a name="eFyVw"></a>
  15. ## Annotation
  16. [如何实现自定义注解](https://blog.csdn.net/Mr_wzc/article/details/119478793)<br />[如何自定义一个Java注解?](https://zhuanlan.zhihu.com/p/165641201)
  17. <a name="yPUbS"></a>
  18. ## Upgrade
  19. <a name="Nb406"></a>
  20. ### Java 8
  21. Java 8(又称为jdk 1.8)是Java语言开发的一个主要版本。Oracle公司于2014年3月18日发布Java 8它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等。
  22. Java8新增了非常多的特性,主要包括以下几个:
  23. - Lambda达式−Lambda允许把函数作为一个方法的参数(函数作为参数传递到方法中)。
  24. - 方法引用−方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
  25. - 默认方法−默认方法就是一个在接口里面有了一个实现的方法。
  26. - 新工具−新的编译工具,如:Nashorn引擎jjs、类依赖分析器jdeps。
  27. - StreamAPI−新添加的StreamAPI(java.util.stream)把真正的函数式编程风格引入到Java中。
  28. - DateTimeAPI−加强对日期与时间的处理。
  29. - Optional类−Optional类已经成为Java8类库的一部分,用来解决空指针异常。
  30. - Nashorn,JavaScript引擎−Java8提供了一个新的Nashornjavascript引擎,它允许我们在JVM上运行特定的javascript应用。
  31. - <br />
  32. <a name="Rtfay"></a>
  33. #### Lambda
  34. [Lamda 表达式学习](https://www.jianshu.com/p/848cf247ce28)<br />[Java Lambda 表达式](https://www.runoob.com/java/java8-lambda-expressions.html)<br />[Java8新特性--Lambda表达式](https://www.cnblogs.com/kexianting/p/8588987.html)
  35. <a name="ue2Ce"></a>
  36. #### Stream
  37. [Java8中Stream详细用法大全](https://blog.csdn.net/qq_45228323/article/details/121328790)
  38. <a name="jpGu9"></a>
  39. ## Traps
  40. <a name="v4ITs"></a>
  41. ### Number
  42. <a name="jjVPq"></a>
  43. #### lang <---> int
  44. ```java
  45. long startTime = System.currentTimeMillis();
  46. Thread.sleep(1000);
  47. int endTime = System.currentTimeMillis();
  48. System.out.println("cost: " + (startTime-endTime) + "ms");

上述的代码,可能你预期的结果是cost: 1000ms,或者1000ms上下。 但实际的结果是cost: 1632087571479ms,一个很大的数值,远大于1000ms。

结果在1000ms上下是可以理解的,因为cpu切换等等底层问题可能会导致时间不是恰恰1000ms那么准确。但是实际相差缺很大,为什么呢?

当前时间以2021-08-27 10:48来算,大概stratTime=1630032522844ms,endTime=1630032523844ms,上述代码第二行,把endTime由long转为了int,很明显1630032523844已经超过了int的取值范围(-2147483648 ~ 2147483647),所以实际endTime被转为了一个负数,实际endTime=-2055048635ms,所以(startTime-endTime)反而比startTime还更大了。

所以本质原因在于long转int的数据移出。

线程

Java线程池详解

代理

JDK代理、CGLIB(Code Generation Library)代理。
Spring AOP 代理实现的两种方式: JDK动态代理 和 Cglib框架动态代理

语法

null类型转换会不会报NPE?

  1. public static void main(String[] args) {
  2. IChannelEquipmentService ics = null;
  3. EquipmentChargeService ecs = (EquipmentChargeService) ics;
  4. System.out.println(ecs);// 实际会执行到这步输出null,不报NullPointException
  5. }