1.JAVA åå°
2.html文件是语义源码语义源码标准的ascii文件内容包括
JAVA åå°
åå°çæ¦å¿µæ¯ç±Smithå¨å¹´é¦æ¬¡æåºçï¼ä¸»è¦æ¯æç¨åºå¯ä»¥è®¿é®ãæ£æµåä¿®æ¹å®æ¬èº«ç¶ææè¡ä¸ºçä¸ç§è½åãè¿ä¸æ¦å¿µçæåºå¾å¿«å¼åäºè®¡ç®æºç§å¦é¢åå ³äºåºç¨åå°æ§çç 究ãå®é¦å 被ç¨åºè¯è¨ç设计é¢åæéç¨,并å¨Lispåé¢å对象æ¹é¢åå¾äºæ绩ãå ¶ä¸LEAD/LEAD++ ãOpenC++ ãMetaXaåOpenJavaçå°±æ¯åºäºåå°æºå¶çè¯è¨ãæè¿ï¼åå°æºå¶ä¹è¢«åºç¨å°äºè§çªç³»ç»ãæä½ç³»ç»åæ件系ç»ä¸ã
åå°æ¬èº«å¹¶ä¸æ¯ä¸ä¸ªæ°æ¦å¿µï¼å®å¯è½ä¼ä½¿æ们èæ³å°å å¦ä¸çåå°æ¦å¿µï¼å°½ç®¡è®¡ç®æºç§å¦èµäºäºåå°æ¦å¿µæ°çå«ä¹ï¼ä½æ¯ï¼ä»ç°è±¡ä¸æ¥è¯´ï¼å®ä»¬ç¡®å®ææäºç¸éä¹å¤ï¼è¿äºæå©äºæ们çç解ãå¨è®¡ç®æºç§å¦é¢åï¼åå°æ¯æä¸ç±»åºç¨ï¼å®ä»¬è½å¤èªæè¿°åèªæ§å¶ãä¹å°±æ¯è¯´ï¼è¿ç±»åºç¨éè¿éç¨æç§æºå¶æ¥å®ç°å¯¹èªå·±è¡ä¸ºçæè¿°ï¼self-representationï¼åçæµï¼examinationï¼ï¼å¹¶è½æ ¹æ®èªèº«è¡ä¸ºçç¶æåç»æï¼è°æ´æä¿®æ¹åºç¨ææè¿°è¡ä¸ºçç¶æåç¸å ³çè¯ä¹ãå¯ä»¥çåºï¼åä¸è¬çåå°æ¦å¿µç¸æ¯ï¼è®¡ç®æºç§å¦é¢åçåå°ä¸ååæåå°æ¬èº«ï¼è¿å æ¬å¯¹åå°ç»ææéåçæªæ½ãææéç¨åå°æºå¶çç³»ç»ï¼å³åå°ç³»ç»ï¼é½å¸æ使系ç»çå®ç°æ´å¼æ¾ãå¯ä»¥è¯´ï¼å®ç°äºåå°æºå¶çç³»ç»é½å ·æå¼æ¾æ§ï¼ä½å ·æå¼æ¾æ§çç³»ç»å¹¶ä¸ä¸å®éç¨äºåå°æºå¶ï¼å¼æ¾æ§æ¯åå°ç³»ç»çå¿ è¦æ¡ä»¶ãä¸è¬æ¥è¯´ï¼åå°ç³»ç»é¤äºæ»¡è¶³å¼æ¾æ§æ¡ä»¶å¤è¿å¿ 须满足åå è¿æ¥ï¼Causally-connectedï¼ãæè°åå è¿æ¥æ¯æ对åå°ç³»ç»èªæè¿°çæ¹åè½å¤ç«å³åæ å°ç³»ç»åºå±çå®é ç¶æåè¡ä¸ºä¸çæ åµï¼åä¹äº¦ç¶ãå¼æ¾æ§ååå è¿æ¥æ¯åå°ç³»ç»ç两大åºæ¬è¦ç´ ã
Javaä¸ï¼åå°æ¯ä¸ç§å¼ºå¤§çå·¥å ·ãå®ä½¿æ¨è½å¤å建çµæ´»ç代ç ï¼è¿äºä»£ç å¯ä»¥å¨è¿è¡æ¶è£ é ï¼æ éå¨ç»ä»¶ä¹é´è¿è¡æºä»£è¡¨é¾æ¥ãåå°å 许æ们å¨ç¼åä¸æ§è¡æ¶ï¼ä½¿æ们çç¨åºä»£ç è½å¤æ¥å ¥è£ è½½å°JVMä¸çç±»çå é¨ä¿¡æ¯ï¼èä¸æ¯æºä»£ç ä¸éå®çç±»åä½ç代ç ãè¿ä½¿åå°æ为æ建çµæ´»çåºç¨ç主è¦å·¥å ·ãä½é注æçæ¯ï¼å¦æ使ç¨ä¸å½ï¼åå°çææ¬å¾é«ã
äºãJavaä¸çç±»åå°ï¼
Reflection æ¯ Java ç¨åºå¼åè¯è¨çç¹å¾ä¹ä¸ï¼å®å 许è¿è¡ä¸ç Java ç¨åºå¯¹èªèº«è¿è¡æ£æ¥ï¼æè 说âèªå®¡âï¼å¹¶è½ç´æ¥æä½ç¨åºçå é¨å±æ§ãJava çè¿ä¸è½åå¨å®é åºç¨ä¸ä¹è®¸ç¨å¾ä¸æ¯å¾å¤ï¼ä½æ¯å¨å ¶å®çç¨åºè®¾è®¡è¯è¨ä¸æ ¹æ¬å°±ä¸åå¨è¿ä¸ç¹æ§ãä¾å¦ï¼PascalãC æè C++ ä¸å°±æ²¡æåæ³å¨ç¨åºä¸è·å¾å½æ°å®ä¹ç¸å ³çä¿¡æ¯ã
1ï¼æ£æµç±»ï¼
1.1 reflectionçå·¥ä½æºå¶
èèä¸é¢è¿ä¸ªç®åçä¾åï¼è®©æ们çç 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
å®çç»æè¾åºä¸ºï¼
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)
è¿æ ·å°±ååºäºjava.util.Stack ç±»çåæ¹æ³å以åå®ä»¬çéå¶ç¬¦åè¿åç±»åã
è¿ä¸ªç¨åºä½¿ç¨ Class.forName è½½å ¥æå®çç±»ï¼ç¶åè°ç¨ getDeclaredMethods æ¥è·åè¿ä¸ªç±»ä¸å®ä¹äºçæ¹æ³å表ãjava.lang.reflect.Methods æ¯ç¨æ¥æè¿°æ个类ä¸å个æ¹æ³çä¸ä¸ªç±»ã
1.2 Javaç±»åå°ä¸ç主è¦æ¹æ³
对äºä»¥ä¸ä¸ç±»ç»ä»¶ä¸çä»»ä½ä¸ç±»æ¥è¯´ -- æé å½æ°ãå段åæ¹æ³ -- java.lang.Class æä¾åç§ç¬ç«çåå°è°ç¨ï¼ä»¥ä¸åçæ¹å¼æ¥è·å¾ä¿¡æ¯ãè°ç¨é½éµå¾ªä¸ç§æ åæ ¼å¼ã以ä¸æ¯ç¨äºæ¥æ¾æé å½æ°çä¸ç»åå°è°ç¨ï¼
l Constructor getConstructor(Class[] params) -- è·å¾ä½¿ç¨ç¹æ®çåæ°ç±»åçå ¬å ±æé å½æ°ï¼
l Constructor[] getConstructors() -- è·å¾ç±»çææå ¬å ±æé å½æ°
l Constructor getDeclaredConstructor(Class[] params) -- è·å¾ä½¿ç¨ç¹å®åæ°ç±»åçæé å½æ°(ä¸æ¥å ¥çº§å«æ å ³)
l Constructor[] getDeclaredConstructors() -- è·å¾ç±»çæææé å½æ°(ä¸æ¥å ¥çº§å«æ å ³)
è·å¾å段信æ¯çClass åå°è°ç¨ä¸åäºé£äºç¨äºæ¥å ¥æé å½æ°çè°ç¨ï¼å¨åæ°ç±»åæ°ç»ä¸ä½¿ç¨äºå段åï¼
l Field getField(String name) -- è·å¾å½åçå ¬å ±å段
l Field[] getFields() -- è·å¾ç±»çææå ¬å ±å段
l Field getDeclaredField(String name) -- è·å¾ç±»å£°æçå½åçå段
l Field[] getDeclaredFields() -- è·å¾ç±»å£°æçææå段
ç¨äºè·å¾æ¹æ³ä¿¡æ¯å½æ°ï¼
l Method getMethod(String name, Class[] params) -- 使ç¨ç¹å®çåæ°ç±»åï¼è·å¾å½åçå ¬å ±æ¹æ³
l Method[] getMethods() -- è·å¾ç±»çææå ¬å ±æ¹æ³
l Method getDeclaredMethod(String name, Class[] params) -- 使ç¨ç¹åçåæ°ç±»åï¼è·å¾ç±»å£°æçå½åçæ¹æ³
l Method[] getDeclaredMethods() -- è·å¾ç±»å£°æçæææ¹æ³
1.3å¼å§ä½¿ç¨ Reflectionï¼
ç¨äº reflection çç±»ï¼å¦ Methodï¼å¯ä»¥å¨ java.lang.relfect å ä¸æ¾å°ã使ç¨è¿äºç±»çæ¶åå¿ é¡»è¦éµå¾ªä¸ä¸ªæ¥éª¤ï¼ç¬¬ä¸æ¥æ¯è·å¾ä½ æ³æä½çç±»ç java.lang.Class 对象ãå¨è¿è¡ä¸ç Java ç¨åºä¸ï¼ç¨ java.lang.Class ç±»æ¥æè¿°ç±»åæ¥å£çã
ä¸é¢å°±æ¯è·å¾ä¸ä¸ª Class 对象çæ¹æ³ä¹ä¸ï¼
Class c = Class.forName("java.lang.String");
è¿æ¡è¯å¥å¾å°ä¸ä¸ª String ç±»ç类对象ãè¿æå¦ä¸ç§æ¹æ³ï¼å¦ä¸é¢çè¯å¥ï¼
Class c = int.class;
æè
Class c = Integer.TYPE;
å®ä»¬å¯è·å¾åºæ¬ç±»åç类信æ¯ãå ¶ä¸åä¸ç§æ¹æ³ä¸è®¿é®çæ¯åºæ¬ç±»åçå°è£ ç±» (å¦ Integer) ä¸é¢å å®ä¹å¥½ç TYPE å段ã
第äºæ¥æ¯è°ç¨è¯¸å¦ getDeclaredMethods çæ¹æ³ï¼ä»¥åå¾è¯¥ç±»ä¸å®ä¹çæææ¹æ³çå表ã
ä¸æ¦åå¾è¿ä¸ªä¿¡æ¯ï¼å°±å¯ä»¥è¿è¡ç¬¬ä¸æ¥äºââä½¿ç¨ reflection API æ¥æä½è¿äºä¿¡æ¯ï¼å¦ä¸é¢è¿æ®µä»£ç ï¼
Class c = Class.forName("java.lang.String");
Method m[] = c.getDeclaredMethods();
System.out.println(m[0].toString());
å®å°ä»¥ææ¬æ¹å¼æå°åº String ä¸å®ä¹ç第ä¸ä¸ªæ¹æ³çååã
2ï¼å¤ç对象ï¼
å¦æè¦ä½ä¸ä¸ªå¼åå·¥å ·ådebuggerä¹ç±»çï¼ä½ å¿ é¡»è½åç°filed values,以ä¸æ¯ä¸ä¸ªæ¥éª¤:
a.å建ä¸ä¸ªClass对象
b.éè¿getField å建ä¸ä¸ªField对象
c.è°ç¨Field.getXXX(Object)æ¹æ³(XXXæ¯Int,Floatçï¼å¦ææ¯å¯¹è±¡å°±çç¥ï¼Objectæ¯æå®ä¾).
ä¾å¦ï¼
import java.lang.reflect.*;
import java.awt.*;
class SampleGet {
public static void main(String[] args) {
Rectangle r = new Rectangle(, );
printHeight(r);
}
static void printHeight(Rectangle r) {
Field heightField;
Integer heightValue;
Class c = r.getClass();
try {
heightField = c.getField("height");
heightValue = (Integer) heightField.get(r);
System.out.println("Height: " + heightValue.toString());
} catch (NoSuchFieldException e) {
System.out.println(e);
} catch (SecurityException e) {
System.out.println(e);
} catch (IllegalAccessException e) {
System.out.println(e);
}
}
}
ä¸ãå®å ¨æ§ååå°ï¼
å¨å¤çåå°æ¶å®å ¨æ§æ¯ä¸ä¸ªè¾å¤æçé®é¢ãåå°ç»å¸¸ç±æ¡æ¶å代ç 使ç¨ï¼ç±äºè¿ä¸ç¹ï¼æ们å¯è½å¸ææ¡æ¶è½å¤å ¨é¢æ¥å ¥ä»£ç ï¼æ éèè常è§çæ¥å ¥éå¶ãä½æ¯ï¼å¨å ¶å®æ åµä¸ï¼ä¸åæ§å¶çæ¥å ¥ä¼å¸¦æ¥ä¸¥éçå®å ¨æ§é£é©ï¼ä¾å¦å½ä»£ç å¨ä¸å¼å¾ä¿¡ä»»ç代ç å ±äº«çç¯å¢ä¸è¿è¡æ¶ã
ç±äºè¿äºäºç¸çç¾çéæ±ï¼Javaç¼ç¨è¯è¨å®ä¹ä¸ç§å¤çº§å«æ¹æ³æ¥å¤çåå°çå®å ¨æ§ãåºæ¬æ¨¡å¼æ¯å¯¹åå°å®æ½ä¸åºç¨äºæºä»£ç æ¥å ¥ç¸åçéå¶ï¼
n ä»ä»»æä½ç½®å°ç±»å ¬å ±ç»ä»¶çæ¥å ¥
n ç±»èªèº«å¤é¨æ ä»»ä½å°ç§æç»ä»¶çæ¥å ¥
n åä¿æ¤åæå ï¼ç¼ºçæ¥å ¥ï¼ç»ä»¶çæéæ¥å ¥
ä¸è¿è³å°æäºæ¶åï¼å´ç»è¿äºéå¶è¿æä¸ç§ç®åçæ¹æ³ãæ们å¯ä»¥å¨æ们æåçç±»ä¸ï¼æ©å±ä¸ä¸ªæ®éçåºæ¬ç±»java.lang.reflect.AccessibleObject ç±»ãè¿ä¸ªç±»å®ä¹äºä¸ç§setAccessibleæ¹æ³ï¼ä½¿æ们è½å¤å¯å¨æå ³é对è¿äºç±»ä¸å ¶ä¸ä¸ä¸ªç±»çå®ä¾çæ¥å ¥æ£æµãå¯ä¸çé®é¢å¨äºå¦æ使ç¨äºå®å ¨æ§ç®¡çå¨ï¼å®å°æ£æµæ£å¨å ³éæ¥å ¥æ£æµç代ç æ¯å¦è®¸å¯äºè¿æ ·åãå¦ææªè®¸å¯ï¼å®å ¨æ§ç®¡çå¨æåºä¸ä¸ªä¾å¤ã
ä¸é¢æ¯ä¸æ®µç¨åºï¼å¨TwoString ç±»çä¸ä¸ªå®ä¾ä¸ä½¿ç¨åå°æ¥æ¾ç¤ºå®å ¨æ§æ£å¨è¿è¡ï¼
public class ReflectSecurity {
public static void main(String[] args) {
try {
TwoString ts = new TwoString("a", "b");
Field field = clas.getDeclaredField("m_s1");
// field.setAccessible(true);
System.out.println("Retrieved value is " +
field.get(inst));
} catch (Exception ex) {
ex.printStackTrace(System.out);
}
}
}
å¦ææ们ç¼è¯è¿ä¸ç¨åºæ¶ï¼ä¸ä½¿ç¨ä»»ä½ç¹å®åæ°ç´æ¥ä»å½ä»¤è¡è¿è¡ï¼å®å°å¨field .get(inst)è°ç¨ä¸æåºä¸ä¸ªIllegalAccessExceptionå¼å¸¸ãå¦ææ们ä¸æ³¨éfield.setAccessible(true)代ç è¡ï¼é£ä¹éæ°ç¼è¯å¹¶éæ°è¿è¡è¯¥ä»£ç ï¼å®å°ç¼è¯æåãæåï¼å¦ææ们å¨å½ä»¤è¡æ·»å äºJVMåæ°-Djava.security.manager以å®ç°å®å ¨æ§ç®¡çå¨ï¼å®ä»ç¶å°ä¸è½éè¿ç¼è¯ï¼é¤éæ们å®ä¹äºReflectSecurityç±»ç许å¯æéã
åãåå°æ§è½ï¼
åå°æ¯ä¸ç§å¼ºå¤§çå·¥å ·ï¼ä½ä¹åå¨ä¸äºä¸è¶³ãä¸ä¸ªä¸»è¦ç缺ç¹æ¯å¯¹æ§è½æå½±åã使ç¨åå°åºæ¬ä¸æ¯ä¸ç§è§£éæä½ï¼æ们å¯ä»¥åè¯JVMï¼æ们å¸æåä»ä¹å¹¶ä¸å®æ»¡è¶³æ们çè¦æ±ãè¿ç±»æä½æ»æ¯æ ¢äºåªç´æ¥æ§è¡ç¸åçæä½ã
ä¸é¢çç¨åºæ¯å段æ¥å ¥æ§è½æµè¯çä¸ä¸ªä¾åï¼å æ¬åºæ¬çæµè¯æ¹æ³ãæ¯ç§æ¹æ³æµè¯å段æ¥å ¥çä¸ç§å½¢å¼ -- accessSame ä¸åä¸å¯¹è±¡çæåå段åä½ï¼accessOther 使ç¨å¯ç´æ¥æ¥å ¥çå¦ä¸å¯¹è±¡çå段ï¼accessReflection 使ç¨å¯éè¿åå°æ¥å ¥çå¦ä¸å¯¹è±¡çå段ãå¨æ¯ç§æ åµä¸ï¼æ¹æ³æ§è¡ç¸åçè®¡ç® -- 循ç¯ä¸ç®åçå /ä¹é¡ºåºã
ç¨åºå¦ä¸ï¼
public int accessSame(int loops) {
m_value = 0;
for (int index = 0; index < loops; index++) {
m_value = (m_value + ADDITIVE_VALUE)
*MULTIPLIER_VALUE;
}
return m_value;
}
public int accessReference(int loops) {
TimingClass timing = new TimingClass();
for (int index = 0; index < loops; index++) {
timing.m_value = (timing.m_value + ADDITIVE_VALUE)
*MULTIPLIER_VALUE;
}
return timing.m_value;
}
public int accessReflection(int loops) throws Exception {
TimingClass timing = new TimingClass();
try {
Field field = TimingClass.class.
getDeclaredField("m_value");
for (int index = 0; index < loops; index++) {
int value = (field.getInt(timing) +
ADDITIVE_VALUE) * MULTIPLIER_VALUE;
field.setInt(timing, value);
}
return timing.m_value;
} catch (Exception ex) {
System.out.println("Error using reflection");
throw ex;
}
}
å¨ä¸é¢çä¾åä¸ï¼æµè¯ç¨åºéå¤è°ç¨æ¯ç§æ¹æ³ï¼ä½¿ç¨ä¸ä¸ªå¤§å¾ªç¯æ°ï¼ä»èå¹³åå¤æ¬¡è°ç¨çæ¶é´è¡¡éç»æãå¹³åå¼ä¸ä¸å æ¬æ¯ç§æ¹æ³ç¬¬ä¸æ¬¡è°ç¨çæ¶é´ï¼å æ¤åå§åæ¶é´ä¸æ¯ç»æä¸çä¸ä¸ªå ç´ ãä¸é¢çå¾æ¸ æ¥çåæ们å±ç¤ºäºæ¯ç§æ¹æ³å段æ¥å ¥çæ¶é´ï¼
å¾ 1ï¼å段æ¥å ¥æ¶é´ ï¼
æ们å¯ä»¥çåºï¼å¨å两å¯å¾ä¸(Sun JVM)ï¼ä½¿ç¨åå°çæ§è¡æ¶é´è¶ è¿ä½¿ç¨ç´æ¥æ¥å ¥çå以ä¸ãéè¿æ¯è¾ï¼IBM JVMå¯è½ç¨å¥½ä¸äºï¼ä½åå°æ¹æ³ä»æ§éè¦æ¯å ¶å®æ¹æ³é¿å以ä¸çæ¶é´ãä»»ä½JVMä¸å ¶å®ä¸¤ç§æ¹æ³ä¹é´æ¶é´æ¹é¢æ ä»»ä½æ¾èå·®å¼ï¼ä½IBM JVMå ä¹æ¯Sun JVMå¿«ä¸åãææå¯è½çæ¯è¿ç§å·®å¼åæ äºSun Hot Spot JVMçä¸ä¸ä¼åï¼å®å¨ç®ååºåæ¹é¢è¡¨ç°å¾å¾ç³ç³ãåå°æ§è½æ¯Sunå¼å1.4 JVMæ¶å ³æ³¨çä¸ä¸ªæ¹é¢ï¼å®å¨åå°æ¹æ³è°ç¨ç»æä¸æ¾ç¤ºãå¨è¿ç±»æä½çæ§è½æ¹é¢ï¼Sun 1.4.1 JVMæ¾ç¤ºäºæ¯1.3.1çæ¬å¾å¤§çæ¹è¿ã
å¦æ为为å建使ç¨åå°ç对象ç¼åäºç±»ä¼¼ç计æ¶æµè¯ç¨åºï¼æ们ä¼åç°è¿ç§æ åµä¸çå·®å¼ä¸è±¡å段åæ¹æ³è°ç¨æ åµä¸é£ä¹æ¾èã使ç¨newInstance()è°ç¨å建ä¸ä¸ªç®åçjava.lang.Objectå®ä¾èç¨çæ¶é´å¤§çº¦æ¯å¨Sun 1.3.1 JVMä¸ä½¿ç¨new Object()çåï¼æ¯å¨IBM 1.4.0 JVMçååï¼åªæ¯Sun 1.4.1 JVMä¸ç两é¨ã使ç¨Array.newInstance(type, size)å建ä¸ä¸ªæ°ç»èç¨çæ¶é´æ¯ä»»ä½æµè¯çJVMä¸ä½¿ç¨new type[size]ç两åï¼éçæ°ç»å¤§å°çå¢å ï¼å·®å¼éæ¥ç¼©å°ã
ç»æè¯ï¼
Javaè¯è¨åå°æä¾ä¸ç§å¨æé¾æ¥ç¨åºç»ä»¶çå¤åè½æ¹æ³ãå®å 许ç¨åºå建åæ§å¶ä»»ä½ç±»ç对象(æ ¹æ®å®å ¨æ§éå¶)ï¼æ éæå硬ç¼ç ç®æ ç±»ãè¿äºç¹æ§ä½¿å¾åå°ç¹å«éç¨äºå建以é常æ®éçæ¹å¼ä¸å¯¹è±¡åä½çåºãä¾å¦ï¼åå°ç»å¸¸å¨æç»åå¨å¯¹è±¡ä¸ºæ°æ®åºãXMLæå ¶å®å¤é¨æ ¼å¼çæ¡æ¶ä¸ä½¿ç¨ãJava reflection é常æç¨ï¼å®ä½¿ç±»åæ°æ®ç»æè½æå称å¨ææ£ç´¢ç¸å ³ä¿¡æ¯ï¼å¹¶å 许å¨è¿è¡ççç¨åºä¸æä½è¿äºä¿¡æ¯ãJava çè¿ä¸ç¹æ§é常强大ï¼å¹¶ä¸æ¯å ¶å®ä¸äºå¸¸ç¨è¯è¨ï¼å¦ CãC++ãFortran æè Pascal çé½ä¸å ·å¤çã
ä½åå°æ两个缺ç¹ã第ä¸ä¸ªæ¯æ§è½é®é¢ãç¨äºå段åæ¹æ³æ¥å ¥æ¶åå°è¦è¿æ ¢äºç´æ¥ä»£ç ãæ§è½é®é¢çç¨åº¦åå³äºç¨åºä¸æ¯å¦ä½ä½¿ç¨åå°çãå¦æå®ä½ä¸ºç¨åºè¿è¡ä¸ç¸å¯¹å¾å°æ¶åçé¨åï¼ç¼æ ¢çæ§è½å°ä¸ä¼æ¯ä¸ä¸ªé®é¢ãå³ä½¿æµè¯ä¸æåæ åµä¸ç计æ¶å¾æ¾ç¤ºçåå°æä½åªèç¨å å¾®ç§ãä» åå°å¨æ§è½å ³é®çåºç¨çæ ¸å¿é»è¾ä¸ä½¿ç¨æ¶æ§è½é®é¢æåå¾è³å ³éè¦ã
许å¤åºç¨ä¸æ´ä¸¥éçä¸ä¸ªç¼ºç¹æ¯ä½¿ç¨åå°ä¼æ¨¡ç³ç¨åºå é¨å®é è¦åççäºæ ãç¨åºäººåå¸æå¨æºä»£ç ä¸çå°ç¨åºçé»è¾ï¼åå°çç»è¿äºæºä»£ç çææ¯ä¼å¸¦æ¥ç»´æ¤é®é¢ãåå°ä»£ç æ¯ç¸åºçç´æ¥ä»£ç æ´å¤æï¼æ£å¦æ§è½æ¯è¾ç代ç å®ä¾ä¸çå°çä¸æ ·ã解å³è¿äºé®é¢çæä½³æ¹æ¡æ¯ä¿å®å°ä½¿ç¨åå°ââä» å¨å®å¯ä»¥çæ£å¢å çµæ´»æ§çå°æ¹ââè®°å½å ¶å¨ç®æ ç±»ä¸ç使ç¨ã
å©ç¨åå°å®ç°ç±»çå¨æå è½½
Bromonåå 请å°éçæ
æè¿å¨æé½åä¸ä¸ªç§»å¨å¢å¼é¡¹ç®ï¼ä¿ºè´è´£åå°server端ãåè½å¾ç®åï¼ææºç¨æ·éè¿GPRSæå¼Socketä¸æå¡å¨è¿æ¥ï¼æåæ ¹æ®ç¨æ·ä¼ è¿æ¥çæ°æ®ååºååºãåè¿ç±»ä¼¼é¡¹ç®çå å¼ä¸å®é½ç¥éï¼é¦å éè¦å®ä¹ä¸ä¸ªç±»ä¼¼äºMSNPçé讯åè®®ï¼ä¸è¿ä»å¤©çè¯é¢æ¯å¦ä½æè¿ä¸ªç³»ç»è®¾è®¡å¾å ·æé«åº¦çæ©å±æ§ãç±äºè¿ä¸ªé¡¹ç®æ¬èº«æ²¡æè¿è¡è¿è¾ä¸ºå®åç客æ·æ²éåéæ±åæï¼æ以以åè¯å®ä¼æå¾å¤åè½ä¸çæ©å±ï¼é讯åè®®è¯å®ä¼è¶æ¥è¶åºå¤§ï¼èæä½ä¸ºä¸ä¸ªä¸é£ä¹å¤å¿«ç人ï¼å½ç¶ä¸æ³ä»¥ååå»ä¿®æ¹å好çç¨åºï¼æ以è¿ä¸ªé¡¹ç®æ¯å®è·µé¢å对象设计ç好æºä¼ã
é¦å å®ä¹ä¸ä¸ªæ¥å£æ¥é离类ï¼
package org.bromon.reflect;
public interface Operator
{
public java.util.List act(java.util.List params)
}
æ ¹æ®è®¾è®¡æ¨¡å¼çåçï¼æ们å¯ä»¥ä¸ºä¸åçåè½ç¼åä¸åçç±»ï¼æ¯ä¸ªç±»é½ç»§æ¿Operatoræ¥å£ï¼å®¢æ·ç«¯åªéè¦é对Operatoræ¥å£ç¼ç¨å°±å¯ä»¥é¿å å¾å¤éº»ç¦ãæ¯å¦è¿ä¸ªç±»ï¼
package org.bromon.reflect.*;
public class Success implements Operator
{
public java.util.List act(java.util.List params)
{
List result=new ArrayList();
html文件是标准的ascii文件内容包括
品牌型号:联想拯救者YP
系统:Windows
html文件是标准的ascii文件,内容包括文件头、联想联想文件主体和文件结尾三部分。语义源码语义源码Html文件是联想联想egret 案例源码平时我们所说的静态网页文件,文件其内容是语义源码语义源码html源代码。直接浏览器就能打开浏览的联想联想超文本文件。html文件可以使用记事本打开,语义源码语义源码也可以使用网页编辑软件打开,联想联想其文件内容是语义源码语义源码遵循html结构语法的网页代码。
超文本标记语言或超文本链接标示语言(标准通用标记语言下的联想联想一个应用)HTML(HyperTextMark-upLanguage)是一种制作万维网页面的标准语言,是语义源码语义源码聚好用源码下载万维网浏览器使用的一种语言,它消除了不同计算机之间信息交流的联想联想障碍。
HTML元素是语义源码语义源码构建网站的基石。HTML允许嵌入图像与对象,联想联想并且可以用于创建交互式表单,语义源码语义源码它被用来结构化信息——例如标题、163信箱编辑源码段落和列表等等,也可用来在一定程度上描述文档的外观和语义。HTML的语言形式为尖括号包围的HTML元素,浏览器使用HTML标签和脚本来诠释网页内容,但不会将它们显示在页面上。解压合并exe源码
HTML可以嵌入如JavaScript的脚本语言,它们会影响HTML网页的行为。网页浏览器也可以引用层叠样式表(CSS)来定义文本和其它元素的外观与布局。维护HTML和CSS标准的组织万维网联盟(W3C)鼓励人们使用CSS替代一些用于表现的HTML元素。
HTML标记包含标签(及其属性)、成龙电影录制源码基于字符的数据类型、字符引用和实体引用等几个关键部分。HTML标签是最常见的,通常成对出现。这些成对出现的标签中,第一个标签是开始标签,第二个标签是结束标签。两个标签之间为元素的内容,有些标签没有内容,为空元素,如img。
语义化HTML是一种编写HTML的方式,它强调编码信息的含义在其格式(样子)之上。HTML从创立之初就包括语义化标记,但也包括标识性标记如font、i和center标签。也存在一些语义上中立的span与div标签。自年代末CSS开始应用于大多数浏览器,网页制作者就被鼓励使用CSS以便呈现与内容分离。