乙巳🐍年

acc8226 的博客

Java 5 之后可以在源代码中嵌入一些补充信息,这种补充信息称为注解(Annotation),例如在方法覆盖中使用过的@Override 注解,注解都是**@符号开头**的。

注解并不能改变程序运行的结果,不会影响程序运行的性能。有些注解可以在编译时给用户提示或警告,有的注解可以在运行时读写字节码文件信息。

五个基本注解

无论是哪一种注解,本质上都一种数据类型,是一种接口类型。到 Java 8 为止 Java SE 提供 11 种内置注解。其中有 5 种是基本注解,它们来自于 java.lang 包。有 6 个是元注解(Meta Annotation),它们来自于 java.lang.annotation 包,自定义注解会用到元注解。

元注解就是负责注解其他的注解。
基本注解包括:@Override、@Deprecated、@SuppressWarnings、@SafeVarargs 和 @FunctionalInterface。下面逐一介绍一下。

@Override只能用于方法,子类覆盖父类方法(或者实现接口的方法)时可以 @Override 注解。编译器会检查被 @Override 注解的方法,确保该方法父类中存在的方法,否则会有编译错误。

阅读全文 »

反射(Reflection)是程序的自我分析能力,通过反射可以确定类有哪些方法、有哪些构造方法以及有哪些成员变量。Java 语言提供了反射机制,通过反射机制能够动态读取一个类的信息;能够在运行时动态加载类,而不是在编译期。反射可以应用于框架开发,它能够从配置文件中读取配置信息动态加载类、创建对象,以及调用方法和成员变量。

Java 反射机制 API

Java 反射机制 API 主要是 java.lang.Class 类和 java.lang.reflect 包。

java.lang.Class 类

java.lang.Class 类是实现反射的关键所在,Class 类的一个实例表示 Java 的一种数据类型,包括类、接口、枚举、注解(Annotation)、数组、基本数据类型和 void,void 是“无类型”,主要用于方法返回值类型声明,表示不需要返回值。Class 没有公有的构造方法,Class 实例是由 JVM 在类加载时自动创建的

方法1:调用 Object 类的 getClass()方法。
方法2:使用 Class 类的 forName()方法。
方法3:如果 T 是一个 Java 类型,那么 T.class 就代表了与该类型匹配的 Class 对象。

阅读全文 »

Arthas

English version goes here.

Arthas 是 Alibaba 开源的 Java 诊断工具,深受开发者喜爱。

当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:

  • 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  • 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  • 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  • 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  • 是否有一个全局视角来查看系统的运行状况?
  • 有什么办法可以监控到 JVM 的实时运行状态?
  • 怎么快速定位应用的热点,生成火焰图?
  • 怎样直接从 JVM 内查找某个类的实例?
阅读全文 »

native2ascii.exe 是 Java 的一个文件转码工具,是将特殊各异的内容 转为 用指定的编码标准文体形式统一的表现出来,它通常位于 JDK_home\bin 目录下,安装好 Java SE 后,可在使用 native2ascii 命令进行转码。

可以直接输入 native2ascii 进入交互模式。也可以进行转文件操作。

中文转Unicode:native2ascii -encoding GBK D:\zh.txt D:\zh_gbk.txt //GB2312也可以
Unicode转中文:native2ascii -reverse -encoding GBK D:\cn_gbk.txt D:\gbk_back.txt

阅读全文 »
0%