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<String>
  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高级应用简笔的更多相关文章

  1. [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)

    如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html   谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...

  2. paip.java 架构师之路以及java高级技术

    paip.java 架构师之路以及java高级技术 1.    Annotation 设计模式... 概念满天飞.ORM,IOC,AOP. Validator lambda4j memcache. 对 ...

  3. paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型

    paip.java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...

  4. Java高级之线程同步

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 关于实现多线程的意义,"从业四年看并发"一文已经讲述,而本篇主要讲一下常用的设计 ...

  5. Java高级之类结构的认识

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! Java体系包括,各种版本的虚拟机,可执行文件,各种第三方类库,Java API类库,Java语言 ...

  6. Java高级软件工程师面试考纲(转)

    如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...

  7. Java高级软件工程师面试考纲

    如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...

  8. 黑马程序员——Java高级应用(一)

    ------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...

  9. 2017最新技术java高级架构、千万高并发、分布式集群、架构师入门到精通视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

随机推荐

  1. java-其他-索引

    数据结构 设计模式 算法题

  2. mysql 表

    关系 create table scores( id int primary key auto_increment, stuid int, subid int, score decimal(5,2) ...

  3. 6.3 基于二分搜索树、链表的实现的集合Set复杂度分析

    两种集合类的复杂度分析 在[6.1]节与[6.2]节中分别以二分搜索树和链表作为底层实现了集合Set,在本节就两种集合类的复杂度分析进行分析:测试内容:6.1节与6.2节中使用的书籍.测试方法:测试两 ...

  4. LeetCode 144. Binary Tree Preorder Traversal 二叉树的前序遍历 C++

    Given a binary tree, return the preorder traversal of its nodes' values. Example: Input: [,,] \ / Ou ...

  5. PHP实现防止SQL注入的2种方法

    PHP简单实现防止SQL注入的方法,结合实例形式分析了PHP防止SQL注入的常用操作技巧与注意事项,PHP源码备有详尽注释便于理解,需要的朋友可以参考下! 方法一:execute代入参数 $var_V ...

  6. 菜鸟教程之学习Shell script笔记(下)

    菜鸟教程Shell script学习笔记(下) 以下内容是学习菜鸟教程之shell教程,所整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-sh ...

  7. spring boot 入门(一)

    转自构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程. ...

  8. 深入理解Java虚拟机读书笔记5----虚拟机字节码执行引擎

    五 虚拟机字节码执行引擎   1 运行时栈帧结构     ---栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,是虚拟机运行时数据区中的虚拟机栈的栈元素.     ---栈帧中存储了方法的局部变 ...

  9. vim 批量替换使用说明

    基本语法: :[addr]s/源字符串/目的字符串/[option] 全局替换命令: :%s/源字符串/目的字符串/g [addr] 表示检索范围,省略时表示当前行. "1,20" ...

  10. SuRF: Practical Range Query Filtering with Fast Succinct Tries 阅读笔记

    SuRF(Succinct Range Filter)是一种快速而紧凑的过滤器,同时支持点查询和范围查询(包括开区间查询.闭区间查询.范围计数),可以在RocksDB中用SuRF来替换Bloom过滤器 ...