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. LeetCode1-5题

    1.两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个 ...

  2. 学习笔记 urllib

    第一步: get # -*- coding:utf-8 -*- # 日期:2018/5/15 19:39 # Author:小鼠标 from urllib import request url = ' ...

  3. 【python】Django自定义模板函数

    参考:https://blog.csdn.net/wenyuanhai/article/details/73656761 注意: 1.自定义模板函数的路径必须为APP的templatetags下:ap ...

  4. Linux java进程无故被kill

    这两天,演示环境的java应用无端端就被停止了.在这里记录一下原因和排查过程: 发现应用挂掉以后,第一时间登陆centos,发现进程没有了.于是重新启动应用. 但是启动不起来,去看业务日志,没有找到任 ...

  5. html5自带表单验证

    起因:今天无意中发现chrome的input框自带表单验证!于是就去试试firefox,惊奇的发现也有自带的验证提示,只不过两者的样式不一样 chrome中的样子: firefox中的样子: 发散:具 ...

  6. Handle/Looper源码分析;

    1. Handle中的属性: final Looper mLooper; final MessageQueue mQueue; final Callback mCallback; final bool ...

  7. leetcode1034

    class Solution: def __init__(self): self.V = list() def bfs(self,grid,color,rows,coloums,r,c,ocolor) ...

  8. 数据结构——串(KMP)

    空串:长度为0的串 空格串:由一个或多个空格组成的串 串常用的3种机内表示方法: 定长顺序存储表示: 用一组地址连续的存储单元存储串的字符序列,每一个串变量都有一个固定长度的存储区,可用定长数组来描述 ...

  9. error: undefined reference to 'android::hardware::details::return_status::~return_status()'

    use hidl , make fail. reason is:missing libs:libbinder

  10. Ymodem协议说明

      模块的固件烧录过程,由Term(发送方)发送固件文件,模块(接收方)接收并写入MCU,期间使用的数据传输协议是ymodem协议. 一.概述 ymodem协议是一种发送并等待的协议,即发送方发送一个 ...