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<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高级应用简笔的更多相关文章
- [Java面经]干货整理, Java面试题(覆盖Java基础,Java高级,JavaEE,数据库,设计模式等)
如若转载请注明出处: http://www.cnblogs.com/wang-meng/p/5898837.html 谢谢.上一篇发了一个找工作的面经, 找工作不宜, 希望这一篇的内容能够帮助到大 ...
- paip.java 架构师之路以及java高级技术
paip.java 架构师之路以及java高级技术 1. Annotation 设计模式... 概念满天飞.ORM,IOC,AOP. Validator lambda4j memcache. 对 ...
- paip。java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型
paip.java 高级特性 类默认方法,匿名方法+多方法连续调用, 常量类型 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http ...
- Java高级之线程同步
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 关于实现多线程的意义,"从业四年看并发"一文已经讲述,而本篇主要讲一下常用的设计 ...
- Java高级之类结构的认识
本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! Java体系包括,各种版本的虚拟机,可执行文件,各种第三方类库,Java API类库,Java语言 ...
- Java高级软件工程师面试考纲(转)
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...
- Java高级软件工程师面试考纲
如果要应聘高级开发工程师职务,仅仅懂得Java的基础知识是远远不够的,还必须懂得常用数据结构.算法.网络.操作系统等知识.因此本文不会讲解具体的技术,笔者综合自己应聘各大公司的经历,整理了一份大公司对 ...
- 黑马程序员——Java高级应用(一)
------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS ...
- 2017最新技术java高级架构、千万高并发、分布式集群、架构师入门到精通视频教程
* { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...
随机推荐
- django中ajax的使用以及避开CSRF 验证的方式
ajax(Asynchronous Javascript And Xml) 异步javascript和XML ajax的优点 使用javascript技术向服务器发送异步请求 ajax无须刷新整个页面 ...
- Lua学习之加载其他lua文件
Lua 中提供了模块的概念,模块类似一个封装库或者 C++ 中的一个类,可以将公用的部分提到一个文件中,以 API 的形式供其他 lua 文件调用. Lua 中的模块其实就是包含变量.函数等已知元素组 ...
- 深度学习实践-强化学习-bird游戏 1.np.stack(表示进行拼接操作) 2.cv2.resize(进行图像的压缩操作) 3.cv2.cvtColor(进行图片颜色的转换) 4.cv2.threshold(进行图片的二值化操作) 5.random.sample(样本的随机抽取)
1. np.stack((x_t, x_t, x_t, x_t), axis=2) 将图片进行串接的操作,使得图片的维度为[80, 80, 4] 参数说明: (x_t, x_t, x_t, x_t) ...
- Json、JavaBean、Map、XML之间的互转
思路是JavaBean.Map.XML都可以用工具类很简单的转换为Json,进而实现互相转换 1.Map.XML与Json互转 mvn依赖 <dependency> <groupId ...
- linux 之分区和文件系统
分区类型 主分区:总共最多只能分4个 扩展分区:只能有一个,也算作主分区的一种,也就是说主分区加扩展分区最多4个,但是扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用. 逻辑分区:逻辑分区是 ...
- javascript中如何判断变量类型
typeof 只能判断基本类型,如number.string.boolean.当遇上引用类型变量就没那么好用了,结果都是object.使用Object.prototype.toString.call( ...
- java调用webservice方法
由于项目的历史原因,webservice服务端是乙方公司开发的,我们自己开发的系统需要去调用乙方公司的webservice接口.前面用了网上提供的一种方法(非生成代理类),怎么也调用不成功(也许是因为 ...
- Java8自定义函数式编程接口和便捷的引用类的构造器及方法
什么是函数编程接口? 约束:抽象方法有且只有一个,即不能有多个抽象方法,在接口中覆写Object类中的public方法(如equal),不算是函数式接口的方法. 被@FunctionalInterfa ...
- C#解析JSON字符串总结(转载)
JSON文件读取到内存中就是字符串,.NET操作JSON就是生成与解析JSON字符串. 操作JSON通常有以下几种方式: 1. 原始方式:按照JSON字符串自己来解析. 2. 通用方式[★★★★★]: ...
- PhoenixFD插件流体模拟——UI布局【Interaction】详解
流体交互 本文主要讲解Interaction折叠栏中的内容.原文地址:https://docs.chaosgroup.com/display/PHX3MAX/Liquid+Interaction 主要 ...