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文件运行一下吗 使用java代码计算不死神兔的数量 化身孤岛的安生: 谢谢博主,学习啦 表情包