|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
再说第三点:我并没有提到服务器也要整合,然后是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)与这些框架混在了一起。 |
|