作者:cleverpig(作者的Blog:http://blog.matrix.org.cn/page/cleverpig
)
原文:http://www.matrix.org.cn/resource/article/44/44055_Java+Annotation+Reflect.html
关键字:java,annotation,reflect
阅读提示:文中提到的程序成员或者程序元素是一个概念,指组成程序代码的单元:如类、方法、成员变量。
一、Annotation究竟是什么?
Annotation
提供了一条与程序元素关联任何信息或者任何元数据(metadata)的途径。从某些方面看,annotation就像修饰符一样被使用,并应用于包、类
型、构造方法、方法、成员变量、参数、本地变量的声明中。这些信息被存储在annotation的“name=value”结构对中。
annotation类型是一种接口,能够通过java反射API的方式提供对其信息的访问。
annotation能被用来为某个程序元
素(类、方法、成员变量等)关联任何的信息。需要注意的是,这里存在着一个基本的潜规则:annotaion不能影响程序代码的执行,无论增加、删除
annotation,代码都始终如一的执行。另外,尽管一些annotation通过java的反射api方法在运行时被访问,而java语言解释器在
工作时忽略了这些annotation。正是由于java虚拟机忽略了annotation,导致了anno ......
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。
1. 得到某个对象的属性
public Object getProperty(Object owner, String fieldName) throws Exception {
Class ownerClass = owner.getClass();
Field field = ownerClass.getField(fieldName);
Object property = field.get(owner);
return property;
}
Class ownerClass = owner.getClass():得到该对象的Class。
Field field = ownerClass.getField(fieldName):通过Class得到类声明的属性。
Object property = field.get(owner):通过对象得到该属性的实例,如果这个属性是非公有的,这里会报IllegalAccessException。
2. 得到某个类的静态属性
public Object getStaticProperty(String className, String fie ......
/**
* 对图片裁剪,并把裁剪完蛋新图片保存 。
*
* @param srcpath: 被裁减的图片完整路径
* @param tarpath: 已裁减的新图片保存完整的路径
* @param x: 裁减矩形区域左上顶点水平位移
* @param y: 裁减矩形区域左上顶点垂直位移
* @param width: 裁减矩形区域的宽度
* @param height: 裁减矩形区域的高度
*/
public static void cut(String srcpath, String tarpath, int x, int y, int width, int height) {
try {
// 读取图片文件
FileInputStream is = new FileInputStream(srcpath);
// 获取图片流
ImageInputStream iis = ImageIO.createImageInputStream(is);
// 转化成输出流
BufferedImage outputImage = getSubimage(ImageIO.read(iis), x, y, width, height);
// 保存新图片
if (null != outputImage) {
ImageIO.write(outputImage, "jpg", new File(tarpath));
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static BufferedImage getSubimage(BufferedImage inputImage, int x, int y, int width, int height) {
return getSubimage(inputImage, ......
1.factory因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,
如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,
虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
2.Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,
工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
3.Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们.
用户不知道内部的具体构建细节.Builder模式是非常类似抽象工厂模式,细微的区别大概只有在反复使用中才能体会到.
4.Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。 在很多操作中,
比如建立目录 数据库连接都需要这样的单线程操作。还有, singleton能够被状态化; 这样,
多个单态类在一起就可以作为一个状态仓库一样向外提供服务,比如,你要论坛中的帖子计数器,
每次浏览一次需要计数,单态类能否保持住这个计数,并且能s ......
Day 01
一、 从面向过程编程到面向对象编程的思维转变
我们知道所有的计算机程序都是由两类元素组成:代码和数据。此外从概念上将讲,程序还可以以他的代码或是数据为核心进行组织编写。也就是说一些程序围绕“正在发生什么编写“,而另一些程序则围绕”谁将被影响“编写。这两种范型决定程序的构建方法。第一种方法被称为面向过程的模型,用他编写的程序都具有线性执行的特点。面向过程的模型可以认为是代码作用于数据,用C写的程序就是典型的面向过程模型。第二种方法也就是我们现在正在学习的面向对象编程,面向对象编程围绕她的数据(即对象)和为这个数据严格定义的接口来组织程序。面向对象的程序实际上就是用数据控制对代码的访问。CoreJava就是一门纯面向对象编程的语言。
二、 什么是字节码和虚拟机:
字节码是一套设计用来在Java运行时系统下执行的高度优化的指令集。该Java运行时系统称为Java虚拟机(JVM)。JVM其实就是一个字节码解释器。虚拟机将字节码解释成机器码给CPU执行,所以我们在java中通过虚拟机的这种解释执行方式来屏蔽底层操作系统的差异。
JRE = JVM+编译器
JDK= JVM+编译器+类库
三 ......
1. 开发工具 : MyEclipse5.5, FlexBuilder3, Tomcat6.
2. 开发过程 :
第一步 : 下载BlazeDS, 地址:http://opensource.adobe.com/wiki/display/blazeds/Release+Builds, 解压缩。
第二步 : 在MyEclipse中新建WEB工程,导入依赖库:
(1) backport-util-concurrent.jar
(2) cfgatewayadapter.jar
(3) commons-codec-1.3.jar
(4) commons-httpclient-3.0.1.jar
(5) commons-logging.jar
&n ......
1. 开发工具 : MyEclipse5.5, FlexBuilder3, Tomcat6.
2. 开发过程 :
第一步 : 下载BlazeDS, 地址:http://opensource.adobe.com/wiki/display/blazeds/Release+Builds, 解压缩。
第二步 : 在MyEclipse中新建WEB工程,导入依赖库:
(1) backport-util-concurrent.jar
(2) cfgatewayadapter.jar
(3) commons-codec-1.3.jar
(4) commons-httpclient-3.0.1.jar
(5) commons-logging.jar
&n ......