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文件是联想联想dz插件绑定二级域名源码平时我们所说的静态网页文件,文件其内容是语义源码语义源码html源代码。直接浏览器就能打开浏览的联想联想超文本文件。html文件可以使用记事本打开,语义源码语义源码也可以使用网页编辑软件打开,联想联想其文件内容是语义源码语义源码遵循html结构语法的网页代码。
超文本标记语言或超文本链接标示语言(标准通用标记语言下的联想联想一个应用)HTML(HyperTextMark-upLanguage)是一种制作万维网页面的标准语言,是语义源码语义源码烟花网页源码下载万维网浏览器使用的一种语言,它消除了不同计算机之间信息交流的联想联想障碍。
HTML元素是语义源码语义源码构建网站的基石。HTML允许嵌入图像与对象,联想联想并且可以用于创建交互式表单,语义源码语义源码它被用来结构化信息——例如标题、股票增长指标源码段落和列表等等,也可用来在一定程度上描述文档的外观和语义。HTML的语言形式为尖括号包围的HTML元素,浏览器使用HTML标签和脚本来诠释网页内容,但不会将它们显示在页面上。语音比心源码
HTML可以嵌入如JavaScript的脚本语言,它们会影响HTML网页的行为。网页浏览器也可以引用层叠样式表(CSS)来定义文本和其它元素的外观与布局。维护HTML和CSS标准的组织万维网联盟(W3C)鼓励人们使用CSS替代一些用于表现的HTML元素。
HTML标记包含标签(及其属性)、神龙指标源码分享基于字符的数据类型、字符引用和实体引用等几个关键部分。HTML标签是最常见的,通常成对出现。这些成对出现的标签中,第一个标签是开始标签,第二个标签是结束标签。两个标签之间为元素的内容,有些标签没有内容,为空元素,如img。
语义化HTML是一种编写HTML的方式,它强调编码信息的含义在其格式(样子)之上。HTML从创立之初就包括语义化标记,但也包括标识性标记如font、i和center标签。也存在一些语义上中立的span与div标签。自年代末CSS开始应用于大多数浏览器,网页制作者就被鼓励使用CSS以便呈现与内容分离。
2024-11-29 22:00631人浏览
2024-11-29 21:491490人浏览
2024-11-29 21:482070人浏览
2024-11-29 21:28601人浏览
2024-11-29 20:491246人浏览
2024-11-29 20:262673人浏览
1.怎么获取网页源代码中的文件怎么获取网页源代码中的文件 怎么获取网页源代码中的文件? 网页源代码是父级网页的代码网页中有一种节点叫iframe,也就是子Frame,相当于网页的子页面,他的结
1.开源操作系统开源操作系统开发带来的机遇2.什么是webos3.WebOS转向开源4.手机系统有哪几种开源操作系统开源操作系统开发带来的机遇 开源操作系统的发展为开发带来了前所未有的机遇。透明、
1.有了源码该如何使用2.做凡科网代理靠不靠谱?我认为,因人而异。3.拳头公司的机甲系列皮肤有哪些?有了源码该如何使用 1. 将Assets文件夹下的资源如烂滑资源)拖拽至Unity编辑器中,Un