ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲免费视频网站,国产成人av一区二区三区在线,黄色av一区http://www.aygfsteel.com/Swing/category/23523.html<font size="3"><br><font color="#669933">天行å? 君子以自å¼ÞZ¸æ?lt;/font><br><br></font>zh-cnMon, 06 Aug 2007 05:46:38 GMTMon, 06 Aug 2007 05:46:38 GMT60J2EE学习http://www.aygfsteel.com/Swing/archive/2007/07/26/132464.htmlSunSunThu, 26 Jul 2007 02:28:00 GMThttp://www.aygfsteel.com/Swing/archive/2007/07/26/132464.htmlhttp://www.aygfsteel.com/Swing/comments/132464.htmlhttp://www.aygfsteel.com/Swing/archive/2007/07/26/132464.html#Feedback0http://www.aygfsteel.com/Swing/comments/commentRss/132464.htmlhttp://www.aygfsteel.com/Swing/services/trackbacks/132464.html        æœ€˜q‘出差,闲来无事åQŒå†³å®šè¦æŠŠweb开发方面的知识再综合学习一下,ž®½ç®¡ä¹Ÿä¸€ç›´åœ¨åšè¿™ä¸ªï¼Œä¸è¿‡æ„Ÿè§‰çŸ¥è¯†ä¸å¤ª¾pȝ»ŸåQŒåŸº¼‹€çŸ¥è¯†æŽŒæ¡çš„不太好åQŒæ‰€ä»¥è¦åˆ©ç”¨˜q™æ®µæ—‰™—´ž®†åŸº¼‹€çŸ¥è¯†¾pȝ»Ÿçš„学习一下,ä¸ÞZ»¥åŽçš„工作做准备,æ ÒŽ®ä¸€ä¸ªæ•™½E‹åó@序渐˜q›çš„学习åQŒä¸‹é¢æ˜¯å­¦ä¹ è®¡åˆ’ã€?br>
学习计划åQ?/font>
序号 名称 完成情况 æ—‰™—´å®‰æŽ’
1 Html基础知识 完成 1.5�/td>
2 Html高çñ”知识 完成 2å¤?/td>
3 CSS知识 完成 1.5�/td>
4 JavaScript语法 未完�/td> 3�/td>
5 DOM对象模型 未完�/td> 2�/td>

每天记录学习情况åQŒå°±å½“作是自己做一下监ç?img height=20 src="http://www.aygfsteel.com/Emoticons/QQ/17.gif" width=20 border=0>


Html基础知识学习收获
1、HTML的全局架构标签
 <body>
 text:用户讄¡½®¾|‘页中的文本颜色
 link:用于讄¡½®­‘…链接的颜色
 alink:用于讑֮šé¼ æ ‡æ»‘过旉™“¾æŽ¥çš„颜色
 vlink:用于讑֮šè®‰K—®˜q‡çš„链接的颜è‰?br> background:讄¡½®èƒŒæ™¯å›„¡‰‡ 墙纸
 bgcolor:用于讄¡½®èƒŒæ™¯é¢œè‰²,如果讑֮šbackground 则这个属性会失效
 margin:用于讑֮š¾|‘页昄¡¤ºç”»é¢ä¸Žæµè§ˆå™¨è¾¹ç¼˜çš„é—´éš?单位为像ç´?left/top

 

2、格式标½{?br> <nobr>:讄¡½®é•¿æ–‡æœ¬ä¸è‡ªåŠ¨æ¢è¡Œæ˜„¡¤º(加滚动条)åQŒé»˜è®¤çš„æ˜¯è‡ªåŠ¨æ¢è¡?br> <blockquote>:内容¾~©è¿›æ˜„¡¤ºåQŒå¯ä»¥åŠ å¤šä¸ª
 <center>:æ°´åã^方向居中昄¡¤º
 <marquee>:¿UÕdŠ¨æ˜„¡¤ºå…¶ä¸­çš„内å®?br> <dl><dt><dd>:列表昄¡¤º
 <ol><ul><li>:ol带数字列è¡?ul用圆ç‚ÒŽ ‡½Cºåˆ—表项
 <pre>:昄¡¤ºå…¶ä¸­æ–‡æœ¬çš„æ‰€æœ‰ç©ºæ ¼å’Œæ¢è¡Œ

3、超链接标签
 <a href="mailto:xx@xx.com"></a>
 target:‹¹è§ˆå™¨åœ¨å“ªæ˜¾½Cºé¡µé?整个™åµé¢˜q˜æ˜¯frame ex)_black 打开新窗å?br> è‡ªåŠ¨å®šä½:name属æ€?定义定位标记<a href="a.html#mark"></a>
 href="#":表示本页é?br> href="":http下打开目录下的默认¾|‘页 本地则打开目录文äšgå¤?br>4、URL
 mailto URL:½Iºæ ¼ç”?0%表示
 URL¾~–码:
5、图像标½{?br> å±žæ€?alt align border
 æ˜„¡¤º˜q‡ç¨‹:
 è®¡æ•°˜q‡ç¨‹:讉K—®img src=" hr:创徏水åã^¾U?br> å›‘Öƒåœ°å›¾:比如地图省䆾区域åQŒçƒ­ç‚¹åŒºåŸ?用map area来定ä¹?br>



]]>
java 反射机制详解http://www.aygfsteel.com/Swing/archive/2007/07/05/128263.htmlSunSunThu, 05 Jul 2007 02:26:00 GMThttp://www.aygfsteel.com/Swing/archive/2007/07/05/128263.htmlhttp://www.aygfsteel.com/Swing/comments/128263.htmlhttp://www.aygfsteel.com/Swing/archive/2007/07/05/128263.html#Feedback3http://www.aygfsteel.com/Swing/comments/commentRss/128263.htmlhttp://www.aygfsteel.com/Swing/services/trackbacks/128263.htmlJava 的反ž®„机制是使其å…ähœ‰åŠ¨æ€ç‰¹æ€§çš„éžå¸¸å…³é”®çš„ä¸€¿UæœºåˆÓž¼Œä¹Ÿæ˜¯åœ¨JavaBean 中广泛应用的一¿Uç‰¹æ€§ã€?
˜qç”¨JavaBean 的最常见的问题是åQšæ ¹æ®æŒ‡å®šçš„¾cÕdåQŒç±»å­—段名和所对应的数据,得到该类的实例,下面的一个例子演½CÞZº†˜q™ä¸€å®žçްã€?
-|Base.java //抽象基类
|Son1.java //基类扩展1
|Son2.java //基类扩展2
|Util.java
/**
* @author metaphy
* create 2005-4-14 9:06:56
* 说明åQ?
*/
åQ?åQ‰Base.java 抽象基类只是一个定ä¹?
public abstract class Base {
}
åQ?åQ‰Son1.java /Son2.java 是已¾lå®žçŽ°çš„JavaBean
public class Son1 extends Base{
private int id ;
private String name ;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public void son1Method(String s){
System.out.println(s) ;
}
}
åQ?åQ?
public class Son2 extends Base{
private int id;
private double salary;

public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
}
åQ?åQ‰Util.java 演示了如何根据指定的¾cÕdåQŒç±»å­—段名和所对应的数据,得到一个类的实ä¾?
import java.lang.reflect.Method;
public class Util {
//此方法的最大好处是没有¾cÕdSon1,Son2 可以通过参数来指定,½E‹åºé‡Œé¢æ ÒŽœ¬ä¸ç”¨å‡ºçް
public static Base convertStr2ServiceBean(String beanName,String fieldSetter,String paraValue){
Base base = null ;
try {
Class cls = Class.forName(beanName) ;
base = (Base)cls.newInstance() ;
Class[] paraTypes = new Class[]{String.class };
Method method = cls.getMethod(fieldSetter, paraTypes) ;
String[] paraValues = new String[]{paraValue} ;
method.invoke(base, paraValues) ;
} catch (Throwable e) {
System.err.println(e);
}
return base ;
}


public static void main(String[] args){
Son1 son1 =(Son1) Util.convertStr2ServiceBean("trying.reflect.Son1","setName","wang da sha");
System.out.println("son1.getName() :"+son1.getName()) ;
}
}
//调用¾l“æžœåQ?
//son1.getName() :wang da sha

谢谢åQå¸Œæœ›èƒ½¾l™å¤§å®¶ä¸€ç‚¹å¯å‘!
åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼åQï¼
附:
//下面˜q™ç¯‡æ–‡æ¡£æ¥æºäºŽInternetåQŒä½œè€…不è¯?
Reflection æ˜?Java ½E‹åºå¼€å‘语­a€çš„特征之一åQŒå®ƒå…è®¸˜qè¡Œä¸­çš„ Java ½E‹åºå¯¹è‡ªíw«è¿›è¡Œæ£€æŸ¥ï¼Œæˆ–者说“自审”åQŒåƈ能直接操作程序的内部属性。例如,使用它能获得 Java ¾cÖM¸­å„成员的名称òq¶æ˜¾½Cºå‡ºæ¥ã€?
Java 的这一能力在实际应用中也许用得不是很多åQŒä½†æ˜¯åœ¨å…¶å®ƒçš„程序设计语­a€ä¸­æ ¹æœ¬å°±ä¸å­˜åœ¨è¿™ä¸€ç‰ÒŽ€§ã€‚例如,Pascal、C 或è€?C++ 中就没有办法在程序中获得函数定义相关的信息ã€?
JavaBean æ˜?reflection 的实际应用之一åQŒå®ƒèƒ½è®©ä¸€äº›å·¥å…·å¯è§†åŒ–的操作èÊY件组件。这些工具通过 reflection 动态的载入òq¶å–å¾?Java ¾l„äšg(¾c? 的属性ã€?
1. 一个简单的例子
考虑下面˜q™ä¸ª½Ž€å•的例子åQŒè®©æˆ‘们看看 reflection 是如何工作的ã€?
import java.lang.reflect.*;
public class DumpMethods {
public static void main(String args[]) {
try {
Class c = Class.forName(args[0]);
Method m[] = c.getDeclaredMethods();
for (int i = 0; i < m.length; i++)
System.out.println(m[i].toString());
} catch (Throwable e) {
System.err.println(e);
}
}
}
按如下语句执行:
java DumpMethods java.util.Stack
它的¾l“果输出为:
public java.lang.Object java.util.Stack.push(java.lang.Object)
public synchronized java.lang.Object java.util.Stack.pop()
public synchronized java.lang.Object java.util.Stack.peek()
public boolean java.util.Stack.empty()
public synchronized int java.util.Stack.search(java.lang.Object)
˜q™æ ·ž®±åˆ—å‡ÞZº†java.util.Stack ¾cȝš„各方法名以及它们的限制符和返回类型ã€?
˜q™ä¸ª½E‹åºä½¿ç”¨ Class.forName 载入指定的类åQŒç„¶åŽè°ƒç”?getDeclaredMethods 来获取这个类中定义了的方法列表。java.lang.reflect.Methods 是用来描˜q°æŸä¸ªç±»ä¸­å•个方法的一个类ã€?
2.开始ä‹Éç”?Reflection
用于 reflection 的类åQŒå¦‚ MethodåQŒå¯ä»¥åœ¨ java.lang.relfect 包中扑ֈ°ã€‚ä‹É用这些类的时候必™å»è¦éµåó@三个步骤åQšç¬¬ä¸€æ­¥æ˜¯èŽ·å¾—ä½ æƒ³æ“ä½œçš„ç±»çš?java.lang.Class 对象。在˜qè¡Œä¸­çš„ Java ½E‹åºä¸­ï¼Œç”?java.lang.Class ¾cÀL¥æè¿°¾cÕd’ŒæŽ¥å£½{‰ã€?
下面ž®±æ˜¯è޷得䏀ä¸?Class 对象的方法之一åQ?
Class c = Class.forName("java.lang.String");
˜q™æ¡è¯­å¥å¾—到一ä¸?String ¾cȝš„¾cÕd¯¹è±¡ã€‚还有另一¿Uæ–¹æ³•,如下面的语句åQ?
Class c = int.class;
或�
Class c = Integer.TYPE;
它们可获得基本类型的¾cÖM¿¡æ¯ã€‚其中后一¿Uæ–¹æ³•中讉K—®çš„æ˜¯åŸºæœ¬¾cÕdž‹çš„封装类 (å¦?Integer) 中预先定义好çš?TYPE 字段ã€?
½W¬äºŒæ­¥æ˜¯è°ƒç”¨è¯¸å¦‚ getDeclaredMethods 的方法,以取得该¾cÖM¸­å®šä¹‰çš„æ‰€æœ‰æ–¹æ³•的列表ã€?
一旦取得这个信息,ž®±å¯ä»¥è¿›è¡Œç¬¬ä¸‰æ­¥äº†â€”—ä‹Éç”?reflection API 来操作这些信息,如下面这ŒDµä»£ç ï¼š
Class c = Class.forName("java.lang.String");
Method m[] = c.getDeclaredMethods();
System.out.println(m[0].toString());
它将以文本方式打印出 String 中定义的½W¬ä¸€ä¸ªæ–¹æ³•的原型ã€?
在下面的例子中,˜q™ä¸‰ä¸ªæ­¥éª¤å°†ä¸ÞZ‹Éç”?reflection 处理ç‰ÒŽ®Šåº”用½E‹åºæä¾›ä¾‹è¯ã€?
模拟 instanceof 操作½W?
得到¾cÖM¿¡æ¯ä¹‹åŽï¼Œé€šå¸¸ä¸‹ä¸€ä¸ªæ­¥éª¤å°±æ˜¯è§£å†›_…³äº?Class 对象的一些基本的问题。例如,Class.isInstance æ–ÒŽ³•可以用于模拟 instanceof 操作½W¦ï¼š
class A {
}
public class instance1 {
public static void main(String args[]) {
try {
Class cls = Class.forName("A");
boolean b1 = cls.isInstance(new Integer(37));
System.out.println(b1);
boolean b2 = cls.isInstance(new A());
System.out.println(b2);
} catch (Throwable e) {
System.err.println(e);
}
}
}
在这个例子中创徏了一ä¸?A ¾cȝš„ Class 对象åQŒç„¶åŽæ£€æŸ¥ä¸€äº›å¯¹è±¡æ˜¯å¦æ˜¯ A 的实例。Integer(37) 不是åQŒä½† new A() 是ã€?
3.扑ևº¾cÈš„æ–ÒŽ³•
扑ևºä¸€ä¸ªç±»ä¸­å®šä¹‰äº†äº›ä»€ä¹ˆæ–¹æ³•,˜q™æ˜¯ä¸€ä¸ªéžå¸¸æœ‰ä»·å€ég¹Ÿéžå¸¸åŸºç¡€çš?reflection 用法。下面的代码ž®±å®žçŽîCº†˜q™ä¸€ç”¨æ³•åQ?
import java.lang.reflect.*;
public class method1 {
private int f1(Object p, int x) throws NullPointerException {
if (p == null)
throw new NullPointerException();
return x;
}
public static void main(String args[]) {
try {
Class cls = Class.forName("method1");
Method methlist[] = cls.getDeclaredMethods();
for (int i = 0; i < methlist.length; i++) {
Method m = methlist[i];
System.out.println("name = " + m.getName());
System.out.println("decl class = " + m.getDeclaringClass());
Class pvec[] = m.getParameterTypes();
for (int j = 0; j < pvec.length; j++)
System.out.println("param #" + j + " " + pvec[j]);
Class evec[] = m.getExceptionTypes();
for (int j = 0; j < evec.length; j++)
System.out.println("exc #" + j + " " + evec[j]);
System.out.println("return type = " + m.getReturnType());
System.out.println("-----");
}
} catch (Throwable e) {
System.err.println(e);
}
}
}
˜q™ä¸ª½E‹åºé¦–先取得 method1 ¾cÈš„æè¿°åQŒç„¶åŽè°ƒç”?getDeclaredMethods 来获取一¾pÕdˆ—çš?Method 对象åQŒå®ƒä»¬åˆ†åˆ«æ˜qîCº†å®šä¹‰åœ¨ç±»ä¸­çš„æ¯ä¸€ä¸ªæ–¹æ³•,包括 public æ–ÒŽ³•、protected æ–ÒŽ³•、package æ–ÒŽ³•å’?private æ–ÒŽ³•½{‰ã€‚如果你在程序中使用 getMethods 来代æ›?getDeclaredMethodsåQŒä½ ˜q˜èƒ½èŽ·å¾—¾l§æ‰¿æ¥çš„各个æ–ÒŽ³•的信息ã€?
取得äº?Method 对象列表之后åQŒè¦æ˜„¡¤º˜q™äº›æ–ÒŽ³•的参数类型、异常类型和˜q”回值类型等ž®×ƒ¸éš¾äº†ã€‚这些类型是基本¾cÕdž‹˜q˜æ˜¯¾cȝ±»åž‹ï¼Œéƒ½å¯ä»¥ç”±æè¿°¾cȝš„对象按顺序给出ã€?
输出的结果如下:
name = f1
decl class = class method1
param #0 class java.lang.Object
param #1 int
exc #0 class java.lang.NullPointerException
return type = int
-----
name = main
decl class = class method1
param #0 class [Ljava.lang.String;
return type = void
-----

4.获取构造器信息
获取¾cÀLž„造器的用法与上述获取æ–ÒŽ³•的用法类ä¼û|¼Œå¦‚:
import java.lang.reflect.*;
public class constructor1 {
public constructor1() {
}
protected constructor1(int i, double d) {
}
public static void main(String args[]) {
try {
Class cls = Class.forName("constructor1");
Constructor ctorlist[] = cls.getDeclaredConstructors();
for (int i = 0; i < ctorlist.length; i++) {
Constructor ct = ctorlist[i];
System.out.println("name = " + ct.getName());
System.out.println("decl class = " + ct.getDeclaringClass());
Class pvec[] = ct.getParameterTypes();
for (int j = 0; j < pvec.length; j++)
System.out.println("param #" + j + " " + pvec[j]);
Class evec[] = ct.getExceptionTypes();
for (int j = 0; j < evec.length; j++)
System.out.println("exc #" + j + " " + evec[j]);
System.out.println("-----");
}
} catch (Throwable e) {
System.err.println(e);
}
}
}
˜q™ä¸ªä¾‹å­ä¸­æ²¡èƒ½èŽ·å¾—è¿”å›žç±»åž‹çš„ç›¸å…³ä¿¡æ¯åQŒé‚£æ˜¯å› ä¸ºæž„造器没有˜q”回¾cÕdž‹ã€?
˜q™ä¸ª½E‹åº˜qè¡Œçš„结果是åQ?
name = constructor1
decl class = class constructor1
-----
name = constructor1
decl class = class constructor1
param #0 int
param #1 double
-----
5.获取¾cȝš„字段(åŸ?
扑ևºä¸€ä¸ªç±»ä¸­å®šä¹‰äº†å“ªäº›æ•°æ®å­—段也是可能的,下面的代码就在干˜q™ä¸ªäº‹æƒ…åQ?

import java.lang.reflect.*;
public class field1 {
private double d;
public static final int i = 37;
String s = "testing";
public static void main(String args[]) {
try {
Class cls = Class.forName("field1");
Field fieldlist[] = cls.getDeclaredFields();
for (int i = 0; i < fieldlist.length; i++) {
Field fld = fieldlist[i];
System.out.println("name = " + fld.getName());
System.out.println("decl class = " + fld.getDeclaringClass());
System.out.println("type = " + fld.getType());
int mod = fld.getModifiers();
System.out.println("modifiers = " + Modifier.toString(mod));
System.out.println("-----");
}
} catch (Throwable e) {
System.err.println(e);
}
}
}
˜q™ä¸ªä¾‹å­å’Œå‰é¢é‚£ä¸ªä¾‹å­éžå¸¸ç›¸ä¼¹{€‚例中ä‹É用了一个新东西 ModifieråQŒå®ƒä¹Ÿæ˜¯ä¸€ä¸?reflection ¾c»ï¼Œç”¨æ¥æè¿°å­—段成员的修饰语åQŒå¦‚“private int”。这些修饰语自èín由整数描˜qŽÍ¼Œè€Œä¸”使用 Modifier.toString 来返回以“官方”™åºåºæŽ’列的字½W¦ä¸²æè¿° (å¦?#8220;static”åœ?#8220;final”之前)。这个程序的输出是:
name = d
decl class = class field1
type = double
modifiers = private
-----
name = i
decl class = class field1
type = int
modifiers = public static final
-----
name = s
decl class = class field1
type = class java.lang.String
modifiers =
-----
和获取方法的情况一下,获取字段的时候也可以只取得在当前¾cÖM¸­ç”Ïx˜Žäº†çš„字段信息 (getDeclaredFields)åQŒæˆ–者也可以取得父类中定义的字段 (getFields) ã€?

6.æ ÒŽ®æ–ÒŽ³•的名¿U°æ¥æ‰§è¡Œæ–ÒŽ³•
文本到这里,所丄¡š„例子无一例外都与如何获取¾cȝš„信息有关。我们也可以ç”?reflection 来做一些其它的事情åQŒæ¯”如执行一个指定了名称的方法。下面的½CÞZ¾‹æ¼”示了这一操作åQ?
import java.lang.reflect.*;
public class method2 {
public int add(int a, int b) {
return a + b;
}
public static void main(String args[]) {
try {
Class cls = Class.forName("method2");
Class partypes[] = new Class[2];
partypes[0] = Integer.TYPE;
partypes[1] = Integer.TYPE;
Method meth = cls.getMethod("add", partypes);
method2 methobj = new method2();
Object arglist[] = new Object[2];
arglist[0] = new Integer(37);
arglist[1] = new Integer(47);
Object retobj = meth.invoke(methobj, arglist);
Integer retval = (Integer) retobj;
System.out.println(retval.intvalue());
} catch (Throwable e) {
System.err.println(e);
}
}
}
假如一个程序在执行的某处的时候才知道需要执行某个方法,˜q™ä¸ªæ–ÒŽ³•的名¿U°æ˜¯åœ¨ç¨‹åºçš„˜qè¡Œ˜q‡ç¨‹ä¸­æŒ‡å®šçš„ (例如åQŒJavaBean 开发环境中ž®×ƒ¼šåšè¿™æ ïLš„äº?åQŒé‚£ä¹ˆä¸Šé¢çš„½E‹åºæ¼”示了如何做到ã€?
上例中,getMethod 用于查找一个具有两个整型参æ•îC¸”åäØ“ add 的方法。找到该æ–ÒŽ³•òq¶åˆ›å»ÞZº†ç›¸åº”çš?Method 对象之后åQŒåœ¨æ­£ç¡®çš„对象实例中执行它。执行该æ–ÒŽ³•的时候,需要提供一个参数列表,˜q™åœ¨ä¸Šä¾‹ä¸­æ˜¯åˆ†åˆ«åŒ…装了整æ•?37 å’?47 的两ä¸?Integer 对象。执行方法的˜q”回的同æ äh˜¯ä¸€ä¸?Integer 对象åQŒå®ƒž®è£…了返回å€?84ã€?
7.创徏新的对象
对于构造器åQŒåˆ™ä¸èƒ½åƒæ‰§è¡Œæ–¹æ³•那栯‚¿›è¡Œï¼Œå› äؓ执行一个构造器ž®±æ„å‘³ç€åˆ›å¾äº†ä¸€ä¸ªæ–°çš„对è±?(准确的说åQŒåˆ›å»ÞZ¸€ä¸ªå¯¹è±¡çš„˜q‡ç¨‹åŒ…括分配内存和构造对è±?ã€‚æ‰€ä»¥ï¼Œä¸Žä¸Šä¾‹æœ€ç›æ€¼¼çš„例子如下:
import java.lang.reflect.*;
public class constructor2 {
public constructor2() {
}
public constructor2(int a, int b) {
System.out.println("a = " + a + " b = " + b);
}
public static void main(String args[]) {
try {
Class cls = Class.forName("constructor2");
Class partypes[] = new Class[2];
partypes[0] = Integer.TYPE;
partypes[1] = Integer.TYPE;
Constructor ct = cls.getConstructor(partypes);
Object arglist[] = new Object[2];
arglist[0] = new Integer(37);
arglist[1] = new Integer(47);
Object retobj = ct.newInstance(arglist);
} catch (Throwable e) {
System.err.println(e);
}
}
}
æ ÒŽ®æŒ‡å®šçš„å‚æ•°ç±»åž‹æ‰¾åˆ°ç›¸åº”çš„æž„é€ å‡½æ•°åÆˆæ‰§è¡Œå®ƒï¼Œä»¥åˆ›å»ÞZ¸€ä¸ªæ–°çš„对象实例。ä‹É用这¿Uæ–¹æ³•可以在½E‹åº˜qè¡Œæ—¶åŠ¨æ€åœ°åˆ›å¾å¯¹è±¡åQŒè€Œä¸æ˜¯åœ¨¾~–译的时候创建对象,˜q™ä¸€ç‚šwžå¸¸æœ‰ä»·å€¹{€?
8.改变字段(�的�
reflection 的还有一个用处就是改变对象数据字ŒD늚„倹{€‚reflection 可以从正在运行的½E‹åºä¸­æ ¹æ®å¿U°æ‰¾åˆ°å¯¹è±¡çš„字段òq¶æ”¹å˜å®ƒåQŒä¸‹é¢çš„例子可以说明˜q™ä¸€ç‚¹ï¼š
import java.lang.reflect.*;
public class field2 {
public double d;
public static void main(String args[]) {
try {
Class cls = Class.forName("field2");
Field fld = cls.getField("d");
field2 f2obj = new field2();
System.out.println("d = " + f2obj.d);
fld.setDouble(f2obj, 12.34);
System.out.println("d = " + f2obj.d);
} catch (Throwable e) {
System.err.println(e);
}
}
}
˜q™ä¸ªä¾‹å­ä¸­ï¼Œå­—段 d çš„å€ÆD¢«å˜äØ“äº?12.34ã€?
9.使用数组
本文介绍çš?reflection 的最后一¿Uç”¨æ³•是创徏的操作数¾l„。数¾l„在 Java 语言中是一¿Uç‰¹ŒDŠçš„¾cȝ±»åž‹ï¼Œä¸€ä¸ªæ•°¾l„的引用可以赋给 Object 引用。观察下面的例子看看数组是怎么工作的:
import java.lang.reflect.*;
public class array1 {
public static void main(String args[]) {
try {
Class cls = Class.forName("java.lang.String");
Object arr = Array.newInstance(cls, 10);
Array.set(arr, 5, "this is a test");
String s = (String) Array.get(arr, 5);
System.out.println(s);
} catch (Throwable e) {
System.err.println(e);
}
}
}
例中创徏äº?10 个单位长度的 String 数组åQŒäØ“½W?5 个位¾|®çš„字符串赋了å€û|¼Œæœ€åŽå°†˜q™ä¸ªå­—ç¬¦ä¸²ä»Žæ•°ç»„ä¸­å–å¾—åÆˆæ‰“å°äº†å‡ºæ¥ã€?
下面˜q™æ®µä»£ç æä¾›äº†ä¸€ä¸ªæ›´å¤æ‚的例子:
import java.lang.reflect.*;
public class array2 {
public static void main(String args[]) {
int dims[] = new int[]{5, 10, 15};
Object arr = Array.newInstance(Integer.TYPE, dims);
Object arrobj = Array.get(arr, 3);
Class cls = arrobj.getClass().getComponentType();
System.out.println(cls);
arrobj = Array.get(arrobj, 5);
Array.setInt(arrobj, 10, 37);
int arrcast[][][] = (int[][][]) arr;
System.out.println(arrcast[3][5][10]);
}
}
例中创徏了一ä¸?5 x 10 x 15 的整型数¾l„,òq¶äؓ处于 [3][5][10] 的元素赋了å€égØ“ 37。注意,多维数组实际上就是数¾l„的数组åQŒä¾‹å¦‚,½W¬ä¸€ä¸?Array.get 之后åQŒarrobj 是一ä¸?10 x 15 的数¾l„ã€‚è¿›è€Œå–å¾—å…¶ä¸­çš„ä¸€ä¸ªå…ƒç´ ï¼Œå³é•¿åº¦äØ“ 15 的数¾l„,òq¶ä‹Éç”?Array.setInt 为它的第 10 个元素赋倹{€?
注意创徏数组时的¾cÕdž‹æ˜¯åŠ¨æ€çš„åQŒåœ¨¾~–è¯‘æ—¶åÆˆä¸çŸ¥é“å…¶¾cÕdž‹ã€?br>

注:以上信息均来自互联网

]]>
ajax学习ç‚ÒŽ»´(不断增加ä¸?http://www.aygfsteel.com/Swing/archive/2007/06/26/126350.htmlSunSunTue, 26 Jun 2007 07:26:00 GMThttp://www.aygfsteel.com/Swing/archive/2007/06/26/126350.htmlhttp://www.aygfsteel.com/Swing/comments/126350.htmlhttp://www.aygfsteel.com/Swing/archive/2007/06/26/126350.html#Feedback0http://www.aygfsteel.com/Swing/comments/commentRss/126350.htmlhttp://www.aygfsteel.com/Swing/services/trackbacks/126350.html      æŠŠå­¦ä¹ ajax的一些知识记录一下,以后不断补充ã€?br>

      ç”¨äºŽå¤„理XML文档的DOM元素属æ€?/p>

属�/p>

描述

childNodes

˜q”回当前元素所有子元素的数¾l?/p>

firstChild

˜q”回当前元素的第一个下¾U§å­å…ƒç´ 

lastChild

˜q”回当前元素的最后一个子元素

nextSibling

˜q”回紧跟在当前元素后面的元素

nodeValue

指定表示元素值的�写属�/p>

parentNode

˜q”回元素的父节点

previousSibling

˜q”回紧邻当前元素之前的元ç´?/p>

 

用于遍历XML文档的DOM元素æ–ÒŽ³•

æ–ÒŽ³•

描述

getElementById(id)

获取文档中有指定唯一ID属性值的元素

getElementsByTageName(name)

˜q”回当前元素中有指定标记名的子元素的数组

hasChildNodes()

˜q”回一个布ž®”å€û|¼ŒæŒ‡ç¤ºå…ƒç´ æ˜¯å¦æœ‰å­å…ƒç´ 

getAttribute(name)

˜q”回元素的属性å€û|¼Œå±žæ€§ç”±name指定


 

属æ€?æ–ÒŽ³•

描述

Document.createElement(tagName)

文档对象上的createElementæ–ÒŽ³•可以创徏由tagName指定的元素。如果以字符串串divä½œäØ“æ–ÒŽ³•参数åQŒå°±ä¼šç”Ÿæˆä¸€ä¸ªdiv元素

Document.createTextNode(text)

文档对象的createTextNodeæ–ÒŽ³•会创å»ÞZ¸€ä¸ªåŒ…含静态文本的节点ã€?/p>

<element>.appendChild(childNode)

appendChildæ–ÒŽ³•ž®†æŒ‡å®šçš„èŠ‚ç‚¹å¢žåŠ åˆ°å½“å‰å…ƒç´ çš„å­èŠ‚ç‚¹åˆ—è¡¨ï¼ˆä½œäØ“ä¸€ä¸ªæ–°çš„å­èŠ‚ç‚¹åQ‰ã€‚例如:可以增加一个option元素åQŒä½œä¸ºselect元素的子节点ã€?/p>

<element>.getAttribute(name)

<element>.setAttribute(name)

˜q™äº›æ–ÒŽ³•分别获得和设¾|®å…ƒç´ ä¸­name属性的倹{€?/p>

<element>.insertBefore(newNode,targetNode)

˜q™ä¸ªæ–ÒŽ³•ž®†èŠ‚ç‚¹newNodeä½œäØ“å½“å‰å…ƒç´ çš„å­èŠ‚ç‚¹æ’åˆ°targetNode元素前面ã€?/p>

<element>.removeAttribute(name)

˜q™ä¸ªæ–ÒŽ³•从元素中删除属性nameã€?/p>

<element>.replaceChild(newNode,oldNode)

˜q™ä¸ªæ–ÒŽ³•ž®†èŠ‚ç‚¹oldNode替换位节点newNodeã€?/p>

<element>.hasChildnodes()

˜q™ä¸ªæ–ÒŽ³•˜q”回一个布ž®”å€û|¼ŒæŒ‡ç¤ºå…ƒç´ æ˜¯å¦æœ‰å­å…ƒç´ ã€?/p>

<element>.cloneNode(true)

克隆当前元素åQŒåƈ˜q”回新元ç´?/p>


      1、在XML文档中文本本íw«è¢«è®¤äؓ一个节点,而且必须是另外一个节点的子元素,ex)<state>shandong</state> shandong 其实是state的子元素åQŒå¿…™åÕd…ˆä»Žstate获取文本元素åQŒå†ä»Žè¿™ä¸ªæ–‡æœ¬å…ƒç´ å¾—到文本内容,
具体代码如下åQ?br>var xmlDoc=xmlHttp.responseXML;
var allStates=xmlDoc.getElementsByTagName("state");//得到一个state的数¾l?br>var currentState=null;
for(var i=0;i<allStates.length;i++){
   currentState=allStates[i];//得到具体的一个state元素
   alert(currentState.childNodes[0].nodeValue);//文本元素是state的第一个子元素
   //通过childNodes属性得到state元素的文本元素,
   //nodeValue˜q”回文本元素的内å®?br>}
      
      2、关于浏览器的不兼容性引èµïLš„问题的解å†Ïx–¹æ³?br>      (1)、如果ä‹É用appendChild()ž®†træ·ÕdŠ åˆîC¸€ä¸ªtable中,在ie中将不会出现此行
            è§£å†³æ–ÒŽ³•åQšå°†tr元素æ·ÕdŠ åˆ°è¡¨çš?lt;tbody>元素ä¸?br>      (2)、IE中不能ä‹É用setAttribute正确的设¾|®class属性,
            è§£å†³æ–ÒŽ³•åQšåŒæ—¶ä‹É用setAttribute("class","newclassName");å’?br>            setAttribute  ("className","newclassName");
      (3)、IE中不能ä‹É用setAttribute讄¡½®style属æ€?br>            è§£å†³æ–ÒŽ³•åQ?lt;element>.style.cssText="font-size: 12px; "

      3、用postæ–ÒŽ³•发送数据的时候,需要设¾|®xmlHttp.setrequestheader("Content-Type","application/x-www-form-urlencoded");让服务器知道è¯äh±‚体中有请求参数ã€?br>
      4、在è¯äh±‚中加å…?&timeStamp="+new Date().getTime()的作用:有些‹¹è§ˆå™¨ä¼šæŠŠå¤šä¸ªxmlHttpè¯äh±‚的结果缓存在同一个urlåQŒå¦‚果对每个è¯äh±‚的响应不同会带来不好的后果,加上旉™—´æˆ³ä»¥åŽå°±å¯ä»¥ä¿è¯URL的唯一性,避免‹¹è§ˆå™¨ç¼“存结果ã€?br>

      5、xmlHttp.setrequestheader("contentType","text/html;charset=uft-8");可以解决发送过½E‹ä¸­çš„æ±‰å­—äØ•ç é—®é¢˜ã€?nbsp;  

      6、动态刷新的实现åQšæ ¸å¿ƒå°±æ˜¯setTimeout()æ–ÒŽ³•通过setTimeout("startCallServer()",5000);方式éš?S后执行startCallServeæ–ÒŽ³• 注意setTimeoutæ–ÒŽ³•只执行一‹Æ¡ï¼Œæ‰€ä»¥åœ¨äº‹äšg处理函数里要再次调用setTimeoutæ–ÒŽ³•˜q™æ ·å½¢æˆä¸€ä¸ªåó@环调用ã€?/span>

]]>
javascript控制html:radio 选中http://www.aygfsteel.com/Swing/archive/2007/06/25/126050.htmlSunSunMon, 25 Jun 2007 03:10:00 GMThttp://www.aygfsteel.com/Swing/archive/2007/06/25/126050.htmlhttp://www.aygfsteel.com/Swing/comments/126050.htmlhttp://www.aygfsteel.com/Swing/archive/2007/06/25/126050.html#Feedback0http://www.aygfsteel.com/Swing/comments/commentRss/126050.htmlhttp://www.aygfsteel.com/Swing/services/trackbacks/126050.html      åœ¨åˆšåšçš„一个考试¾pȝ»Ÿä¸­ï¼Œç”¨åˆ°äº†javascript控制radio的选取操作,主要思想ž®±æ˜¯å–得上次操作选中的项的值存为hidden 然后在javascriptä¸?通过循环取得˜q™äº›å€û|¼Œç„¶åŽå’Œradioçš„value倯D¿›è¡Œå¯¹æ¯”,如果两者å€ég¸€æ ·åˆ™ž®†radioçš„checked属性设¾|®äØ“true卛_¯ã€?br>function sel(){
  var sel=document.getElementById("pagex");
  var st1=(sel.value-1)*10+1;
  var st2=sel.value*10+1;
  for(var m=st1;m<st2;m++){
   var ans=document.getElementsByName("sel"+m);
   var val=document.getElementById("selx"+(m-1));
     for(var i=0;i<ans.length;i++){
       if(ans[i].value==val.value){
         ans[i].checked=true;
          }
     }
    }
  }
JavaScript功能真的很强大,博大¾_¾æ·±åQŒè¦å¥½å¥½å­¦ä¹ äº†ã€?/span>

]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ÆÖ½­ÏØ| ÑγØÏØ| Ò˶¼ÊÐ| ²©¿Í| õ·ÁêÊÐ| »ÔÏØÊÐ| ¶ë±ß| ÍÁÄ¬ÌØ×óÆì| ÄÏľÁÖÏØ| ÐÃÖÝÊÐ| ÕÄÖÝÊÐ| ÖÜ¿ÚÊÐ| ¾°ºéÊÐ| ÎÅÏ²ÏØ| ½­»ª| ÄþÇ¿ÏØ| ¸ßÌ¨ÏØ| ÍûÚÓÏØ| ÄϳäÊÐ| ´Ó»¯ÊÐ| ÒÁ´¨ÏØ| ½­É½ÊÐ| ÏÌÑôÊÐ| ÓãÌ¨ÏØ| Äþ²¨ÊÐ| ÇúÂéÀ³ÏØ| Îâ´¨ÊÐ| ÌØ¿ËË¹ÏØ| ÎÚÊ²ÏØ| Á¬ÔƸÛÊÐ| ²¨ÃÜÏØ| ÕþºÍÏØ| ÔÀÑôÏØ| º£Ô­ÏØ| °°É½ÊÐ| í¸É½ÏØ| °ö²ºÊÐ| ÅíÔóÏØ| ÇßÑôÊÐ| ÓÀÐÂÏØ| Ê¯Â¥ÏØ|