java高级应用_Java高级应用简笔
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高级应用简笔相关推荐
- java高级内容_Java高级程序员必备的内容知识
一段时间没有回顾多线程相关知识了,虽然工作中会用到一些多线程的内容,但都偏向于基础,今天java培训带大家重读多线程相关内容,发现有些东西还是需要注意下.这些一般是面试高频问题奥. 了解并发的内幕是一 ...
- java高级知识点_JAVA高级阶段知识点汇总
一.集合框架和泛型 1.定义 集合框架用于存储一组长度不定的元素. 2.常用的接口和类 接口:Collection.List.Set.Map.Iterator 类:ArrayList.LinkedLi ...
- java高级类_Java高级类特性(一)
权限类内同包不同包子类不同包非子类 private √ × × × default √ √ × × protected √ √ √ × public √ √ √ √ 四.super关键字的使用 pac ...
- java高级教程_Java高级教程02
1.Java线程 1.1. 多线程和多进程 多进程:操作系统能够同时进行多个任务: 每个app(word,播放器,浏览器)可以同时运行 多线程:同一应用程序中哟多个顺序流同时执行 线程是进程中的一部分 ...
- java高级规范_Java高级规范之二
二十一.提交java代码前应该检查是否有没用的语句,如:System.out.println(); jsp页面上面是否有alert调试信息 不规范示例:暂无 规范实例:暂无 解析:因为如果保留了有可能 ...
- java高级考试题_JAVA高级考试题
一.单项选择题 (共36题,36分) 1. 已知一个引用类型变量myvar指向了一个流对象,在程序中出现了如下语句:myvar.flush(); myvar.close(); 则myvar所指向的对象 ...
- java二进制保存图片_JAVA高级特性——二进制存储图片
import java.io.*;/*** 将图片转为数组,输出成文件,再读取这个文件,获得这个数组,还原成图片 *@authorAdministrator * **/ public classTex ...
- java实现计算器_java高级计算器的实现
不仅可以实现+,-,*,/,( ,) ,log ,ln,√ , ^ , cos ,sin,tan ,还支持最大500长度的字符运算.本程序是我上课的时候老师讲的,可能不是老师的原创,希望对有些同学有用 ...
- java 枚举高级应用_java高级编程之枚举
接下来本章的重点来了,就是枚举: 枚举是什么? Java中的枚举是一种特殊的类,不但可以添加字段,构造方法,普通方法,甚至可以添加main()方法, 为什么需要枚举? 一些方法在运行时,它需要的数据不 ...
最新文章
- SAP云平台CloudFoundry环境hdb build成功的日志分析
- matlab dwt 多层分解,利用matlab对图片进行多层小波分解 会的加QQ511607771 加过作图之后积分加倍送...
- 你不必害怕,岁月有的是时间让你遇见更好的人(沈善书)
- poj 3693 后缀数组
- e语言通用进销存源码_Go 语言设计哲学之五:代码风格的唯一标准
- 关于集合中元素的有序无序的易混淆点
- java 排序stackoverflow_爬取 100 万条 StackOverflow 问答后,我得出的结论!
- RocketMQ报错:MQClientException:no route info of this topic的解决
- char与byte差异
- 快速入门基于区块链的BPM系统--汇流BPM
- (组合数+快速幂+lucas+费马小引理)acwing 887. 求组合数 III
- DSR 和AODV的对比
- CSS calc()函数
- Python调用字符映射表输入特殊符号
- 编程-----魔法币投币方案设计
- Android之运用百度地图检索地点
- python中copy()和deepcopy()详解
- html5 3d在线试衣源码,3D版HTML5模拟衣服撕扯动画
- developerWorks 中国论坛
- 泽地萃:共同信念;地风升:厚积薄发