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. Docker笔记——搭建私有仓

    Docker Hub当然是首选镜像仓,如果不想对所有人公开只想在局域网或公司内部使用,则有必要搭建私有仓来存储分发镜像. 搭建私有仓当然可以直接运行以下命令来创建个registry容器: docker ...

  2. MSMQ—确认队列和响应队列

    一.MSMQ——消息的响应(响应队列) 如果需要从接收程序中获得比确认消息更多的信息(消息确认参考二),就可以使用响应队列.响应队列类似于一般队列,但原始发生程序吧该队列用作接收程序,原始接收 程序把 ...

  3. GDI+ 或 GdiPlus 在VC6下的使用方法

    1.在你的app类头文件中假如以下代码(红字显示) #if !defined(AFX_WALKLTDEMO_H__826A807C_C01D_4FF0_9248_A6BD0369F3A8__INCLU ...

  4. 41_redux_counter应用_react-redux版本

    问题: redux与react组件的代码耦合度太高 编码不够简洁 react-redux 1)是一个react插件库 下载: npm install --save react-redux@5.0.6 ...

  5. ubuntu 外接显示器

    xrandr --help xrandr   # 列出显示器 sudo xrandr --output eDP-1 --off   # 关闭eDP-1显示器 sudo xrandr --output ...

  6. Redis的Errorlog或者启动日志(错误日志)的配置

    Errorlog或者是运行日志是任何一个软件的运行中异常诊断必看的文件之一,折腾Redis的过程中以为有默认的错误日志(或启动日志),不过一直没有发现类似的日志文件,在看了默认的配置文件之后,发现Re ...

  7. springboot使用内部tomcat启动和外部tomcat启动的区别

    springboot本身提供了内部tomcat,可以使用main方法直接启动即可,此时在访问项目请求时,不需要加上项目名称.例如:http://localhost:8088/user/ 如果使用外部t ...

  8. 《DOM Scripting》学习笔记-——第五章、第六章 案列改进

    第四章的案例代码可以得到更好的改进.例如:预留退路.向后兼容性和分离js. 原html代码: <!DOCTYPE html> <html lang="en"> ...

  9. ARTS打卡计划第二周-Review

    本周review的文章是:https://medium.com/@hakibenita/optimizing-django-admin-paginator-53c4eb6bfca3 改篇文章的题目是: ...

  10. uniapp 标题后面紧跟一个标签的布局

    使用uni-app的时候,因为想用flex布局,所以一开始就设置了全部view display为flex. 之后遇到了如下这种样式: 开始想了半天没想出来,后来想到div span有这个效果. 然后就 ...