1. Annotation

使用范围: package, class, method, field

常用: @Override, @Deprecated, @SuppressWarnings

自定义注解:

@Target(ElementType.FIELD)

public @interface Person{

String name() default "";

int id() default 0;

}

元注解:

@Target(ElementType.FIELD): 使用域为属性

@Retention(RetentionPolicy.RUNTIME): 运行时可用

@Documented

@Inherited

注解操作

java.lang.Class对象的注解相关方法(以下注解来自类, 属性,方法也有相似操作)

getAnnotation, getAnnotations, isAnnotationPresent, getAnnotationsByType

getDeclaredAnnotationsByType, getDeclaredAnnotation, getDeclaredAnnotations

2. ORM

Object Relationship Mapping

对象与关系型数据结构之间的映射

3. 反射机制

基于java.lang.Class对象

获取类名: getName, getSimpleName

获取属性信息: getField, getFields, getDeclaredField, getDeclaredFields

获取方法: getMethod(有参方法要传入参数类型), getMethods, getDeclaredMethod, getDeclaredMethods

获取构造器: getConstructor, getConstructors, getDeclaredConstructor, getDeclaredConstructors

setAccessible(true), 设置取消访问检查

java具有泛有擦除机制: java类在加载后, Class对象并没有泛型, 泛型只是给编译器使用的

ParameterizedType: 带泛型的参数类型, 如Collection

GenericArrayType: 泛型数组类型

WildcardType: 通配符类型

Method中对类型的操作

getGenericParameterTypes 获取所有参数类型

getReturnType 获取返回值类型

ParameterizedType中对泛型的操作

getActualTypeArguments 获取该类型的所有泛型

熟练掌握Class, Method, Field, Constructor类和Type接口

反射会降低程序效率, 普通方法效率是反射的30倍

4. 动态编译

Runtime调用javac

Runtime r = Runtime.getRuntime();

Process process = r.exec("javac -cp /src/main/java/com/galaxy/util/ StringUtil.java");

JavaCompiler

JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();

int result = compiler.run(null, null, null, "c:/myjava/HelloWorld.java");

脚本引擎执行JavaScript代码

ScriptEngineManager sem = new ScriptEngineManager();

ScriptEngine engine = sem.getEngineByName("javascript");

使用ScriptEngine对象的put将需要执行的js代码放入引擎, 再eval调用put进引擎的代码, get可以拿到js变量

5. 字节码操作

java动态性: 字节码操作, 反射

字节码操作使用: 动态生成新的类, 动态改变类结构

优势: 比反射开销小,性能高, Javassist性能比反射高,比ASM低

常见字节码操作类库:

BCEL(Byte Code Engineering Library) JVM汇编语言进行类的细节操作

ASM轻量级java字节码操作框架, 直接涉及JVM底层操作指令

CGLIB(Code Generation Library)基于ASM实现更强大的,高性能的,高质量的Code生成类库

Javassist分析编辑创建java字节码,开源,使用简单与cglib相似

Javassist

AOP(Aspect Oriented Programming, 面向切面编程)

Reflection

主要类:

CtClass

ClassPool pool = ClassPool.getDefault();

CtClass cc = pool.makeClass("com.bjsxt.bean.Emp");

CtMethod

CtMethod m1 = CtMethod.make("public void setEmpno(int empno){this.empno=empno;}", cc);

cc.addMethod(m1);

CtField

CtField f1 = CtField.make("private int empno;", cc);

cc.addField(f1);

CtConstructor

CtConstructor constructor = new CtConstructor(new CtClass[]{CtClass.intType,pool.get("java.lang.String")}, cc);

constructor.setBody("{this.empno=empno; this.ename=ename;}");

cc.addConstructor(constructor);

java高级应用_Java高级应用简笔相关推荐

  1. java高级内容_Java高级程序员必备的内容知识

    一段时间没有回顾多线程相关知识了,虽然工作中会用到一些多线程的内容,但都偏向于基础,今天java培训带大家重读多线程相关内容,发现有些东西还是需要注意下.这些一般是面试高频问题奥. 了解并发的内幕是一 ...

  2. java高级知识点_JAVA高级阶段知识点汇总

    一.集合框架和泛型 1.定义 集合框架用于存储一组长度不定的元素. 2.常用的接口和类 接口:Collection.List.Set.Map.Iterator 类:ArrayList.LinkedLi ...

  3. java高级类_Java高级类特性(一)

    权限类内同包不同包子类不同包非子类 private √ × × × default √ √ × × protected √ √ √ × public √ √ √ √ 四.super关键字的使用 pac ...

  4. java高级教程_Java高级教程02

    1.Java线程 1.1. 多线程和多进程 多进程:操作系统能够同时进行多个任务: 每个app(word,播放器,浏览器)可以同时运行 多线程:同一应用程序中哟多个顺序流同时执行 线程是进程中的一部分 ...

  5. java高级规范_Java高级规范之二

    二十一.提交java代码前应该检查是否有没用的语句,如:System.out.println(); jsp页面上面是否有alert调试信息 不规范示例:暂无 规范实例:暂无 解析:因为如果保留了有可能 ...

  6. java高级考试题_JAVA高级考试题

    一.单项选择题 (共36题,36分) 1. 已知一个引用类型变量myvar指向了一个流对象,在程序中出现了如下语句:myvar.flush(); myvar.close(); 则myvar所指向的对象 ...

  7. java二进制保存图片_JAVA高级特性——二进制存储图片

    import java.io.*;/*** 将图片转为数组,输出成文件,再读取这个文件,获得这个数组,还原成图片 *@authorAdministrator * **/ public classTex ...

  8. java实现计算器_java高级计算器的实现

    不仅可以实现+,-,*,/,( ,) ,log ,ln,√ , ^ , cos ,sin,tan ,还支持最大500长度的字符运算.本程序是我上课的时候老师讲的,可能不是老师的原创,希望对有些同学有用 ...

  9. java 枚举高级应用_java高级编程之枚举

    接下来本章的重点来了,就是枚举: 枚举是什么? Java中的枚举是一种特殊的类,不但可以添加字段,构造方法,普通方法,甚至可以添加main()方法, 为什么需要枚举? 一些方法在运行时,它需要的数据不 ...

最新文章

  1. SAP云平台CloudFoundry环境hdb build成功的日志分析
  2. matlab dwt 多层分解,利用matlab对图片进行多层小波分解 会的加QQ511607771 加过作图之后积分加倍送...
  3. 你不必害怕,岁月有的是时间让你遇见更好的人(沈善书)
  4. poj 3693 后缀数组
  5. e语言通用进销存源码_Go 语言设计哲学之五:代码风格的唯一标准
  6. 关于集合中元素的有序无序的易混淆点
  7. java 排序stackoverflow_爬取 100 万条 StackOverflow 问答后,我得出的结论!
  8. RocketMQ报错:MQClientException:no route info of this topic的解决
  9. char与byte差异
  10. 快速入门基于区块链的BPM系统--汇流BPM
  11. (组合数+快速幂+lucas+费马小引理)acwing 887. 求组合数 III
  12. DSR 和AODV的对比
  13. CSS calc()函数
  14. Python调用字符映射表输入特殊符号
  15. 编程-----魔法币投币方案设计
  16. Android之运用百度地图检索地点
  17. python中copy()和deepcopy()详解
  18. html5 3d在线试衣源码,3D版HTML5模拟衣服撕扯动画
  19. developerWorks 中国论坛
  20. 泽地萃:共同信念;地风升:厚积薄发

热门文章

  1. 京东店铺托管引流技巧有哪些?
  2. leetcode (Image Smoother)
  3. APP产品线上埋点方案
  4. 小巧精美原厂轴 Cherry发布全新MX Board 1.0
  5. 电信客户流失数据分析(一)
  6. SemanticKITTI点云标注工具
  7. 成也苹果败也苹果,曾经女首富身价缩水一半
  8. 深度学习入门(一)——深度学习是什么?
  9. 陈老师排课12A排早晚自习课、假期补课表的方法
  10. 上报下单行为 腾讯广告 微信 公众号 PHP