第二个灵魂 发表于 2015-1-18 11:44:46

JAVA网页编程之java反射手艺(一)

令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。java的反射手艺功效非常壮大,收拾一些材料!!

(如需转载,请说明出处!)

Lesson:检测类examingclass

1.RetrievingClassObjects
猎取一个Class对象(metadata)

a,从对象的实例猎取。
Classc=mystery.getClass();//(returnClass)
b,从子类的实例猎取
TextFieldt=newTextField();
Classc=t.getClass();
Classs=c.getSuperclass();
c,晓得类名,则能够把.class到场到名字以后来猎取。
Classc=java.awt.Button.class;
d,假如类名在编译时是未知的,则可使用Class.forName()办法来猎取.
Classc=Class.forName(classString);

2.GettingtheClassName
猎取类称号
c.getName();

比方:
importjava.lang.reflect.*;
importjava.awt.*;

classSampleName{

publicstaticvoidmain(String[]args){
Buttonb=newButton();
printName(b);
}

staticvoidprintName(Objecto){
Classc=o.getClass();
Strings=c.getName();
System.out.println(s);
}
}


3.DiscoveringClassModifiers
检索修正符
a.经由过程getModifiers()办法猎取一个整型标识值。
b.经由过程java.reflect.Modifier对象的isPublic,isAbstract,和isFinal办法判别此值.

比方:
importjava.lang.reflect.*;
importjava.awt.*;

classSampleModifier{

publicstaticvoidmain(String[]args){
Strings=newString();
printModifiers(s);
}

publicstaticvoidprintModifiers(Objecto){
Classc=o.getClass();
intm=c.getModifiers();
if(Modifier.isPublic(m))
System.out.println("public");
if(Modifier.isAbstract(m))
System.out.println("abstract");
if(Modifier.isFinal(m))
System.out.println("final");
}
}


4.FindingSuperclasses
检索父类
比方:
importjava.lang.reflect.*;
importjava.awt.*;

classSampleSuper{

publicstaticvoidmain(String[]args){
Buttonb=newButton();
printSuperclasses(b);
}

staticvoidprintSuperclasses(Objecto){
Classsubclass=o.getClass();
Classsuperclass=subclass.getSuperclass();
while(superclass!=null){
StringclassName=superclass.getName();
System.out.println(className);
subclass=superclass;
superclass=subclass.getSuperclass();
}
}
}


5.IdentifyingtheInterfacesImplementedbyaClass
检索指定类完成的接口
比方:
importjava.lang.reflect.*;
importjava.io.*;

classSampleInterface{

publicstaticvoidmain(String[]args){
try{
RandomAccessFiler=newRandomAccessFile("myfile","r");
printInterfaceNames(r);
}catch(IOExceptione){
System.out.println(e);
}
}

staticvoidprintInterfaceNames(Objecto){
Classc=o.getClass();
Class[]theInterfaces=c.getInterfaces();
for(inti=0;i<theInterfaces.length;i++){
StringinterfaceName=theInterfaces.getName();
System.out.println(interfaceName);
}
}
}
6.ExaminingInterfaces
判断一个类是否是接口

importjava.lang.reflect.*;
importjava.util.*;

classSampleCheckInterface{

publicstaticvoidmain(String[]args){
Classthread=Thread.class;
Classrunnable=Runnable.class;
verifyInterface(thread);
verifyInterface(runnable);
}

staticvoidverifyInterface(Classc){
Stringname=c.getName();
if(c.isInterface()){
System.out.println(name+"isaninterface.");
}else{
System.out.println(name+"isaclass.");
}
}
}



如:c.isInterface()

7.IdentifyingClassFields
找出指定类一切的域成员
每一个数据成员能够用java.reflect.Field来关闭其称号,范例,修正符的汇合。
也能够经由过程响应的办法猎取或设置到该成员的值。

如:
importjava.lang.reflect.*;
importjava.awt.*;

classSampleField{

publicstaticvoidmain(String[]args){
GridBagConstraintsg=newGridBagConstraints();
printFieldNames(g);
}

staticvoidprintFieldNames(Objecto){
Classc=o.getClass();
Field[]publicFields=c.getFields();
for(inti=0;i<publicFields.length;i++){
StringfieldName=publicFields.getName();
ClasstypeClass=publicFields.getType();
StringfieldType=typeClass.getName();
System.out.println("Name:"+fieldName+
",Type:"+fieldType);
}
}
}



8.DiscoveringClassConstructors
检索指定类的机关函数

当创立一个类的实例时,是经由过程检造办法来作的,这类办法能够被重载。
每个机关办法能够用类Constructor来形貌,,包含称号,润色符,参数范例(Class[]),和非常列表。
能够经由过程一个Class的getConstructors办法猎取到该类的Constructor数组。
例程:
importjava.lang.reflect.*;
importjava.awt.*;

classSampleConstructor{

publicstaticvoidmain(String[]args){
Rectangler=newRectangle();
showConstructors(r);
}

staticvoidshowConstructors(Objecto){
Classc=o.getClass();
Constructor[]theConstructors=c.getConstructors();
for(inti=0;i<theConstructors.length;i++){
System.out.print("(");
Class[]parameterTypes=
theConstructors.getParameterTypes();
for(intk=0;k<parameterTypes.length;k++){
StringparameterString=parameterTypes.getName();
System.out.print(parameterString+"");
}
System.out.println(")");
}
}
}





9.ObtainingMethodInformation
检索办法
能够找到从属于一个类的一切办法,经由过程getMethods包括Method数组,进而失掉该办法的前往范例,润色符,办法称号,参数列表
步骤:
a.指定类的ClassObject
b.getMethods()猎取Method[]对象
c,遍历该数组对象

例程:

importjava.lang.reflect.*;
importjava.awt.*;

classSampleMethod{

publicstaticvoidmain(String[]args){
Polygonp=newPolygon();
showMethods(p);
}

staticvoidshowMethods(Objecto){
Classc=o.getClass();
Method[]theMethods=c.getMethods();
for(inti=0;i<theMethods.length;i++){
StringmethodString=theMethods.getName();
System.out.println("Name:"+methodString);
StringreturnString=
theMethods.getReturnType().getName();
System.out.println("ReturnType:"+returnString);
Class[]parameterTypes=theMethods.getParameterTypes();
System.out.print("ParameterTypes:");
for(intk=0;k<parameterTypes.length;k++){
StringparameterString=parameterTypes.getName();
System.out.print(""+parameterString);
}
System.out.println();
}
}
}




因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。

乐观 发表于 2015-1-21 13:43:34

设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧

不帅 发表于 2015-1-24 15:38:38

你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?

小女巫 发表于 2015-2-1 22:55:48

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

因胸联盟 发表于 2015-2-7 15:47:31

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。

灵魂腐蚀 发表于 2015-2-8 20:39:42

Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)

金色的骷髅 发表于 2015-2-26 06:32:39

当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?

透明 发表于 2015-3-8 12:30:44

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

若相依 发表于 2015-3-11 06:11:24

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

深爱那片海 发表于 2015-3-13 12:07:41

是一种语言,用以产生「小应用程序(Applet(s))

变相怪杰 发表于 2015-3-17 22:09:20

是一种为 Internet发展的计算机语言

分手快乐 发表于 2015-3-25 03:31:40

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

飘飘悠悠 发表于 2015-3-25 13:43:19

你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。

冷月葬花魂 发表于 2015-3-26 15:03:36

所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。

简单生活 发表于 2015-3-27 19:11:05

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

爱飞 发表于 2015-4-1 08:12:05

吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧

再见西城 发表于 2015-4-3 23:27:10

你一定会高兴地说,哈哈,原来成为Java高手就这么简单啊!记得Tomjava也曾碰到过一个项目经理,号称Java很简单,只要三个月就可以学会。

蒙在股里 发表于 2015-4-5 12:09:34

是一种语言,用以产生「小应用程序(Applet(s))

第二个灵魂 发表于 2015-4-6 04:11:03

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。

愤怒的大鸟 发表于 2015-4-7 19:04:01

接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
页: [1] 2
查看完整版本: JAVA网页编程之java反射手艺(一)