专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Java教程 » java反射:java反射功能 »正文

java反射:java反射功能

来源: 发布时间:星期五, 2009年4月3日 浏览:0次 评论:0
java反射包(java.lang.reflect)为我们提供个强大功能利用它可以查出个未知类所有:数据字段思路方法构造器下面这个就是个利用reflect包写个简单GUI在文本域里输入java标准类名(如:javax.swing.JButton)按执行按钮即可查出这个类所有信息
B o;Q s6dj
![%T9c7rQ7Ppackage reflectframe;JAVA中文站社区门户+s)@T~k,{

f \/f&R"@HvyhEimport javax.swing.UIManager;JAVA中文站社区门户@Fkm0L-a,S
import java.awt.*;
I*f#usM$e
nI2X(H7@[9{K}+Kpublic Reflect { /*JAVA中文站社区门户 @4UG V4b3A}
boolean packFrame = false;
Hd$d]z/C!]3m_5p/{
`'yIEg//Construct the applicationJAVA中文站社区门户 zO0J5w2DV?h
public Reflect {
`,f)s[OFrame1 frame = Frame1;
RcI k#R8s//Validate frames that have pre sizes
b0h/Ie&r1ST/*Pack frames that have useful preferred size info, e.g. from their layout*/JAVA中文站社区门户Lsc2lA^
(packFrame) {
| Q-P*or)e]frame.pack;
,B*z8I0C5u4z2`8Y}JAVA中文站社区门户"c1MMQy5pd
{
vc#[Qnx8A3RpUia?frame.validate;
}D8K{Fzv}JAVA中文站社区门户 D.f5NL]B2i
//Center the windowJAVA中文站社区门户sC ^0m-L9o5f'C BX
Dimension screenSize = Toolkit.getDefaultToolkit.getScreenSize;JAVA中文站社区门户0Pz ikA.a*`
Dimension frameSize = frame.getSize;JAVA中文站社区门户2b8\6U'|2z
(frameSize.height > screenSize.height) {
Xe4}%QkC p%V-yframeSize.height = screenSize.height;JAVA中文站社区门户"H8A:l;Z#J2?A
}
[*d-Rs'z (frameSize.width > screenSize.width) {
;\ Z+\b5W{"bnmframeSize.width = screenSize.width;
.p"e6f&S\mM uDx}
p2d:w0v)S|o5wframe.Location((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2);
:pv+]hLframe.Visible(true);JAVA中文站社区门户,i)hS7hGT
}JAVA中文站社区门户c6n9IPM2O.N
//Main method
k&G/rw7{U4~bpublic void (String args) {
;z Vq9fo.}~8C9U a2{try {JAVA中文站社区门户j B/jjHG0|v
UIManager.LookAndFeel(UIManager.getLookAndFeelClassName);JAVA中文站社区门户0En/pJ EA9HZ+W
}
7d(^5b5Nx6O Qcatch(Exception e) {
0m&LngIRAee.prStackTrace;JAVA中文站社区门户b3r+xa!A@
}JAVA中文站社区门户 \&e;d.L)bX%}
Reflect;JAVA中文站社区门户c2[ Afp.u4D
}JAVA中文站社区门户 ~U(mxc6v U
}
X+a-B _7H.jR/*主界面类*/JAVA中文站社区门户)IM8Q{&ii8kS:`&H
package reflectframe;
Rsz?*OY R'k#\JA j9zJAVA中文站社区门户4JR$UFl^'o/T
import java.awt.*;
E;GX*m w.\import java.awt.event.*;JAVA中文站社区门户^{:J],E0tC
import javax.swing.*;JAVA中文站社区门户6{6T!lT1@0m
import com.borland.jbcl.layout.*;JAVA中文站社区门户&[.D0f+j J Q qS(Bw
import javax.swing.border.*;JAVA中文站社区门户W-zC%@4w!jJ
import java.lang.reflect.*;
v}'k;h5] [0h$yJAVA中文站社区门户9t.J,tb8OcY
public Frame1 extends JFrame {JAVA中文站社区门户;w"Tq8~5t
JPanel contentPane;
B A7a n:X5Y,_5@EJTextField jTextField1 = JTextField;
lA`3lhOW*T]%HJButton jButton1 = JButton;JAVA中文站社区门户!i\S#~6sLf
JLabel jLabel1 = JLabel;JAVA中文站社区门户tDF4l C2Tm0|y MA#h
JScrollPane jScrollPane1 = JScrollPane;JAVA中文站社区门户ivW7eKf
JTextArea jTextArea1 = JTextArea;JAVA中文站社区门户.J6K(O!S5D
TitledBorder titledBorder1;
fJ;b7W3nJ3s7IJLabel jLabel2 = JLabel;JAVA中文站社区门户^ G|?e h!V&Z#i
JPanel jPanel1 = JPanel;
3p#V"H/])[TJPanel jPanel2 = JPanel;JAVA中文站社区门户_.FtE:A2tY%n"V
BorderLayout borderLayout2 = BorderLayout;JAVA中文站社区门户 R"Y A1r3Y0Wt-CE:^
BorderLayout borderLayout1 = BorderLayout;JAVA中文站社区门户r;_S/zqds6W Fh G X^
XYLayout xYLayout1 = XYLayout;JAVA中文站社区门户^yyGf9|L8?
JAVA中文站社区门户Ta THa3^i:A
//Construct the frameJAVA中文站社区门户2}"]o-X t4tzq
public Frame1 {JAVA中文站社区门户vaFY0}$?w0M
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
l1A'lF*C4mtry {JAVA中文站社区门户 gIg%e1{.K4w-y
jbInit;JAVA中文站社区门户 I!vZ2Hj7SI{wL:{
}JAVA中文站社区门户8Z M9Jp[JG
catch(Exception e) {
k ro Of3m9v@\q1Ne.prStackTrace;JAVA中文站社区门户.ZBowxqF n
}JAVA中文站社区门户HE0s"GK G~Ay_Q
Toolkit tk=Toolkit.getDefaultToolkit;
*B:Jd!q5XXqu7LImage img=tk.getImage("status.g");JAVA中文站社区门户&@Ado6o%q{l
Cursor cu=tk.createCustomCursor(img, Po(10,10),"stick");
sT$i%OR ~5~7EJ%[this.Cursor(cu);
)\:{Gwg5{8T5h(R}JAVA中文站社区门户 L~!?u G:v%~
//Component initialization
2P;KfIYUa+i/Aprivate void jbInit throws Exception {
.N7cA\$|h9` ]contentPane = (JPanel) this.getContentPane;
"e7M[S/l&? SN S z7a ztitledBorder1 = TitledBorder(BorderFactory.createEtchedBorder(Color.white, Color(134, 134, 134)),"结果");
fx ?Va)N"HojTextField1.Font( java.awt.Font("Dialog", 0, 15));JAVA中文站社区门户 j2J;f5D3c:ih!C-eJ-}h
jTextField1.SelectedTextColor(Color.white);
-c0mWor"^h0Dn1ujTextField1.Text("");JAVA中文站社区门户@"|j%w-[hy
contentPane.Layout(borderLayout1);JAVA中文站社区门户| PaHz"{
this.Size( Dimension(450, 361));JAVA中文站社区门户?Gh&ls!_!A1X1e4a
this.Title("Reflect");
_.`WVwthis.addWindowListener( Frame1_this_windowAdapter(this));
il+?P;iVyPjButton1.Text("执行");JAVA中文站社区门户3V!{+} ^4~
jButton1.addActionListener( Frame1_jButton1_actionAdapter(this));JAVA中文站社区门户[u)Qu [ k+G6M oun
jLabel1.Font( java.awt.Font("Dialog", 0, 12));JAVA中文站社区门户Ph;xa [:mQ
jLabel1.Text("类名:");JAVA中文站社区门户G)H$fY*evq
jTextArea1.Font( java.awt.Font("Dialog", 0, 15));JAVA中文站社区门户MG_ sV
jTextArea1.Editable(false);JAVA中文站社区门户i9l"M]+V3zX dY
jTextArea1.Text("");
%gOkq8N9MMljScrollPane1.Border(titledBorder1);
Qr/[J5m CjLabel2.Text(" ");JAVA中文站社区门户[ {,p"j)t @!h3xd2ZK |
jPanel1.Layout(xYLayout1);
C#a5y3HbajPanel2.Layout(borderLayout2);JAVA中文站社区门户nKF(KA9y ]N
jPanel1.add(jTextField1, XYConstras(55, 5, 304, -1));
^ ob1[E f-pbjPanel1.add(jLabel1, XYConstras(16, 8, -1, -1));
%r&J$ULv3pjPanel1.add(jButton1, XYConstras(374, 6, -1, -1));
+A5sU*`A7D1nOjPanel2.add(jScrollPane1);
9T{/Lb#t0`5m6g6mcontentPane.add(jPanel1, BorderLayout.NORTH);JAVA中文站社区门户9G\nG ] Cikw[`
contentPane.add(jPanel2, BorderLayout.CENTER);
"UvYEHzjScrollPane1.getViewport.add(jTextArea1, null);JAVA中文站社区门户KbS#UI5j9A:O*]
this.getRootPane.DefaultButton(jButton1);
+L:GcP:A)W}
1x&wB W*J0M7A-q:[6np//Overridden so we can exit when window is closed
/d1J}D^-e$m7ZN` nprotected void processWindowEvent(WindowEvent e) {
T:~ z'CPH X\(hsuper.processWindowEvent(e);
MJU SZ}V J (e.getID WindowEvent.WINDOW_CLOSING) {
n-U+p_.D{:p.exit(0);
.X4lI;LF f}
r%b ?-@'H-B#g7Z}
]y8`s,lfv(_JAVA中文站社区门户8mDH*^0bM ?
void jButton1_actionPerformed(ActionEvent e) {
(W1Q:u2\v5I2@8tzString Name=jTextField1.getText;JAVA中文站社区门户,fD nB|0[.d.g8^
StringBuffer buf= StringBuffer;
y#}g&X4V'utw ctry{
2Sk!?wp7wClass c = Class.forName(Name);JAVA中文站社区门户Uv%U v&v;LS.G
String superName=c.getSuper.getName; /*得到该类超类*/JAVA中文站社区门户zNk*q"{l
buf.append(Name+" extends "+superName+" { ");JAVA中文站社区门户#p!q/?U5P&m4ul
buf.append(" * 字段 * ");
i#c(D|0c_1x7Pbuf.append(getFields(c));JAVA中文站社区门户{"q p;vk
buf.append(" * 构造器 * ");JAVA中文站社区门户6Q&Fgl1D
buf.append(getConstructors(c));JAVA中文站社区门户x oU:I Zr
buf.append(" * 思路方法 * ");JAVA中文站社区门户9j(~$ez^,N"{d
buf.append(getMethods(c));
.K?t ix1x2Gbuf.append("} ");
3i F:S#f)x"i#L}catch(Exception et){
k'@4] S^uJOptionPane.showMessageDialog(this,"没找到该类:"+et.getMessage);}
A y JH0x5cz8DKjTextArea1.Text(buf.toString);
u3U;D r {1j1r}
0wt'B}3d'h0Uk s@,Fpublic String getFields(Class c){ /*得到该类所有数据字段*/JAVA中文站社区门户yg yGDZ*p
String str="";JAVA中文站社区门户/\a*_rd
Field fields=c.getDeclaredFields;
3D5K"Xg}/PM'{for( i=0;i<fields.length;i){JAVA中文站社区门户7VYlJObf
Field f=fields;JAVA中文站社区门户N+^LRvq3Q#a
strModier.toString(f.getModiers)+" "; /*数据字段修饰符*/JAVA中文站社区门户4V{.KD&f&\c
Class type=f.getType;JAVA中文站社区门户8t[#z6]:j
strtype.getName+" "; /*数据字段名*/
9E&g$h2G R'QK7{*M:rstrf.getName+"; ";
L SX w.L_Vk3T2U}JAVA中文站社区门户P4?4j5BU
str;JAVA中文站社区门户\;V L4\v%UG3Z2`4w
}
:cP Y;BE1k6v3XS mV!qpublic String getConstructors(Class c){ /*得到构造器*/JAVA中文站社区门户 kEQ0Zv
String str="";JAVA中文站社区门户;l6sS_z3^
Constructor cons=c.getDeclaredConstructors;
8_+b6B W#GK'Mfor( i=0;i<cons.length;i){
E!NWo"HEConstructor c1=cons;
6sJHp!DstrModier.toString(c1.getModiers)+" "; /*得到修饰符*/
] OEX5L8vLT,|"v1h7\strc1.getName+"("; /*c1.getName构造器名*/
.egY1dB9{0TT_{Class cla=c1.getParameterTypes;
"W Y7dU+p,Q5f FGX,hfor( j=0;j<cla.length;j){ /*得到构造器参数*/
o8\_EF2E(j>0){JAVA中文站社区门户zPJrL3yg
(jcla.length-1)str cla[j].getName;JAVA中文站社区门户0V_^APF B
str cla[j].getName + ", ";JAVA中文站社区门户 L_|o5X'G%G
}JAVA中文站社区门户 G2k*q6S#Le
}JAVA中文站社区门户7d/r_vIN/fJe}Q8E
str"); ";
8? x+u*o$d}JAVA中文站社区门户#[1HX,sq#B
str;
PCi,{I:[+G}
u:e%`v-D.Kpublic String getMethods(Class c){ /*得到类里所有思路方法*/
p!o"x&A%fj;K$KString str="";JAVA中文站社区门户-P VfB3RT
Method m=c.getMethods;JAVA中文站社区门户8d&{,L g*EH ~+n
for( i=0;i<m.length;i){
h%] [ }OstrModier.toString(m.getModiers)+" "; /*思路方法修饰符*/
\%v;kh ['l0@#ZYFGHClass cla=m.getReturnType;JAVA中文站社区门户B x;Ss6w9kLj
strcla.getName+" "; /*cla.getName()是思路方法名*/
7M5JS$I-l![3pstrm.getName+"(";
Ng$~1w [ Z%VClass clb=m.getParameterTypes;
}S'ctZr W7{Dfor( j=0;j<clb.length;j){ /*思路方法所有参数JAVA中文站社区门户4W4@MT%s b;H!|
(j>0){
P s5Q9FIM O o (j clb.length - 1)str clb[j].getName;
.c(`4_RUzs str clb[j].getName + ", ";
?YrD8X}
(Cnc4`'h(F%f5c}}JAVA中文站社区门户*I"KS7xd0~ y"J
str"); ";JAVA中文站社区门户&z^bHO'[
}
4qi,T j(Ls%j[k str;JAVA中文站社区门户 I1?trw a$g7R{
}
;uZd9VRV0U}
{o7t)v^P r]JAVA中文站社区门户K R5T,\{q.m"{
Frame1_jButton1_actionAdapter implements java.awt.event.ActionListener {JAVA中文站社区门户3| _&qV.|a z
Frame1 adaptee;JAVA中文站社区门户W3WM o2H
JAVA中文站社区门户"JF@5g?*QL$X
Frame1_jButton1_actionAdapter(Frame1 adaptee) {
H#{ X`8eV$HG+v'@this.adaptee = adaptee;
{v \O%W}
(tD-I-Q6iP"d1l4Bpublic void actionPerformed(ActionEvent e) {JAVA中文站社区门户)szod!yl3Cx
adaptee.jButton1_actionPerformed(e);
Mo_/E%U C4Tc}JAVA中文站社区门户!a'v7\2M Y_2@ w
}
p'[ q7n/v J[n'd'T \(jJAVA中文站社区门户])DTmY2Z.XR
Frame1_this_windowAdapter extends java.awt.event.WindowAdapter {
GRGt/T:A%v` eRFrame1 adaptee;JAVA中文站社区门户q8Z.R.Y2b vzuwD
JAVA中文站社区门户6E?IAh M
Frame1_this_windowAdapter(Frame1 adaptee) {
*mz8S2YM Drthis.adaptee = adaptee;JAVA中文站社区门户Q|;@9u}k
}JAVA中文站社区门户{RO)Zw\ s*D
}
Vj5b6w Tz反射功能在javabeans中得到最为充分利用对beans能力进行查询 


TAG: Java JAVA java 反射 功能
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: