import com.alibaba.fastjson.JSON;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.FieldDoc;
import com.sun.javadoc.MethodDoc;
import com.sun.javadoc.RootDoc;
import java.lang.reflect.Field;
* @Author shaoyuanhu
* @Date 2021/2/20 10:15 AM
* @Desc
public class JavaDocUse {
private static RootDoc rootDoc;
public static class Doclet {
public static boolean start(RootDoc rootDoc) {
JavaDocUse.rootDoc = rootDoc;
return true;
public static void show() {
ClassDoc[] classes = rootDoc.classes();
for (ClassDoc classDoc : classes) {
System.out.println(classDoc.name() + "类的注释:" + classDoc.commentText());
MethodDoc[] methodDocs = classDoc.methods();
for (MethodDoc methodDoc : methodDocs) {
// 打印出方法上的注释
System.out.println("类" + classDoc.name() + "," + methodDoc.name() + "方法注释:" + methodDoc.commentText());
System.out.println("===============");
FieldDoc[] fields = classDoc.fields();
for (FieldDoc field : fields) {
//打印属性的注释
System.out.println(field.name() + "--" + field.type().simpleTypeName() + "--" + field.commentText());
// Field[] declaredFields = PayablePojo.class.getDeclaredFields();
// int length = fields.length;
// int length1 = declaredFields.length;
// System.out.println(length + "--" + length1);
// System.out.println("===============");
// for (int i = 0; i < length; i++) {
// System.out.println(declaredFields[i].getName() + "--" + declaredFields[i].getType().getSimpleName() + "--" + fields[i].commentText());
// }
// System.out.println("===============");
public static void main(String[] args) {
com.sun.tools.javadoc.Main.execute(new String[]{"-doclet",
Doclet.class.getName(),
"-encoding", "utf-8", "-classpath",
"/Users/shaoyuanhu/WordSpace/xxx/target/classes",
"/Users/shaoyuanhu/WordSpace/xxx/src/main/java/xxx/test/DocTestDO.java"
show();
通过javadoc获取代码注释package com.xxx.test;import com.alibaba.fastjson.JSON;import com.sun.javadoc.ClassDoc;import com.sun.javadoc.FieldDoc;import com.sun.javadoc.MethodDoc;import com.sun.javadoc.RootDoc;import java.lang.reflect.Field;/** * @Author
赠送jar包:jline-2.11.jar;
赠送原
API
文档:jline-2.11-
javadoc
.jar;
赠送源
代码
:jline-2.11-sources.jar;
赠送Maven依赖信息文件:jline-2.11.pom;
包含翻译后的
API
文档:jline-2.11-
javadoc
-
API
文档-中文(简体)-英语-对照版.zip;
Maven坐标:jline:jline:2.11;
标签:jline、jar包、java、
API
文档、中英对照版;
使用
方法:解压翻译后的
API
文档,用浏览器打开“index.html”文件,即可纵览文档内容。
人性化翻译,文档中的
代码
和结构保持不变,
注释
和说明精准翻译,请放心
使用
。
双语对照,边学技术、边学英语。
Amazon
API
Gateway-适用于AWS Lambda的自定义授权者蓝图
我们为基于Lambda的自定义授权者添加了3种语言的蓝图和示例,以在
API
网关中
使用
。
在Lambda控制台中不可用。
使用
AuthPolicy对象为您的自定义授权者生成并序列化IAM策略。 有关更多详细信息,请参见
javadoc
注释
。
Lambda控制台中也提供了NodeJS蓝图,可轻松生成包括条件在内的IAM策略。
Python
Lambda控制台中也提供了Python蓝图,其中包括AuthPolicy类,该类使生成IAM策略变得简单且易于理解。
在Lambda控制台中不可用。
使用
AuthorizerResponse对象为您的自定义授权者生成IAM策略。 请参阅评论以
获取
更多详细信息。
在Lambda控制台中不可用。
使用
awslabs/aws-lambda-rust-
很多人正在
使用
JavaParser实现最不同的目标。 其中之一是提取文档。 在这篇简短的文章中,我们将看到如何打印与类或接口关联的所有
JavaDoc
注释
。
可以在GitHub上找到
代码
: https : //github.com/ftomassetti/
javadoc
-extractor
获取
类的所有
Javadoc
注释
我们正在重用DirExplorer,在提出了支持类的介绍Java...
Class.getAnnotations()
获取
所有的注解,包括自己声明的以及继承的
Class.getAnnotation(Class< A > annotationClass)
获取
指定的注解,该注解可以是自己声明的,也可以是继承的
Class.getDeclaredAnnotations()
获取
自己声明的注解
Method
Method.getAnnotations()
获取
所有的注解,包括自己声明的以及继承的
Method.
Class 类的实例表示正在运行的 Java 应用程序中的类和接口;
枚举是一种类,注解(指的是注解Annotation)是一种接口;
每个数组都是 Class字节码类中的一个具体 对象
基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象;
1、 Class类 和它的实例的产生: Class的对象是已经存在的类型,
所以不能够直接new一个Class对象出来,是通过Class类中的一个方法
获取
到的。
例如:通过全限定路径类名
2、同一种类型不管通过什么方式得到Class的实例都是相等的;一个类型的字节码对象只有一份,在元空间。
3、Class的实例就看成是Java中我们学过的所有的数据类型在JVM中存在的一种状态(字节码对象)
String.class int.class List.class int[].class
1.概念:通过一个全限定类名,
获取
字节码文件
2.作用:
1. 提高开发灵活度,提高程序的扩展性
2. 框架(提高开发效率的别人封装好的
代码
)底层都是
使用
反射技术。例如:Tomcat、Spring...
3. 缺点:破坏封装性,性能低下(以后,能不用反射技术就不用)
3.
使用
:(重点)
1.
获取
字节码文件
1.1 Class clazz = Class.forName(全限定路径名) (最多
使用
)默认就是调用下面的方法
1.2 static 类<?> forName(String name, boolean initialize, ClassLoader loader)
name:全限定路径名
initialize:表示是否初始化,默认是false
loader:可以指定一个类加载器加载字节码文件
2. 全限定类名.class
3. 对象名.getClass()
Class类中方法newInstance():创建当前字节码对象(只能调用无参且是public修饰的构造方法)
2. 根据字节码文件
获取
构造方法、普通方法、字段等
Constructor[] constructors = clazz.getConstructors()
获取
public修饰的构造方法数组
Constructor[] constructors = clazz.getDeclaredConstructors()
获取
任意权限的所有造方法数组
Constructor constructor = clazz.getConstructor(Class 参数字节码)根据参数类型
获取
public修饰的指定的的构造方法
Constructor constructor = clazz.getDeclearConstructor(Class 参数字节码)
获取
任意访问权限指定的构造方法
//通过构造方法对象去用构造方法创建对象 => 相当于new 一个对象
Object instance = constructor.newInstance(Object 实参);//可以创建任意访问权限的有参或者无参构造
Method[] methods = clazz.getMethods()
获取
public修饰的构造方法数组,有父类中的方法
Method[] methods = clazz.getDeclaredMethods()
获取
任意访问权限所有造方法数组,并且都是自己的方法
Method method = clazz.getMethod(String methodName,Class... 参数字节码)根据方法名和参数类型
获取
指定的的方法
methodName:方法名
Class:形参类型。如果方法没有形参,则Class可变参数不用写
Method method = clazz.getDeclaredMethod(String methodName,Class... 参数字节码)根据方法名和参数类型
获取
指定的的方法
methodName:方法名
Class:形参类型。如果方法没有形参,则Class可变参数不用写
//通过普通方法对象调用执行方法
method.invoke(Object obj,Object... args);
obj:对象。如果是对象的方法,就传入一个当前字节码创建的对象,如果是static方法,则写null
args:就是具体实参
Field[] fields = clazz.getFields()
获取
public修饰的字段
Field[] fields = clazz.getDeclaredFields()
获取
任意权限所有字段
Field field = clazz.getDeclaredField(String fieldName) 根据字段名
获取
任意访问权限的指定字段
Field field = clazz.Field(String fieldName)根据字段名
获取
public的指定字段
//通过当前的字段对象,给某一个字段赋值取值
field.get(Object obj);//如果是属于非static,就传入一个对象,如果是静态的,就传入null
obj:对象
field.set(Object obj, Object value);//如果是属于非static,就传入一个对象,如果是静态的,就传入null
obj:对象
value:值
String getName()
获取
全限定类名(全限定,包含包名) Class类中方法
String getSimpleName()
获取
类名简称 Class类中方法
Package getPackage()
获取
包名 Class类中方法
T newInstance() 根据当前字节码创建对应的对象 Class类中方法
1. Class类中方法newInstance():创建当前字节码对象(只能调用无参且是public修饰的构造方法)
2. Constructor类中方法newInstance(Object 实参);//可以创建任意访问权限的有参或者无参构造
3. 私有化方法、字段、构造方法都必须破坏封装才能
使用
:
public void setAccessible(boolean flag) true表示破坏封装,false是不破坏
是哪个private修饰的方法、字段、构造方法需要执行,就需要用这个对象破坏哪一个的封装
//
获取
cn.itsource.reflect.User字节码文件
Class<?> clazz = Class.forName("cn.itsource.reflect.User");
//
获取
User的有String参构造
Constructor<?> constructor = clazz.getConstructor(String.class);
//调用有参String构造,创建一个User对象
Object newInstance = constructor.newInstance("某文");
//
获取
private修饰的方法:testPrivate
Method method2 = clazz.getDeclaredMethod("testPrivate");
method2.setAccessible(true);//破坏普通方法Method封装
//破坏封装后就可以执行了
Object invoke2 = method2.invoke(newInstance);//没有形参就不用写
System.out.println(invoke2);
4. 调用static方法、字段:
Field field = clazz.getDeclaredField("country");//
获取
任意访问权限静态变量country
field.set(null, "中国");//因为字段country是static修饰,所以不用对象调用,就传入null。字段country赋值:中文
Object object = field.get(null);//字段country取值
System.out.println(object);
2. 注解:
1.概念: 就是一个标签,有标签后,就具有某一些标签的特性。
本质就是跟类、接口、枚举平级的新结构
2.作用:
1. 帮助程序员校验
代码
2. 可以提高开发效率和程序的扩展性
@Test
@Before
@After
3. 可以生成文档说明
api
操作步骤:
1.选中项目/
代码
,右键选中Export
2.输入
Javadoc
3.第一个next(可以设置生成文档
注释
的目录),第二个next,设置字符集
如果是UTF-8编码,且有中文,请输入-encoding UTF-8 -charset UTF-8
4. 勾选一个生成完毕后,直接通过浏览器打开的选项
5. finish
3.
使用
:(重点)
1.
使用
jdk或者别人定义好的标签
@ + 注解的名称 -- 比如@Override ->注解
2.
使用
自定义的标签
1.JDK的元注解:就是专门用来声明其他注解的注解
作用:通过元注解了解其他注解的
使用
特点,还可以自定义注解
2.元注解:
@Target
@Target 作用
用来限制被修饰注解的
使用
范围,即注解可以在类的哪些成员上
使用
@Target 取值
使用
ElementType.()
1. CONSTRUCTOR:可以在构造器上
使用
注解
2. FIELD:可以在字段上
使用
注解
3. LOCAL_VARIABLE:可以在局部变量上
使用
注解
4. METHOD:可以在普通方法上
使用
注解
5. PACKAGE:可以在包上
使用
注解
6. PARAMETER:可以在参数列表上
使用
注解
7. TYPE:可以在类、接口(包括注解类型) 或enum上
使用
注解
例如:@Target(ElementType.METHOD)//意味着@Override只能在普通方法上
使用
public @interface Override {
@Retention
Java养成计划----学习打卡第七天
内容导航Java养成计划----学习打卡第七天学习内容内容管理
javadoc
注释
如果有构造方法之前还是会先初始化一次为什么可以向上转型?Upcasting下转型downcastinginstanceof关键字多态
Java入门到精通(打卡第七天)
javadoc
注解,多态(重申)
Hello!我是C风,在开始今天的分享前,我想先表明一下自己最近的状态,我的flag是每天学习3h以上,但是每周的前三天真的是肝了,因为我本身是CS,CS是不会
java中的
注释
,大家应该已经很熟悉了。
文档
注释
可以用于对类、属性、方法等进行说明。写文档
注释
时除了需要
使用
/** .... */ 限定之外,还需要注意
注释
内部的一些细节问题。
1文档和文档
注释
的格式化
生成的文档是 HTML 格式,而这些 HTML 格式的标识符并不是
javadoc
加的,而是我们在写
注释
的时候写上去的。比如,需要换行时,不是敲入一个回车符,而是写入 <b
public static void main(String[] args) {
System.out.print("输入项数:");
Scanner s = new Scanner(System.in);
int n = s.nextInt();
System.out.println("输入的项数:"+n);
int a = 1;
int b = 1;
int c = 0;
System.out.print("前"+n+"项为:"+ a +" "+ b +" ");
for (int i = 0;i <= n;i++) {
c = a + b;
a = b;
b = c;
System.out.print(c+" ");
}[code=java]
[/code]
java中使用异或的方式对文件进行加密解密
LYY5655:
使用java代码计算不死神兔的数量
化身孤岛的安生: