JAVA编程:JAVA反射手艺(二)
再说第三点:我并没有提到服务器也要整合,然后是IDE,一个好的IDE能够200%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。Lesson:2处置对象1.CreatingObjects
一样平常情形下,创立一个对象用以下办法
Rectangler=newRectangle();
但假如你正在开辟一个developmenttools,在运转之前也许不晓得要天生对象的类。
以是要像上面如许来创立对象:
StringclassName;
//...loadclassNamefromtheuserinterface
Objecto=new(className);//WRONG!
但以上是毛病的。
准确的办法是利用类的反射特征:
1)UsingNo-ArgumentConstructors
比方:
ClassclassDefinition=Class.forName(className);//指定类的运转期实例
object=classDefinition.newInstance();//挪用无参机关函数来天生指定类的实例。
2)UsingConstructorsthatHaveArguments
这个手艺要用到以下步骤:
a,创立一个Class对象
b,创立一个Constructor对象,getConstructor(Class[]params)办法,参数是一个与机关办法相合适的Class数组.
c,在Constructor对象上挪用newInstance办法来天生一个对象,参数是一个object数组与这个机关办法相装备。
比方:
importjava.lang.reflect.*;
importjava.awt.*;
classSampleInstance{
publicstaticvoidmain(String[]args){
Rectanglerectangle;
ClassrectangleDefinition;
Class[]intArgsClass=newClass[]{int.class,int.class};
Integerheight=newInteger(12);
Integerwidth=newInteger(34);
Object[]intArgs=newObject[]{height,width};
ConstructorintArgsConstructor;
try{
//1.
rectangleDefinition=Class.forName("java.awt.Rectangle");
//2.
intArgsConstructor=
rectangleDefinition.getConstructor(intArgsClass);//找到指定的机关办法
//3.
rectangle=
(Rectangle)createObject(intArgsConstructor,intArgs);//机关办法形貌对象,object[]
}catch(ClassNotFoundExceptione){
System.out.println(e);
}catch(NoSuchMethodExceptione){
System.out.println(e);
}
}
publicstaticObjectcreateObject(Constructorconstructor,
Object[]arguments){
System.out.println("Constructor:"+constructor.toString());
Objectobject=null;
try{
object=constructor.newInstance(arguments);
System.out.println("Object:"+object.toString());
returnobject;
}catch(InstantiationExceptione){
System.out.println(e);
}catch(IllegalAccessExceptione){
System.out.println(e);
}catch(IllegalArgumentExceptione){
System.out.println(e);
}catch(InvocationTargetExceptione){
System.out.println(e);
}
returnobject;
}
}
2。GettingFieldValues
Ifyouarewritingadevelopmenttoolsuchasadebugger,youmustbeabletoobtainfieldvalues.Thisisathree-stepprocess:
假如要作一个开辟工具像debugger之类的,你必需能发明filedvalues,以下是三个步骤:
a.创立一个Class对象
b.经由过程getField创立一个Field对象
c.挪用Field.getXXX(Object)办法(XXX是Int,Float等,假如是对象就省略;Object是指实
例).
比方:
importjava.lang.reflect.*;
importjava.awt.*;
classSampleGet{
publicstaticvoidmain(String[]args){
Rectangler=newRectangle(100,325);
printHeight(r);
}
staticvoidprintHeight(Rectangler){
FieldheightField;
IntegerheightValue;
Classc=r.getClass();
try{
heightField=c.getField("height");
heightValue=(Integer)heightField.get(r);
System.out.println("Height:"+heightValue.toString());
}catch(NoSuchFieldExceptione){
System.out.println(e);
}catch(SecurityExceptione){
System.out.println(e);
}catch(IllegalAccessExceptione){
System.out.println(e);
}
}
}
3。SettingFieldValues
a.创立一个Class对象
b.经由过程getField创立一个Field对象
c.挪用Field.set(Object,withparam)办法(XXX是Int,Float等,假如是对象就省略;Object是指实例,withparam指和这个字段相区配的字段。
importjava.lang.reflect.*;
importjava.awt.*;
classSampleSet{
publicstaticvoidmain(String[]args){
Rectangler=newRectangle(100,20);
System.out.println("original:"+r.toString());
modifyWidth(r,newInteger(300));
System.out.println("modified:"+r.toString());
}
staticvoidmodifyWidth(Rectangler,IntegerwidthParam){
FieldwidthField;
IntegerwidthValue;
Classc=r.getClass();
try{
widthField=c.getField("width");
widthField.set(r,widthParam);
}catch(NoSuchFieldExceptione){
System.out.println(e);
}catch(IllegalAccessExceptione){
System.out.println(e);
}
}
}
4。挪用指定的办法
a.创立一个Class对象
b.创立一个办法对象method,getMethod(StringmethodName,Class[])办法
c.调办法对象,method.invoke(object,Object[]),两个参数,第一个是指挪用办法所属于的对象,第二个是传送的值对象列表。
Thesampleprogramthatfollowsshowsyouhowtoinvokeamethoddynamically.TheprogramretrievestheMethodobjectfortheString.concatmethodandthenusesinvoketoconcatenatetwoStringobjects.
//
importjava.lang.reflect.*;
classSampleInvoke{
publicstaticvoidmain(String[]args){
StringfirstWord="Hello";//指定类的实例
StringsecondWord="everybody.";//变元
StringbothWords=append(firstWord,secondWord);
System.out.println(bothWords);
}
publicstaticStringappend(StringfirstWord,StringsecondWord){
Stringresult=null;
Classc=String.class;
Class[]parameterTypes=newClass[]{String.class};
MethodconcatMethod;
Object[]arguments=newObject[]{secondWord};
try{
concatMethod=c.getMethod("concat",parameterTypes);//猎取到办法对象
result=(String)concatMethod.invoke(firstWord,arguments);//挪用
}catch(NoSuchMethodExceptione){
System.out.println(e);
}catch(IllegalAccessExceptione){
System.out.println(e);
}catch(InvocationTargetExceptione){
System.out.println(e);
}
returnresult;
}
}
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 是一种使网页(Web Page)产生生动活泼画面的语言 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 是一种将安全性(Security)列为第一优先考虑的语言 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧
页:
[1]