下表是元å—符åŠå…¶åœ¨æ£åˆ™è¡¨è¾‘ּ上下文ä¸çš„行为的一个完整列表:
å—符 æè¿°
ž®†ä¸‹ä¸€ä¸ªå—½W¦æ ‡è®îCؓ一个特ŒDŠå—½W¦ã€æˆ–一个原义嗽W¦ã€æˆ–一个åŽå‘å¼•ç”¨ã€æˆ–一个八˜q›åˆ¶è½¬ä¹‰½W¦ã€‚例如,'n' 匚w…å—符 "n"ã€?\n' 匚w…一个æ¢è¡Œç¬¦ã€‚åºåˆ?nbsp;'\' 匚w… "" è€?nbsp;"\(" 则匹é…?nbsp;"("ã€?/font>
^
匚w…输入å—符串的开始佾|®ã€‚如果设¾|®äº† RegExp 对象çš?nbsp;Multiline 属性,^ 也匹é…?nbsp;'\n' æˆ?nbsp;'\r' 之åŽçš„ä½¾|®ã€?/font>
$
匚w…输入å—符串的¾l“æŸä½ç½®ã€‚如果设¾|®äº†RegExp 对象çš?nbsp;Multiline 属性,$ 也匹é…?nbsp;'\n' æˆ?nbsp;'\r' 之å‰çš„ä½¾|®ã€?/font>
*
匚w…å‰é¢çš„å表达å¼é›¶‹Æ¡æˆ–多次。例如,zo* 能匹é…?nbsp;"z" ä»¥åŠ "zoo"ã€?nbsp;* ½{‰äh于{0,}。[/size]
+
匚w…å‰é¢çš„å表达å¼ä¸€‹Æ¡æˆ–多次。例如,'zo+' 能匹é…?nbsp;"zo" ä»¥åŠ "zoo"åQŒä½†ä¸èƒ½åŒšw… "z"ã€? ½{‰ähäº?nbsp;{1,}ã€?/font>
?
匚w…å‰é¢çš„å表达å¼é›¶‹Æ¡æˆ–一‹Æ¡ã€‚例如,"do(es)?" å¯ä»¥åŒšw… "do" æˆ?nbsp;"does" ä¸çš„"do" ã€? ½{‰ähäº?nbsp;{0,1}ã€?/font>
{n}
n 是一个éžè´Ÿæ•´æ•°ã€‚匹é…确定的 n ‹Æ¡ã€‚例如,'o{2}' ä¸èƒ½åŒšw… "Bob" ä¸çš„ 'o'åQŒä½†æ˜¯èƒ½åŒšw… "food" ä¸çš„两个 oã€?/font>
{n,}
n 是一个éžè´Ÿæ•´æ•°ã€‚至ž®‘匹é…n ‹Æ¡ã€‚例如,'o{2,}' ä¸èƒ½åŒšw… "Bob" ä¸çš„ 'o'åQŒä½†èƒ½åŒ¹é…?nbsp;"foooood" ä¸çš„æ‰€æœ?nbsp;oã€?o{1,}' ½{‰ähäº?nbsp;'o+'ã€?o{0,}' 则ç‰ä»·äºŽ 'o*'ã€?/font>
{n,m}
m å’?nbsp;n å‡äØ“éžè´Ÿæ•´æ•°åQŒå…¶ä¸n <= m。最ž®‘匹é…?nbsp;n ‹Æ¡ä¸”最多匹é…?nbsp;m ‹Æ¡ã€‚刘åQ?nbsp;"o{1,3}" ž®†åŒ¹é…?nbsp;"fooooood" ä¸çš„å‰ä¸‰ä¸?nbsp;oã€?o{0,1}' ½{‰ähäº?nbsp;'o?'。请注æ„在逗å·å’Œä¸¤ä¸ªæ•°ä¹‹é—´ä¸èƒ½æœ‰ç©ºæ ¹{€?/font>
?
当该å—符紧跟在ä“Q何一个其他é™åˆ¶ç¬¦ (*, +, ?, {n}, {n,}, {n,m}) åŽé¢æ—Óž¼ŒåŒšw…æ¨¡å¼æ˜¯éžè´ªå©ªçš„。éžè´ªå©ªæ¨¡å¼ž®½å¯èƒ½å°‘çš„åŒ¹é…æ‰€æœçƒ¦çš„å—½W¦ä¸²åQŒè€Œé»˜è®¤çš„贪婪模å¼åˆ™å°½å¯èƒ½å¤šçš„匚w…所æœçƒ¦çš„å—½W¦ä¸²ã€‚例如,对于å—符ä¸?nbsp;"oooo"åQ?o+?' ž®†åŒ¹é…å•ä¸?nbsp;"o"åQŒè€?nbsp;'o+' ž®†åŒ¹é…所æœ?nbsp;'o'ã€?/font>
.
匚w…é™?nbsp;"\n" 之外的ä“Q何å•个嗽W¦ã€‚è¦åŒšw…包括 '\n' 在内的ä“Q何嗽W¦ï¼Œè¯·ä‹É用象 '[.\n]' 的模å¼ã€?/font>
(pattern)
匚w…pattern òq¶èŽ·å–这一匚w…。所获å–的匹é…å¯ä»¥ä»Žäº§ç”Ÿçš?nbsp;Matches 集åˆå¾—到åQŒåœ¨VBScript ä¸ä‹Éç”?nbsp;SubMatches 集åˆåQŒåœ¨JScript ä¸åˆ™ä½¿ç”¨ {CONTENT}… 属性。è¦åŒšw…圆括å·å—½W¦ï¼Œè¯·ä‹Éç”?nbsp;'\(' æˆ?nbsp;'\)'ã€?/font>
(?:pattern)
匚w… pattern 但ä¸èŽ·å–匚w…¾l“æžœåQŒä¹Ÿž®±æ˜¯è¯´è¿™æ˜¯ä¸€ä¸ªéžèŽ·å–匚w…åQŒä¸˜q›è¡Œå˜å‚¨ä¾›ä»¥åŽä‹É用。这在ä‹Éç”?nbsp;"æˆ? å—符 (|) æ¥ç»„åˆä¸€ä¸ªæ¨¡å¼çš„å„个部分是很有用。例如, 'industr(?:y|ies) ž®±æ˜¯ä¸€ä¸ªæ¯” 'industry|industries' 更简略的表达å¼ã€?/font>
(?=pattern)
æ£å‘预查åQŒåœ¨ä»ÖM½•匚w… pattern 的嗽W¦ä¸²å¼€å§‹å¤„匚w…查找å—符丌Ӏ‚这是一个éžèŽ·å–匚w…åQŒä¹Ÿž®±æ˜¯è¯ß_¼Œè¯¥åŒ¹é…ä¸éœ€è¦èŽ·å–供以åŽä½¿ç”¨ã€‚例如, 'Windows (?=95|98|NT|2000)' 能匹é…?nbsp;"Windows 2000" ä¸çš„ "Windows" åQŒä½†ä¸èƒ½åŒšw… "Windows 3.1" ä¸çš„ "Windows"ã€‚é¢„æŸ¥ä¸æ¶ˆè€—å—½W¦ï¼Œä¹Ÿå°±æ˜¯è¯´åQŒåœ¨ä¸€ä¸ªåŒ¹é…å‘生åŽåQŒåœ¨æœ€åŽä¸€‹Æ¡åŒ¹é…之åŽç«‹å›_¼€å§‹ä¸‹ä¸€‹Æ¡åŒ¹é…çš„æœçƒ¦åQŒè€Œä¸æ˜¯ä»ŽåŒ…å«é¢„查的嗽W¦ä¹‹åŽå¼€å§‹ã€?/font>
(?!pattern)
è´Ÿå‘预查åQŒåœ¨ä»ÖM½•ä¸åŒ¹é…Negative lookahead matches the search string at any point where a string not matching pattern 的嗽W¦ä¸²å¼€å§‹å¤„匚w…查找å—符丌Ӏ‚这是一个éžèŽ·å–匚w…åQŒä¹Ÿž®±æ˜¯è¯ß_¼Œè¯¥åŒ¹é…ä¸éœ€è¦èŽ·å–供以åŽä½¿ç”¨ã€‚例å¦?Windows (?!95|98|NT|2000)' 能匹é…?nbsp;"Windows 3.1" ä¸çš„ "Windows"åQŒä½†ä¸èƒ½åŒšw… "Windows 2000" ä¸çš„ "Windows"ã€‚é¢„æŸ¥ä¸æ¶ˆè€—å—½W¦ï¼Œä¹Ÿå°±æ˜¯è¯´åQŒåœ¨ä¸€ä¸ªåŒ¹é…å‘生åŽåQŒåœ¨æœ€åŽä¸€‹Æ¡åŒ¹é…之åŽç«‹å›_¼€å§‹ä¸‹ä¸€‹Æ¡åŒ¹é…çš„æœçƒ¦åQŒè€Œä¸æ˜¯ä»ŽåŒ…å«é¢„查的嗽W¦ä¹‹åŽå¼€å§?/font>
x|y
匚w… x æˆ?nbsp;y。例如,'z|food' 能匹é…?nbsp;"z" æˆ?nbsp;"food"ã€?(z|f)ood' 则匹é…?nbsp;"zood" æˆ?nbsp;"food"ã€?/font>
[xyz]
å—符集åˆã€‚åŒ¹é…æ‰€åŒ…å«çš„ä“Qæ„一个嗽W¦ã€‚例如, '[abc]' å¯ä»¥åŒšw… "plain" ä¸çš„ 'a'ã€?/font>
[^xyz]
负值嗽W¦é›†åˆã€‚åŒ¹é…æœªåŒ…å«çš„ä“Qæ„å—½W¦ã€‚例如, '[^abc]' å¯ä»¥åŒšw… "plain" ä¸çš„'p'ã€?/font>
[a-z]
å—ç¬¦èŒƒå›´ã€‚åŒ¹é…æŒ‡å®šèŒƒå›´å†…çš„ä“Qæ„å—½W¦ã€‚例如,'[a-z]' å¯ä»¥åŒšw… 'a' åˆ?nbsp;'z' 范围内的ä»ÀL„ž®å†™å—æ¯å—符ã€?/font>
[^a-z]
负值嗽W¦èŒƒå›´ã€‚匹é…ä“Q何ä¸åœ¨æŒ‡å®šèŒƒå›´å†…çš„ä“Qæ„å—½W¦ã€‚例如,'[^a-z]' å¯ä»¥åŒšw…ä»ÖM½•ä¸åœ¨ 'a' åˆ?nbsp;'z' 范围内的ä»ÀL„å—符ã€?/font>
\b
匚w…一个å•è¯è¾¹ç•Œï¼Œä¹Ÿå°±æ˜¯æŒ‡å•è¯å’Œç©ºæ ¼é—´çš„ä½¾|®ã€‚例如, 'er\b' å¯ä»¥åŒšw…"never" ä¸çš„ 'er'åQŒä½†ä¸èƒ½åŒšw… "verb" ä¸çš„ 'er'ã€?/font>
\B
匚w…éžå•è¯è¾¹ç•Œã€?er\B' 能匹é…?nbsp;"verb" ä¸çš„ 'er'åQŒä½†ä¸èƒ½åŒšw… "never" ä¸çš„ 'er'ã€?/font>
\cx
匚w…ç”±x指明的控制嗽W¦ã€‚例如, \cM 匚w…一ä¸?nbsp;Control-M 或回车符ã€?nbsp;x 的值必™åÖMØ“ A-Z æˆ?nbsp;a-z 之一。å¦åˆ™ï¼Œž®?nbsp;c è§†äØ“ä¸€ä¸ªåŽŸä¹‰çš„ 'c' å—符ã€?/font>
\d
匚w…一个数å—å—½W¦ã€‚ç‰ä»·äºŽ [0-9]ã€?/font>
\D
匚w…ä¸€ä¸ªéžæ•°å—å—符。ç‰ä»·äºŽ [^0-9]ã€?/font>
\f
匚w…一个梙å늬¦ã€‚ç‰ä»·äºŽ \x0c å’?nbsp;\cLã€?/font>
\n
匚w…一个æ¢è¡Œç¬¦ã€‚ç‰ä»·äºŽ \x0a å’?nbsp;\cJã€?/font>
\r
匚w…一个回车符。ç‰ä»·äºŽ \x0d å’?nbsp;\cMã€?/font>
\s
匚w…ä»ÖM½•½Iºç™½å—符åQŒåŒ…æ‹¬ç©ºæ ¹{€åˆ¶è¡¨ç¬¦ã€æ¢™å늬¦½{‰ç‰ã€‚ç‰ä»·äºŽ [ \f\n\r\t\v]ã€?/font>
\S
匚w…ä»ÖM½•éžç©ºç™½å—½W¦ã€‚ç‰ä»·äºŽ [^ \f\n\r\t\v]ã€?/font>
\t
匚w…一个制表符。ç‰ä»·äºŽ \x09 å’?nbsp;\cIã€?/font>
\v
匚w…一个垂直制表符。ç‰ä»·äºŽ \x0b å’?nbsp;\cKã€?/font>
\w
匚w…包括下划¾U¿çš„ä»ÖM½•å•è¯å—符。ç‰ä»·äºŽ'[A-Za-z0-9_]'ã€?/font>
\W
匚w…ä»ÖM½•éžå•è¯å—½W¦ã€‚ç‰ä»·äºŽ '[^A-Za-z0-9_]'ã€?/font>
\xn
匚w… nåQŒå…¶ä¸?nbsp;n 为åå…进制è{义倹{€‚åå…进制è{义值必™åÖMØ“¼‹®å®šçš„两个数å—长。例如, '\x41' 匚w… "A"ã€?\x041' 则ç‰ä»·äºŽ '\x04' & "1"。æ£åˆ™è¡¨è¾‘Ö¼ä¸å¯ä»¥ä‹Éç”?nbsp;ASCII ¾~–ç ã€?
\num
匚w… numåQŒå…¶ä¸?nbsp;num æ˜¯ä¸€ä¸ªæ£æ•´æ•°ã€‚对所获å–的匹é…的引用。例如,'(.)' 匚w…两个˜qžç®‹çš„相åŒå—½W¦ã€?/font>
\n
æ ‡è¯†ä¸€ä¸ªå…«˜q›åˆ¶è½¬ä¹‰å€¼æˆ–一个åŽå‘引用。如æž?nbsp;\n 之å‰è‡›_°‘ n 个获å–çš„å表辑ּåQŒåˆ™ n 为åŽå‘引用。å¦åˆ™ï¼Œå¦‚æžœ n 为八˜q›åˆ¶æ•°å— (0-7)åQŒåˆ™ n ä¸ÞZ¸€ä¸ªå…«˜q›åˆ¶è½¬ä¹‰å€¹{€?/font>
\nm
æ ‡è¯†ä¸€ä¸ªå…«˜q›åˆ¶è½¬ä¹‰å€¼æˆ–一个åŽå‘引用。如æž?nbsp;\nm 之å‰è‡›_°‘有is preceded by at least nm 个获å–å¾—å表辑ּåQŒåˆ™ nm 为åŽå‘引用。如æž?nbsp;\nm 之å‰è‡›_°‘æœ?nbsp;n 个获å–,åˆ?nbsp;n ä¸ÞZ¸€ä¸ªåŽè·Ÿæ–‡å?nbsp;m çš„åŽå‘引用。如果å‰é¢çš„æ¡äšgéƒ½ä¸æ»¡èƒöåQŒè‹¥ n å’?nbsp;m å‡äؓ八进制数å?nbsp;(0-7)åQŒåˆ™ \nm ž®†åŒ¹é…å…«˜q›åˆ¶è½¬ä¹‰å€?nbsp;nmã€?/font>
\nml
如果 n 为八˜q›åˆ¶æ•°å— (0-3)åQŒä¸” m å’?nbsp;l å‡äؓ八进制数å?nbsp;(0-7)åQŒåˆ™åŒšw…八进制è{义å€?nbsp;nmlã€?/font>
\un
匚w… nåQŒå…¶ä¸?nbsp;n 是一个用四个åå…˜q›åˆ¶æ•°å—表示çš?nbsp;Unicode å—符。例如,\u00A9 匚w…版惽W¦å· (?)ã€?/font>
  使用 JDBC 驱动½E‹åºè°ƒç”¨ä¸å¸¦å‚æ•°çš„å˜å‚¨è¿‡½E‹æ—¶åQŒå¿…™åÖM‹Éç”?call SQL 转义åºåˆ—。ä¸å¸¦å‚æ•°çš„ call 转义åºåˆ—çš„è¯æ³•如下所½Cºï¼š
  
以下是引用片ŒDµï¼š {call procedure-name} |
ã€€ã€€ä½œäØ“å®žä¾‹åQŒåœ¨ SQL Server 2005 AdventureWorks ½CÞZ¾‹æ•°æ®åº“ä¸åˆ›å¾ä»¥ä¸‹å˜å‚¨˜q‡ç¨‹åQ?/p>
  
以下是引用片ŒDµï¼š CREATE PROCEDURE GetContactFormalNames   AS   BEGIN    SELECT TOP 10 Title + ' ' + FirstName + ' ' + LastName AS FormalName    FROM Person.Contact   END |
  在下é¢çš„实例ä¸ï¼Œž®†å‘æ¤å‡½æ•îC¼ é€?AdventureWorks ½CÞZ¾‹æ•°æ®åº“的打开˜qžæŽ¥åQŒç„¶åŽä‹Éç”?executeQuery æ–ÒŽ³•调用 GetContactFormalNames å˜å‚¨˜q‡ç¨‹ã€?/p>
以下是引用片ŒDµï¼š   public static void executeSprocNoParams(Connection con) ...{    try ...{    Statement stmt = con.createStatement();   ResultSet rs = stmt.executeQuery("{call dbo.GetContactFormalNames}");       while (rs.next()) ...{  System.out.println(rs.getString("FormalName"));   }   rs.close();   stmt.close();   }   catch (Exception e) ...{   e.printStackTrace();   }   } |
  2ä½¿ç”¨å¸¦æœ‰è¾“å…¥å‚æ•°çš„å˜å‚¨è¿‡½E?/strong>
  使用 JDBC 驱动½E‹åºè°ƒç”¨å¸¦å‚æ•°çš„å˜å‚¨˜q‡ç¨‹æ—Óž¼Œå¿…é¡»¾l“åˆ SQLServerConnection ¾cÈš„ prepareCall æ–ÒŽ³•使用 call SQL 转义åºåˆ—。带æœ?IN 傿•°çš?call 转义åºåˆ—çš„è¯æ³•如下所½Cºï¼š
  
以下是引用片ŒDµï¼š {call procedure-name[([parameter][,[parameter]]...)]} |
  构é€?call 转义åºåˆ—æ—Óž¼Œè¯·ä‹Éç”??(é—®å·)å—ç¬¦æ¥æŒ‡å®?IN 傿•°ã€‚æ¤å—符充当è¦ä¼ 递给该å˜å‚¨è¿‡½E‹çš„傿•°å€¼çš„å ä½½W¦ã€‚å¯ä»¥ä‹Éç”?SQLServerPreparedStatement ¾cÈš„ setter æ–ÒŽ³•ä¹‹ä¸€ä¸ºå‚æ•°æŒ‡å®šå€¹{€‚å¯ä½¿ç”¨çš?setter æ–ÒŽ³•ç”?IN 傿•°çš„æ•°æ®ç±»åž‹å†³å®šã€?/p>
  å?setter æ–ÒŽ³•ä¼ é€’å€¼æ—¶åQŒä¸ä»…éœ€è¦æŒ‡å®šè¦åœ¨å‚æ•îC¸ä½¿ç”¨çš„实际å€û|¼Œ˜q˜å¿…™åÀLŒ‡å®šå‚数在å˜å‚¨˜q‡ç¨‹ä¸çš„åºæ•°ä½ç½®ã€‚例如,如果å˜å‚¨˜q‡ç¨‹åŒ…å«å•个 IN 傿•°åQŒåˆ™å…¶åºæ•°å€égØ“ 1。如果å˜å‚¨è¿‡½E‹åŒ…å«ä¸¤ä¸ªå‚敎ͼŒåˆ™ç¬¬ä¸€ä¸ªåºæ•°å€égØ“ 1åQŒç¬¬äºŒä¸ªåºæ•°å€égØ“ 2ã€?/p>
ã€€ã€€ä½œäØ“å¦‚ä½•è°ƒç”¨åŒ…å« IN 傿•°çš„å˜å‚¨è¿‡½E‹çš„实例åQŒä‹Éç”?SQL Server 2005 AdventureWorks ½CÞZ¾‹æ•°æ®åº“ä¸çš?uspGetEmployeeManagers å˜å‚¨˜q‡ç¨‹ã€‚æ¤å˜å‚¨˜q‡ç¨‹æŽ¥å—å䨓 EmployeeID çš„å•ä¸ªè¾“å…¥å‚æ•?它是一个整数å€?åQŒç„¶åŽåŸºäºŽæŒ‡å®šçš„ EmployeeID ˜q”回雇员åŠå…¶¾lç†çš„é€’å½’åˆ—è¡¨ã€‚ä¸‹é¢æ˜¯è°ƒç”¨æ¤å˜å‚¨è¿‡½E‹çš„ Java 代ç åQ?/p>
  
以下是引用片ŒDµï¼š   public static void executeSprocInParams(Connection con) ...{    try ...{    PreparedStatement pstmt = con.prepareStatement("{call dbo.uspGetEmployeeManagers(?)}");    pstmt.setInt(1, 50);    ResultSet rs = pstmt.executeQuery();    while (rs.next()) ...{    System.out.println("EMPLOYEE:");    System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));    System.out.println("MANAGER:");    System.out.println(rs.getString("ManagerLastName") + ", " + rs.getString("ManagerFirstName"));    System.out.println();    }    rs.close();    pstmt.close();    }    catch (Exception e) ...{    e.printStackTrace();    }   } |
  3ä½¿ç”¨å¸¦æœ‰è¾“å‡ºå‚æ•°çš„å˜å‚¨è¿‡½E?/strong>
  使用 JDBC 驱动½E‹åºè°ƒç”¨æ¤ç±»å˜å‚¨˜q‡ç¨‹æ—Óž¼Œå¿…é¡»¾l“åˆ SQLServerConnection ¾cÈš„ prepareCall æ–ÒŽ³•使用 call SQL 转义åºåˆ—。带æœ?OUT 傿•°çš?call 转义åºåˆ—çš„è¯æ³•如下所½Cºï¼š
  
以下是引用片ŒDµï¼š {call procedure-name[([parameter][,[parameter]]...)]} |
  构é€?call 转义åºåˆ—æ—Óž¼Œè¯·ä‹Éç”??(é—®å·)å—ç¬¦æ¥æŒ‡å®?OUT 傿•°ã€‚æ¤å—符充当è¦ä»Žè¯¥å˜å‚¨è¿‡½E‹è¿”å›žçš„å‚æ•°å€¼çš„å ä½½W¦ã€‚è¦ä¸?OUT 傿•°æŒ‡å®šå€û|¼Œå¿…须在è¿è¡Œå˜å‚¨è¿‡½E‹å‰ä½¿ç”¨ SQLServerCallableStatement ¾cÈš„ registerOutParameter æ–ÒŽ³•指定å„傿•°çš„æ•°æ®¾cÕdž‹ã€?/p>
  使用 registerOutParameter æ–ÒŽ³•ä¸?OUT 傿•°æŒ‡å®šçš„值必™åÀL˜¯ java.sql.Types 所包å«çš?JDBC 数殾cÕdž‹ä¹‹ä¸€åQŒè€Œå®ƒåˆè¢«æ˜ å°„æˆæœ¬åœ?SQL Server 数殾cÕdž‹ä¹‹ä¸€ã€‚有å…?JDBC å’?SQL Server 数殾cÕdž‹çš„详¾l†ä¿¡æ¯ï¼Œè¯·å‚阅了è§?JDBC 驱动½E‹åºæ•°æ®¾cÕdž‹ã€?/p>
  当您对于 OUT 傿•°å?registerOutParameter æ–ÒŽ³•ä¼ é€’ä¸€ä¸ªå€¼æ—¶åQŒä¸ä»…å¿…™åÀLŒ‡å®šè¦ç”¨äºŽæ¤å‚数的数殾cÕdž‹åQŒè€Œä¸”必须在å˜å‚¨è¿‡½E‹ä¸æŒ‡å®šæ¤å‚æ•°çš„åºå·ä½ç½®æˆ–æ¤å‚æ•°çš„å¿U°ã€‚例如,如果å˜å‚¨˜q‡ç¨‹åŒ…å«å•个 OUT 傿•°åQŒåˆ™å…¶åºæ•°å€égØ“ 1;如果å˜å‚¨˜q‡ç¨‹åŒ…å«ä¸¤ä¸ªå‚æ•°åQŒåˆ™½W¬ä¸€ä¸ªåºæ•°å€égØ“ 1åQŒç¬¬äºŒä¸ªåºæ•°å€égØ“ 2ã€?/p>
ã€€ã€€ä½œäØ“å®žä¾‹åQŒåœ¨ SQL Server 2005 AdventureWorks ½CÞZ¾‹æ•°æ®åº“ä¸åˆ›å¾ä»¥ä¸‹å˜å‚¨˜q‡ç¨‹åQ?æ ÒŽ®æŒ‡å®šçš„æ•´æ•?IN 傿•° (employeeID)åQŒè¯¥å˜å‚¨˜q‡ç¨‹ä¹Ÿè¿”回å•个整æ•?OUT 傿•° (managerID)ã€‚æ ¹æ?HumanResources.Employee 表ä¸åŒ…å«çš?EmployeeIDåQŒOUT 傿•°ä¸è¿”回的å€égØ“ ManagerIDã€?/p>
  在下é¢çš„实例ä¸ï¼Œž®†å‘æ¤å‡½æ•îC¼ é€?AdventureWorks ½CÞZ¾‹æ•°æ®åº“的打开˜qžæŽ¥åQŒç„¶åŽä‹Éç”?execute æ–ÒŽ³•调用 GetImmediateManager å˜å‚¨˜q‡ç¨‹åQ?/p>
以下是引用片ŒDµï¼š   public static void executeStoredProcedure(Connection con) ...{    try ...{    CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");    cstmt.setInt(1, 5);    cstmt.registerOutParameter(2, java.sql.Types.INTEGER);    cstmt.execute();    System.out.println("MANAGER ID: " + cstmt.getInt(2));    }    catch (Exception e) ...{    e.printStackTrace();    }   } |
本示例ä‹É用åºå·ä½¾|®æ¥æ ‡è¯†å‚数。或者,也å¯ä»¥ä‹Éç”¨å‚æ•°çš„åç§°(而éžå…¶åºå·ä½¾|?æ¥æ ‡è¯†æ¤å‚数。下é¢çš„ä»£ç ½CÞZ¾‹ä¿®æ”¹äº†ä¸Šä¸€ä¸ªç¤ºä¾‹ï¼Œä»¥è¯´æ˜Žå¦‚何在 Java 应用½E‹åºä¸ä‹É用命å傿•°ã€‚请注æ„åQŒè¿™äº›å‚æ•°å¿U°å¯¹åº”于å˜å‚¨˜q‡ç¨‹çš„定义ä¸çš„傿•°å¿UŽÍ¼š CREATE PROCEDURE GetImmediateManager
以下是引用片ŒDµï¼š @employeeID INT,    @managerID INT OUTPUT   AS   BEGIN    SELECT @managerID = ManagerID    FROM HumanResources.Employee    WHERE EmployeeID = @employeeID   END |
  4 使用带有˜q”回状æ€çš„å˜å‚¨˜q‡ç¨‹
  使用 JDBC 驱动½E‹åºè°ƒç”¨˜q™ç§å˜å‚¨˜q‡ç¨‹æ—Óž¼Œå¿…é¡»¾l“åˆ SQLServerConnection ¾cÈš„ prepareCall æ–ÒŽ³•使用 call SQL 转义åºåˆ—。返回状æ€å‚æ•°çš„ call 转义åºåˆ—çš„è¯æ³•如下所½Cºï¼š
 
以下是引用片ŒDµï¼š  {[?=]call procedure-name[([parameter][,[parameter]]...)]} |
  æ¤å¤–åQŒå‘ registerOutParameter æ–ÒŽ³•ä¼ é€’è¿”å›žçŠ¶æ€å‚数值时åQŒä¸ä»…éœ€è¦æŒ‡å®šè¦ä½¿ç”¨çš„傿•°çš„æ•°æ®¾cÕdž‹åQŒè¿˜å¿…é¡»æŒ‡å®šå‚æ•°åœ¨å˜å‚¨è¿‡½E‹ä¸çš„åºæ•îC½¾|®ã€‚对于返回状æ€å‚敎ͼŒå…¶åºæ•îC½¾|®å§‹¾lˆäØ“ 1åQŒè¿™æ˜¯å› 为它始终是调用å˜å‚¨è¿‡½E‹æ—¶çš„ç¬¬ä¸€ä¸ªå‚æ•°ã€‚å°½½Ž?SQLServerCallableStatement ¾cÀL”¯æŒä‹Éç”¨å‚æ•°çš„åç§°æ¥æŒ‡½Cºç‰¹å®šå‚敎ͼŒä½†æ‚¨åªèƒ½å¯¹è¿”回状æ€å‚æ•îC‹Éç”¨å‚æ•°çš„åºå·ä½ç½®¾~–å·ã€?/p>
ã€€ã€€ä½œäØ“å®žä¾‹åQŒåœ¨ SQL Server 2005 AdventureWorks ½CÞZ¾‹æ•°æ®åº“ä¸åˆ›å¾ä»¥ä¸‹å˜å‚¨˜q‡ç¨‹åQ?/p>
  
以下是引用片ŒDµï¼š CREATE PROCEDURE CheckContactCity    (@cityName CHAR(50))   AS   BEGIN    IF ((SELECT COUNT(*)    FROM Person.Address    WHERE City = @cityName) > 1)    RETURN 1   ELSE    RETURN 0   END |
  在下é¢çš„实例ä¸ï¼Œž®†å‘æ¤å‡½æ•îC¼ é€?AdventureWorks ½CÞZ¾‹æ•°æ®åº“的打开˜qžæŽ¥åQŒç„¶åŽä‹Éç”?execute æ–ÒŽ³•调用 CheckContactCity å˜å‚¨˜q‡ç¨‹åQ?/p>
 
以下是引用片ŒDµï¼š  public static void executeStoredProcedure(Connection con) ...{    try ...{    CallableStatement cstmt = con.prepareCall("{? = call dbo.CheckContactCity(?)}");    cstmt.registerOutParameter(1, java.sql.Types.INTEGER);    cstmt.setString(2, "Atlanta");    cstmt.execute();    System.out.println("RETURN STATUS: " + cstmt.getInt(1));    }    cstmt.close();    catch (Exception e) ...{    e.printStackTrace();    }   } |
  使用 SQLServerCallableStatement ¾cÀLž„建对å˜å‚¨˜q‡ç¨‹çš„调用之åŽï¼Œå¯ä»¥ä½¿ç”¨ execute æˆ?executeUpdate æ–ÒŽ³•ä¸çš„ä»ÀL„一个æ¥è°ƒç”¨æ¤å˜å‚¨è¿‡½E‹ã€‚executeUpdate æ–ÒŽ³•ž®†è¿”回一ä¸?int å€û|¼Œè¯¥å€¼åŒ…å«å—æ¤å˜å‚¨è¿‡½E‹åª„å“的行数åQŒä½† execute æ–ÒŽ³•ä¸è¿”回æ¤å€¹{€‚如果ä‹Éç”?execute æ–ÒŽ³•åQŒåƈ且希望获得å—å½±å“的行数计敎ͼŒåˆ™å¯ä»¥åœ¨˜q行å˜å‚¨˜q‡ç¨‹åŽè°ƒç”?getUpdateCount æ–ÒŽ³•ã€?/p>
ã€€ã€€ä½œäØ“å®žä¾‹åQŒåœ¨ SQL Server 2005 AdventureWorks ½CÞZ¾‹æ•°æ®åº“ä¸åˆ›å¾ä»¥ä¸‹è¡¨å’Œå˜å‚¨˜q‡ç¨‹åQ?/p>
  
以下是引用片ŒDµï¼š CREATE TABLE TestTable    (Col1 int IDENTITY,    Col2 varchar(50),    Col3 int);      CREATE PROCEDURE UpdateTestTable    @Col2 varchar(50),    @Col3 int   AS   BEGIN    UPDATE TestTable    SET Col2 = @Col2, Col3 = @Col3   END; |
以下是引用片ŒDµï¼š public static void executeUpdateStoredProcedure(Connection con) ...{    try ...{    CallableStatement cstmt = con.prepareCall("{call dbo.UpdateTestTable(?, ?)}");    cstmt.setString(1, "A");    cstmt.setInt(2, 100);    cstmt.execute();    int count = cstmt.getUpdateCount();    cstmt.close();       System.out.println("ROWS AFFECTED: " + count);    }    catch (Exception e) ...{    e.printStackTrace();    }   } |
  使用 JDBC 驱动½E‹åºè°ƒç”¨ä¸å¸¦å‚æ•°çš„å˜å‚¨è¿‡½E‹æ—¶åQŒå¿…™åÖM‹Éç”?call SQL 转义åºåˆ—。ä¸å¸¦å‚æ•°çš„ call 转义åºåˆ—çš„è¯æ³•如下所½Cºï¼š
  
以下是引用片ŒDµï¼š {call procedure-name} |
ã€€ã€€ä½œäØ“å®žä¾‹åQŒåœ¨ SQL Server 2005 AdventureWorks ½CÞZ¾‹æ•°æ®åº“ä¸åˆ›å¾ä»¥ä¸‹å˜å‚¨˜q‡ç¨‹åQ?/p>
  
以下是引用片ŒDµï¼š CREATE PROCEDURE GetContactFormalNames   AS   BEGIN    SELECT TOP 10 Title + ' ' + FirstName + ' ' + LastName AS FormalName    FROM Person.Contact   END |
  在下é¢çš„实例ä¸ï¼Œž®†å‘æ¤å‡½æ•îC¼ é€?AdventureWorks ½CÞZ¾‹æ•°æ®åº“的打开˜qžæŽ¥åQŒç„¶åŽä‹Éç”?executeQuery æ–ÒŽ³•调用 GetContactFormalNames å˜å‚¨˜q‡ç¨‹ã€?/p>
以下是引用片ŒDµï¼š   public static void executeSprocNoParams(Connection con) ...{    try ...{    Statement stmt = con.createStatement();   ResultSet rs = stmt.executeQuery("{call dbo.GetContactFormalNames}");       while (rs.next()) ...{  System.out.println(rs.getString("FormalName"));   }   rs.close();   stmt.close();   }   catch (Exception e) ...{   e.printStackTrace();   }   } |
  2ä½¿ç”¨å¸¦æœ‰è¾“å…¥å‚æ•°çš„å˜å‚¨è¿‡½E?/strong>
  使用 JDBC 驱动½E‹åºè°ƒç”¨å¸¦å‚æ•°çš„å˜å‚¨˜q‡ç¨‹æ—Óž¼Œå¿…é¡»¾l“åˆ SQLServerConnection ¾cÈš„ prepareCall æ–ÒŽ³•使用 call SQL 转义åºåˆ—。带æœ?IN 傿•°çš?call 转义åºåˆ—çš„è¯æ³•如下所½Cºï¼š
  
以下是引用片ŒDµï¼š {call procedure-name[([parameter][,[parameter]]...)]} |
  构é€?call 转义åºåˆ—æ—Óž¼Œè¯·ä‹Éç”??(é—®å·)å—ç¬¦æ¥æŒ‡å®?IN 傿•°ã€‚æ¤å—符充当è¦ä¼ 递给该å˜å‚¨è¿‡½E‹çš„傿•°å€¼çš„å ä½½W¦ã€‚å¯ä»¥ä‹Éç”?SQLServerPreparedStatement ¾cÈš„ setter æ–ÒŽ³•ä¹‹ä¸€ä¸ºå‚æ•°æŒ‡å®šå€¹{€‚å¯ä½¿ç”¨çš?setter æ–ÒŽ³•ç”?IN 傿•°çš„æ•°æ®ç±»åž‹å†³å®šã€?/p>
  å?setter æ–ÒŽ³•ä¼ é€’å€¼æ—¶åQŒä¸ä»…éœ€è¦æŒ‡å®šè¦åœ¨å‚æ•îC¸ä½¿ç”¨çš„实际å€û|¼Œ˜q˜å¿…™åÀLŒ‡å®šå‚数在å˜å‚¨˜q‡ç¨‹ä¸çš„åºæ•°ä½ç½®ã€‚例如,如果å˜å‚¨˜q‡ç¨‹åŒ…å«å•个 IN 傿•°åQŒåˆ™å…¶åºæ•°å€égØ“ 1。如果å˜å‚¨è¿‡½E‹åŒ…å«ä¸¤ä¸ªå‚敎ͼŒåˆ™ç¬¬ä¸€ä¸ªåºæ•°å€égØ“ 1åQŒç¬¬äºŒä¸ªåºæ•°å€égØ“ 2ã€?/p>
ã€€ã€€ä½œäØ“å¦‚ä½•è°ƒç”¨åŒ…å« IN 傿•°çš„å˜å‚¨è¿‡½E‹çš„实例åQŒä‹Éç”?SQL Server 2005 AdventureWorks ½CÞZ¾‹æ•°æ®åº“ä¸çš?uspGetEmployeeManagers å˜å‚¨˜q‡ç¨‹ã€‚æ¤å˜å‚¨˜q‡ç¨‹æŽ¥å—å䨓 EmployeeID çš„å•ä¸ªè¾“å…¥å‚æ•?它是一个整数å€?åQŒç„¶åŽåŸºäºŽæŒ‡å®šçš„ EmployeeID ˜q”回雇员åŠå…¶¾lç†çš„é€’å½’åˆ—è¡¨ã€‚ä¸‹é¢æ˜¯è°ƒç”¨æ¤å˜å‚¨è¿‡½E‹çš„ Java 代ç åQ?/p>
  
以下是引用片ŒDµï¼š   public static void executeSprocInParams(Connection con) ...{    try ...{    PreparedStatement pstmt = con.prepareStatement("{call dbo.uspGetEmployeeManagers(?)}");    pstmt.setInt(1, 50);    ResultSet rs = pstmt.executeQuery();    while (rs.next()) ...{    System.out.println("EMPLOYEE:");    System.out.println(rs.getString("LastName") + ", " + rs.getString("FirstName"));    System.out.println("MANAGER:");    System.out.println(rs.getString("ManagerLastName") + ", " + rs.getString("ManagerFirstName"));    System.out.println();    }    rs.close();    pstmt.close();    }    catch (Exception e) ...{    e.printStackTrace();    }   } |
  3ä½¿ç”¨å¸¦æœ‰è¾“å‡ºå‚æ•°çš„å˜å‚¨è¿‡½E?/strong>
  使用 JDBC 驱动½E‹åºè°ƒç”¨æ¤ç±»å˜å‚¨˜q‡ç¨‹æ—Óž¼Œå¿…é¡»¾l“åˆ SQLServerConnection ¾cÈš„ prepareCall æ–ÒŽ³•使用 call SQL 转义åºåˆ—。带æœ?OUT 傿•°çš?call 转义åºåˆ—çš„è¯æ³•如下所½Cºï¼š
  
以下是引用片ŒDµï¼š {call procedure-name[([parameter][,[parameter]]...)]} |
  构é€?call 转义åºåˆ—æ—Óž¼Œè¯·ä‹Éç”??(é—®å·)å—ç¬¦æ¥æŒ‡å®?OUT 傿•°ã€‚æ¤å—符充当è¦ä»Žè¯¥å˜å‚¨è¿‡½E‹è¿”å›žçš„å‚æ•°å€¼çš„å ä½½W¦ã€‚è¦ä¸?OUT 傿•°æŒ‡å®šå€û|¼Œå¿…须在è¿è¡Œå˜å‚¨è¿‡½E‹å‰ä½¿ç”¨ SQLServerCallableStatement ¾cÈš„ registerOutParameter æ–ÒŽ³•指定å„傿•°çš„æ•°æ®¾cÕdž‹ã€?/p>
  使用 registerOutParameter æ–ÒŽ³•ä¸?OUT 傿•°æŒ‡å®šçš„值必™åÀL˜¯ java.sql.Types 所包å«çš?JDBC 数殾cÕdž‹ä¹‹ä¸€åQŒè€Œå®ƒåˆè¢«æ˜ å°„æˆæœ¬åœ?SQL Server 数殾cÕdž‹ä¹‹ä¸€ã€‚有å…?JDBC å’?SQL Server 数殾cÕdž‹çš„详¾l†ä¿¡æ¯ï¼Œè¯·å‚阅了è§?JDBC 驱动½E‹åºæ•°æ®¾cÕdž‹ã€?/p>
  当您对于 OUT 傿•°å?registerOutParameter æ–ÒŽ³•ä¼ é€’ä¸€ä¸ªå€¼æ—¶åQŒä¸ä»…å¿…™åÀLŒ‡å®šè¦ç”¨äºŽæ¤å‚数的数殾cÕdž‹åQŒè€Œä¸”必须在å˜å‚¨è¿‡½E‹ä¸æŒ‡å®šæ¤å‚æ•°çš„åºå·ä½ç½®æˆ–æ¤å‚æ•°çš„å¿U°ã€‚例如,如果å˜å‚¨˜q‡ç¨‹åŒ…å«å•个 OUT 傿•°åQŒåˆ™å…¶åºæ•°å€égØ“ 1;如果å˜å‚¨˜q‡ç¨‹åŒ…å«ä¸¤ä¸ªå‚æ•°åQŒåˆ™½W¬ä¸€ä¸ªåºæ•°å€égØ“ 1åQŒç¬¬äºŒä¸ªåºæ•°å€égØ“ 2ã€?/p>
ã€€ã€€ä½œäØ“å®žä¾‹åQŒåœ¨ SQL Server 2005 AdventureWorks ½CÞZ¾‹æ•°æ®åº“ä¸åˆ›å¾ä»¥ä¸‹å˜å‚¨˜q‡ç¨‹åQ?æ ÒŽ®æŒ‡å®šçš„æ•´æ•?IN 傿•° (employeeID)åQŒè¯¥å˜å‚¨˜q‡ç¨‹ä¹Ÿè¿”回å•个整æ•?OUT 傿•° (managerID)ã€‚æ ¹æ?HumanResources.Employee 表ä¸åŒ…å«çš?EmployeeIDåQŒOUT 傿•°ä¸è¿”回的å€égØ“ ManagerIDã€?/p>
  在下é¢çš„实例ä¸ï¼Œž®†å‘æ¤å‡½æ•îC¼ é€?AdventureWorks ½CÞZ¾‹æ•°æ®åº“的打开˜qžæŽ¥åQŒç„¶åŽä‹Éç”?execute æ–ÒŽ³•调用 GetImmediateManager å˜å‚¨˜q‡ç¨‹åQ?/p>
以下是引用片ŒDµï¼š   public static void executeStoredProcedure(Connection con) ...{    try ...{    CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");    cstmt.setInt(1, 5);    cstmt.registerOutParameter(2, java.sql.Types.INTEGER);    cstmt.execute();    System.out.println("MANAGER ID: " + cstmt.getInt(2));    }    catch (Exception e) ...{    e.printStackTrace();    }   } |
本示例ä‹É用åºå·ä½¾|®æ¥æ ‡è¯†å‚数。或者,也å¯ä»¥ä‹Éç”¨å‚æ•°çš„åç§°(而éžå…¶åºå·ä½¾|?æ¥æ ‡è¯†æ¤å‚数。下é¢çš„ä»£ç ½CÞZ¾‹ä¿®æ”¹äº†ä¸Šä¸€ä¸ªç¤ºä¾‹ï¼Œä»¥è¯´æ˜Žå¦‚何在 Java 应用½E‹åºä¸ä‹É用命å傿•°ã€‚请注æ„åQŒè¿™äº›å‚æ•°å¿U°å¯¹åº”于å˜å‚¨˜q‡ç¨‹çš„定义ä¸çš„傿•°å¿UŽÍ¼š CREATE PROCEDURE GetImmediateManager
以下是引用片ŒDµï¼š @employeeID INT,    @managerID INT OUTPUT   AS   BEGIN    SELECT @managerID = ManagerID    FROM HumanResources.Employee    WHERE EmployeeID = @employeeID   END |
  4 使用带有˜q”回状æ€çš„å˜å‚¨˜q‡ç¨‹
  使用 JDBC 驱动½E‹åºè°ƒç”¨˜q™ç§å˜å‚¨˜q‡ç¨‹æ—Óž¼Œå¿…é¡»¾l“åˆ SQLServerConnection ¾cÈš„ prepareCall æ–ÒŽ³•使用 call SQL 转义åºåˆ—。返回状æ€å‚æ•°çš„ call 转义åºåˆ—çš„è¯æ³•如下所½Cºï¼š
 
以下是引用片ŒDµï¼š  {[?=]call procedure-name[([parameter][,[parameter]]...)]} |
  æ¤å¤–åQŒå‘ registerOutParameter æ–ÒŽ³•ä¼ é€’è¿”å›žçŠ¶æ€å‚数值时åQŒä¸ä»…éœ€è¦æŒ‡å®šè¦ä½¿ç”¨çš„傿•°çš„æ•°æ®¾cÕdž‹åQŒè¿˜å¿…é¡»æŒ‡å®šå‚æ•°åœ¨å˜å‚¨è¿‡½E‹ä¸çš„åºæ•îC½¾|®ã€‚对于返回状æ€å‚敎ͼŒå…¶åºæ•îC½¾|®å§‹¾lˆäØ“ 1åQŒè¿™æ˜¯å› 为它始终是调用å˜å‚¨è¿‡½E‹æ—¶çš„ç¬¬ä¸€ä¸ªå‚æ•°ã€‚å°½½Ž?SQLServerCallableStatement ¾cÀL”¯æŒä‹Éç”¨å‚æ•°çš„åç§°æ¥æŒ‡½Cºç‰¹å®šå‚敎ͼŒä½†æ‚¨åªèƒ½å¯¹è¿”回状æ€å‚æ•îC‹Éç”¨å‚æ•°çš„åºå·ä½ç½®¾~–å·ã€?/p>
ã€€ã€€ä½œäØ“å®žä¾‹åQŒåœ¨ SQL Server 2005 AdventureWorks ½CÞZ¾‹æ•°æ®åº“ä¸åˆ›å¾ä»¥ä¸‹å˜å‚¨˜q‡ç¨‹åQ?/p>
  
以下是引用片ŒDµï¼š CREATE PROCEDURE CheckContactCity    (@cityName CHAR(50))   AS   BEGIN    IF ((SELECT COUNT(*)    FROM Person.Address    WHERE City = @cityName) > 1)    RETURN 1   ELSE    RETURN 0   END |
  在下é¢çš„实例ä¸ï¼Œž®†å‘æ¤å‡½æ•îC¼ é€?AdventureWorks ½CÞZ¾‹æ•°æ®åº“的打开˜qžæŽ¥åQŒç„¶åŽä‹Éç”?execute æ–ÒŽ³•调用 CheckContactCity å˜å‚¨˜q‡ç¨‹åQ?/p>
 
以下是引用片ŒDµï¼š  public static void executeStoredProcedure(Connection con) ...{    try ...{    CallableStatement cstmt = con.prepareCall("{? = call dbo.CheckContactCity(?)}");    cstmt.registerOutParameter(1, java.sql.Types.INTEGER);    cstmt.setString(2, "Atlanta");    cstmt.execute();    System.out.println("RETURN STATUS: " + cstmt.getInt(1));    }    cstmt.close();    catch (Exception e) ...{    e.printStackTrace();    }   } |
  使用 SQLServerCallableStatement ¾cÀLž„建对å˜å‚¨˜q‡ç¨‹çš„调用之åŽï¼Œå¯ä»¥ä½¿ç”¨ execute æˆ?executeUpdate æ–ÒŽ³•ä¸çš„ä»ÀL„一个æ¥è°ƒç”¨æ¤å˜å‚¨è¿‡½E‹ã€‚executeUpdate æ–ÒŽ³•ž®†è¿”回一ä¸?int å€û|¼Œè¯¥å€¼åŒ…å«å—æ¤å˜å‚¨è¿‡½E‹åª„å“的行数åQŒä½† execute æ–ÒŽ³•ä¸è¿”回æ¤å€¹{€‚如果ä‹Éç”?execute æ–ÒŽ³•åQŒåƈ且希望获得å—å½±å“的行数计敎ͼŒåˆ™å¯ä»¥åœ¨˜q行å˜å‚¨˜q‡ç¨‹åŽè°ƒç”?getUpdateCount æ–ÒŽ³•ã€?/p>
ã€€ã€€ä½œäØ“å®žä¾‹åQŒåœ¨ SQL Server 2005 AdventureWorks ½CÞZ¾‹æ•°æ®åº“ä¸åˆ›å¾ä»¥ä¸‹è¡¨å’Œå˜å‚¨˜q‡ç¨‹åQ?/p>
  
以下是引用片ŒDµï¼š CREATE TABLE TestTable    (Col1 int IDENTITY,    Col2 varchar(50),    Col3 int);      CREATE PROCEDURE UpdateTestTable    @Col2 varchar(50),    @Col3 int   AS   BEGIN    UPDATE TestTable    SET Col2 = @Col2, Col3 = @Col3   END; |
以下是引用片ŒDµï¼š public static void executeUpdateStoredProcedure(Connection con) ...{    try ...{    CallableStatement cstmt = con.prepareCall("{call dbo.UpdateTestTable(?, ?)}");    cstmt.setString(1, "A");    cstmt.setInt(2, 100);    cstmt.execute();    int count = cstmt.getUpdateCount();    cstmt.close();       System.out.println("ROWS AFFECTED: " + count);    }    catch (Exception e) ...{    e.printStackTrace();    }   } |
定义属性:实例å˜é‡
æ ¼å¼åQš[ 修饰½W?] ¾cÕdž‹ å˜é‡å?nbsp; [ = ? ]
实例å˜é‡å®šä¹‰åœ¨ç±»ä¸ä½†åœ¨ä“Q何方法之外ã€?br />
实例å˜é‡æœ‰é»˜è®¤å€û|¼šå„ç§å„æ ·çš?ã€?åŒæ•°¾l?
实例å˜é‡çš„作用域臛_°‘在本¾cÕd†…部,å—访问控制符的é™åˆ¶ã€?br />
在é‡åˆä½œç”¨åŸŸåQŒå®žä¾‹å˜é‡å’Œå±€éƒ¨å˜é‡å…许有命å冲çªåQ?#8220;局部优å…?#8221;ã€?br />
定义æ–ÒŽ³•åQ?br />
æ ¼å¼åQ?[ 修饰½W?] ˜q”回¾cÕdž‹ æ–ÒŽ³•å? 傿•°åˆ—表 ) [ throws 异常 ] { ······ }
java䏿‰€æœ‰å‚数都是å€ég¼ 递ã€?br />
å½“æ²¡æœ‰å€ÆD¿”回时åQŒè¿”回类型必™å»è¢«å®šä¹‰ä¸ºvoidã€?
˜q”回¾cÕdž‹å¿…须与方法åç›”R‚»åQŒå…¶ä»–修饰符å¯ä»¥è°ƒæ¢ä½ç½®ã€?br />
æž„é€ å™¨åQ?br />
在创建对象的˜q‡ç¨‹ä¸è°ƒç”¨çš„æ–ÒŽ³•ã€?br />
æž„é€ å™¨æ²¡æœ‰˜q”回¾cÕdž‹ã€?br />
æž„é€ å™¨çš„åå—与¾cÕd相åŒã€?br />
æ ¼å¼ä¸ºï¼š[ 修饰½W?] ¾cÕd( 傿•°åˆ—表 ){ }åQŒä¿®é¥°ç¬¦å¯ä»¥æ˜¯privateã€?protectedã€?defaultã€private
在一个对象的生æˆå‘¨æœŸä¸æž„é€ å™¨åªç”¨ä¸€‹Æ¡ï¼Œç”Þq³»¾lŸè‡ªåŠ¨è°ƒç”¨ï¼Œä¸å…许手工调用ã€?br />
½E‹åºå‘˜æ²¡æœ‰æä¾›ä¸€ä¸ªæž„é€ å™¨åQŒç³»¾lŸä¼šè‡ªåЍæä¾›ä¸€ä¸ªæ— å‚çš„æž„é€ å™¨ã€?br />
获得对象的方å¼ï¼š
通过newåQˆåœ¨å †ç©ºé—´ä¸ç”Œ™¯·åˆ†é…½Iºé—´åQ‰ï¼Œnew ¾cÕd()åQŒå¯ä»¥é€šè¿‡˜q™ç§å½¢å¼æˆ–的一个对象,˜q™æ—¶çš„å¯¹è±¡æ˜¯æ— æ³•ä½¿ç”¨åQŒå¿…™åÀLŠŠä»–çš„åœ°å€å˜æ”¾˜q›ä¸€ä¸ªå¯¹è±¡å˜é‡æ‰èƒ½å¤Ÿä½¿ç”¨ã€?br />
例如 åQ?br />
Car c=new Car();
注æ„åQ?br />
最好在写类时æä¾›ä¸€ä¸ªæ— å‚çš„æž„é€ å™¨ã€?br />
this关键å—:
this是个éšå¼å‚æ•°åQŒä»£è¡¨å½“å‰å¯¹è±?
publie class Student{
private String name;
public void setName(String name){
this.name=name; //this.name为当å‰å¯¹è±¡çš„æˆå‘˜å˜é‡
}
}
如果æŸä¸ªæž„é€ æ–¹æ³•çš„½W¬ä¸€ä¸ªè¯å¥å…·æœ‰åÅžå¼this( ··· )åQŒé‚£ä¹ˆè¿™ä¸ªæž„é€ æ–¹æ³•å°†è°ƒç”¨åŒä¸€¾cÖM¸çš„å…¶ä»–æž„é€ æ–¹æ³•ã€?br />
注æ„åQ?br />
åœ¨æž„é€ å™¨ä¸this(...)必须攑֜¨è¯¥æž„é€ å™¨çš„ç¬¬ä¸€è¡Œã€?br />
thisä¸èƒ½å‡ºçŽ°åœ¨é™æ€æ–¹æ³•里é?nbsp;
¾c…R€å¯¹è±¡ã€å®žä¾‹ä¸‰è€…的关系åQ?br />
¾c»ï¼šæ˜¯å¯¹è±¡çš„æ¨¡æ¿åQŒå¯ä»¥å®žä¾‹åŒ–对象
对象åQšç±»çš„个ä½?br />
实例åQšå®žçŽ°çš„å¯¹è±¡
student s;
s=new student();
å…¶ä¸ Student为类åQŒs为对象,new Student()为实例,s赋值åŽä¹Ÿæ˜¯å®žä¾‹äº†ã€?/p>
æ–ÒŽ³•é‡è²åQ?br />
æ–ÒŽ³•å相åŒï¼Œå‚数表ä¸åŒï¼Œä¸è€ƒè™‘˜q”回值类åž?但最好还是ä‹É˜q”回¾cÕdž‹ä¸€è‡?ã€?br />
¾~–è¯‘å™¨æ ¹æ®å‚敎ͼŒé€‰æ‹©ä¸€ä¸ªæ–¹æ³•,如果没有完全匚w…çš„ï¼Œå¯¹äºŽå‚æ•°è¡¨é‡‡ç”?#8220;å‘上ž®Þp¿‘匚w…原则”åQŒä½†ä¸å…许模‹‚׃¸¤å¯ã€?br />
æ–ÒŽ³•é‡è²å±è”½äº†ä¸€ä¸ªå¯¹è±¡çš„åŒä¸€¾cÀL–¹æ³•ç”±äºŽå‚æ•îC¸åŒæ‰€é€ æˆçš„差异ã€?br />
ž®è£…åQ?br />
¾cÈš„å±žæ€§åŠ private修饰½W¦ï¼Œæ¥é™åˆ¶åªèƒ½å¤Ÿåœ¨ç±»çš„å†…éƒ¨è¿›è¡Œè®¿é—®ï¼Œæœ‰æ•ˆçš„ä¿æŠ¤æ•°æ®ã€?br />
对于¾cÖM¸çš„ç§æœ‰å±žæ€§ï¼Œè¦å¯¹å…¶ç»™å‡ÞZ¸€å¯ÒŽ–¹æ³•getXxx()åQŒsetXxx()讉K—®¿U有属性,ä¿è¯å¯¹ç§æœ‰å±žæ€§çš„æ“ä½œçš„å®‰å…¨æ€§ã€?br />
æ–ÒŽ³•公开的是æ–ÒŽ³•的声明,å›_ª™åÈŸ¥é“傿•°å’Œ˜q”回值就å¯ä»¥è°ƒç”¨è¯¥æ–¹æ³•,éšè—æ–ÒŽ³•的实现的¾l†èŠ‚ã€?br />
一个对象和外界的蔾pÕdº”当通过一个统一的接å£ï¼Œåº”当公开的公开åQŒåº”当éšè—çš„éšè—ã€?br />
¾l§æ‰¿åQ?br />
父类到å¾cÀL˜¯ä»Žä¸€èˆ¬åˆ°ç‰ÒŽ®Šçš„å…³¾p…R€?br />
泛化åQšå°†ä¸åŒåç±»ä¸çš„共性抽象æˆçˆ¶ç±»çš„过½E‹ã€?br />
特化åQšåœ¨åŽŸæœ‰çˆ¶ç±»çš„åŸº¼‹€ä¸ŠåŠ å…¥ä¸€äº›ä¸ªæ€§çš„˜q‡ç¨‹ã€?br />
原则åQšçˆ¶¾cÀL”¾å…±æ€§ï¼Œå类放个性ã€?br />
¾l§æ‰¿çš„关键å—åQšextends
Javaåªæ”¯æŒå•¾l§æ‰¿åQšä¸€ä¸ªç±»æœ€å¤šåªæœ‰ä¸€ä¸ªç›´æŽ¥çš„父类ã€?/p>
æ–ÒŽ³•覆盖åQ?br />
æ–ÒŽ³•å:相åŒ
傿•°è¡¨ï¼šç›¸åŒ
讉K—®é™åˆ¶½W¦ï¼šç›¸åŒæˆ–者更å®?br />
˜q”å›žå€¼ç±»åž‹ï¼šç›¸åŒæˆ–者å¾c»è¿”回的¾cÕdž‹æ˜¯çˆ¶¾c»è¿”回的¾cÕdž‹çš„å¾c»ï¼ˆåœ¨JDK5.0以åŽåQ?br />
抛出的异常:ä¸èƒ½æ¯”父¾cÀL›´å®½ã€?br />
super关键å—:
super()è¡¨ç¤ºè°ƒç”¨çˆ¶ç±»çš„æž„é€ å™¨
super()也和this()ä¸€æ ·å¿…™åÀL”¾åœ¨æ–¹æ³•çš„½W¬ä¸€å?br />
super()å’Œthis()ä¸èƒ½åŒæ—¶å‡ºçް
superå¯ä»¥å±è”½å类属性和父类属性é‡å时带æ¥çš„属性é®ç›–,super. 表示调用父类的方法或属æ€?br />
在å¾cÈš„æž„é€ å™¨ä¸å¦‚果没有指定调用父¾cÈš„å“ªä¸€ä¸ªæž„é€ å™¨åQŒé‚£ä¹ˆå°±ä¼šè°ƒç”¨çˆ¶¾cÈš„æ— å‚æž„é€ å™¨åQŒå³super()
注æ„åQ?br />
çˆ¶ç±»çš„æž„é€ å™¨ä¸èƒ½è¢«å¾cÈ‘ôæ‰?br />
æ–ÒŽ³•和属性å¯ä»¥è¢«¾l§æ‰¿åQŒæƒé™ä¸é™åˆ¶èƒ½å¦¾l§æ‰¿˜q‡æ¥åQŒé™åˆ¶çš„æ˜¯èƒ½å¦ç›´æŽ¥è®¿é—?br />
å…ˆæž„é€ çˆ¶¾c»ï¼ŒåŽæž„é€ å¾c»ï¼Œå…ˆthisåŽsuper
多æ€ï¼š
多æ€åˆ†ä¸ÞZ¸¤¿U:¾~–译时多æ€å’Œ˜q行时多æ€ã€?br />
¾~–译时类型:主观概念åQŒæŠŠå®ƒçœ‹ä½œä»€ä¹ˆã€?br />
˜q行时类型:客观概念åQŒå®žé™…它是什么ã€?br />
例:Animal a=new Dog();
指ç€ç‹—é—®åQŒè¿™ä¸ªåŠ¨ç‰©æ˜¯ä»€ä¹ˆï¼Ÿ
˜q行时多æ€çš„三原则:
对象¾cÕdž‹ä¸å˜ã€?br />
åªèƒ½å¯¹å¯¹è±¡è°ƒç”¨ç¼–译时¾cÕdž‹ä¸å®šä¹‰çš„æ–ÒŽ³•ã€?br />
在程åºçš„˜q行æ—Óž¼Œæ ÒŽ®å¯¹è±¡çš„è¿è¡Œæ—¶¾cÕdž‹åQŒæ‰¾è¦†ç›–åŽçš„æ–ÒŽ³•æ¥è°ƒç”¨ã€‚(˜q行时动æ€ç±»åž‹ç»‘定)
强制¾cÕdž‹è½¬æ¢åQ?一定没有新对象生æˆã€?父类的引用赋值给å类的引用需è¦è¿›è¡Œå¼ºåˆ¶ç±»åž‹è{æ?
关键å—:instanceof
用法åQšå¼•ç”?nbsp; instanceof ¾cÕd 判斘q™ä¸ªå¼•用所指å‘的对象是å¦å±žäºŽè¿™ä¸ªç±»ã€?br />
用在强制转æ¢ä¹‹å‰åQŒé¿å…类型è{æ¢å¼‚常ã€?br />
if(a instanceof Dog){
Dog d=(Dog)a;
}
多æ€çš„作用åQšæŠŠä¸åŒçš„å¾cÕd¯¹è±¡éƒ½å½“作父类æ¥çœ‹åQŒå¯ä»¥å±è”½ä¸åŒå¾cÕd¯¹è±¡ä¹‹é—´çš„差异åQŒå†™å‡ºé€šç”¨çš„代ç ,åšå‡ºé€šç”¨çš„ç¼–½E‹ï¼Œä»¥é€‚åº”éœ€æ±‚çš„ä¸æ–å˜åŒ–ã€?/p>
傿•°ä¼ 递时åQŒç®€å•ç±»åž‹è¿›è¡Œå€ÆD{é€?nbsp;(傿•°˜q›è¡Œä¼ é€’æ—¶éƒ½ä¼šå…ˆåŽ»æ ˆä¸ç”Ÿæˆä¸€ä¸ªå‰¯æœ¬çš„åQŒä‹É用结æŸåŽé‡Šæ”¾)
自动¾cÕdž‹æå‡åQ?br />
byte a = 1;
byte b = 2;
a = a+b; //¾~–译出错自动¾cÕdž‹æå‡æˆint
a += b; //è‡ªåŠ æ²¡æœ‰è‡ªåŠ¨¾cÕdž‹æå‡é—®é¢˜
¾cÕdž‹è‡ªåЍæå‡è§„则åQ?br />
aå’Œb作柿U追Ž?br />
aå’Œb䏿œ‰doubleåQŒç»“果就是double
aå’Œb䏿œ‰floatåQŒç»“果就是float
aå’Œb䏿œ‰longåQŒç»“果就是long
除æ¤ä¹‹å¤–åQŒç»“果都是int
把高å—节转æˆä½Žå—èŠ?需è¦ä½œå¼ºåˆ¶¾cÕdž‹è½¬æ¢. byte c=(byte)a+b;
¿UÖM½˜qç®—½W¦ï¼šæ•ˆçŽ‡æœ€é«?br />
>> 有符å·å³¿U»ï¼Œè¡¥ç¬¦å·ä½
¿U»è´Ÿæ•îC½åQŒåˆ™ž®†è¯¥æ•°å€¼åŠ 32åŽå†˜q›è¡Œ¿UÖM½
数值的2˜q›åˆ¶æ˜¯æŒ‰ç…§è¡¥ç ä¿å˜çš„
>>> å³ç§»åŽé«˜ä½éƒ½è¡?
逻辑˜qç®—½W¦ï¼š
&/|也å¯ä»¥ä½œä¸ºé€»è¾‘˜qç®—½W?br />
&& 先判æ–å‰é¢ä¸€ä¸ªæ¡ä»Óž¼Œå¦‚果为å‡åQŒåˆ™ä¸ç”¨è®¡ç®—åŽä¸€ä¸ªæ¡ä»?br />
|| 先判æ–å‰é¢ä¸€ä¸ªæ¡ä»Óž¼Œå¦‚果为真åQŒåˆ™ä¸ç”¨è®¡ç®—åŽä¸€ä¸ªæ¡ä»?br />
" + "˜qç®—½W¦ï¼š
两个æ“作的对象是数值时åQŒæ˜¯åŠ æ³•
如果有一个是å—符串时åQŒåˆ™æ˜¯å—½W¦ä¸²çš„连æŽ?br />
‹¹ç¨‹æŽ§åˆ¶è¯å¥åQ?br />
åŒCore C++
switchä¸çš„å˜é‡¾cÕdž‹åªèƒ½æ˜¯byteã€?shortã€intã€char四秾cÕdž‹
数组åQ?br />
声明数组åQ?nbsp;
数组能以下列形å¼å£°æ˜ŽåQ?br />
¾cÕdž‹[] array;
¾cÕdž‹ array[];
注:
JAVA䏿ލè用åQšç±»åž‹[] array;
一个数¾l„是一个对è±?br />
声明一个数¾l„没有创å»ÞZ¸€ä¸ªå¯¹è±?br />
声明时ä¸ç”¨æŒ‡å®šé•¿åº?br />
åˆ›å¾æ•°ç»„åQ?br />
创å¾åŸºæœ¬æ•°æ®¾cÕdž‹æ•°ç»„åQšint[] i = new int[2];
创å¾å¼•用数殾cÕdž‹æ•°ç»„åQšStudent[] s = new Student[100];
数组创å¾åŽå…¶ä¸çš„å…ƒç´ æœ‰åˆå§‹å€?br />
¾cÕdž‹ 黙认å€?
byte 0
short 0
int 0
long 0l
float 0.0f
double 0.0d
char \u0000
boolean false
reference types null
注:
åˆ›å¾æ—¶ä¸€å®šè¦æŒ‡å®šé•¿åº¦
int[] i2=new int[]; //error
åˆå§‹åŒ–æ•°¾l„:
声明ã€åˆ›å»ºã€åˆå§‹åŒ–分开åQ?
int[] i; //定义数组
i = new int[2]; //分酽Iºé—´
i[0] = 0; //åˆå§‹åŒ?br />
i[1] = 1;
声明ã€åˆ›å»ºã€åˆå§‹åŒ–在åŒä¸€æ—‰™—´ åQ?br />
int[] i = {0,1}; //昄¡¤ºåˆå§‹åŒ?nbsp; {}䏿œ‰å‡ 个å€?则数¾l„é•¿åº¦äØ“å‡?br />
Student[] s = {new Student(),new Student()};
注: int[] i=new int[]{1,2,3}; //åŽé¢[]ä¸ä¸å¯ä»¥å†™æ•°å€?br />
int[] i1=new int[3]{1,2,3}; //error
二维数组åQ?其实是一个一¾l´æ•°¾l„,它的æ¯ä¸€ä¸ªå…ƒç´ åˆæ˜¯ä¸€ä¸ªä¸€¾l´æ•°¾l?
int[][] i1 = new int[2][3];
int[][] i4 = {{1,1,1},{2,2,2},{3,3,3}};
int[][] i3 = new int[][3]; //ä¸å…è®”R«˜¾l´æ²¡åˆ†é…½Iºé—´è€Œå…ˆ¾l™ä½Ž¾l´åˆ†é…空é—?br />
int[][] i2 = new int[2][];
i2[0] = new int[2];
i2[1] = new int[3];
数组长度åQ?br />
数组的属性length
数组长度一旦确å®?ä¸å¯æ”¹å˜
int[] i = new int[5]; 则i.length= 5
数组拯‚´åQ?br />
¾pÈ»Ÿ¾c»Systemæä¾›çš?br />
static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
srcåQ?æºæ•°¾l?nbsp;
srcPosåQ?ä»Žæºæ•°ç»„哪个ä½ç½®å¼€å§‹æ‹·è´?ä½ç½®æŒ‡çš„æ˜¯å…ƒç´ çš„ä¸‹æ ‡)
deståQ?ç›®æ ‡æ•°ç»„
destPosåQ?拯‚´çš„å…ƒç´ æ”¾åˆ°ç›®æ ‡æ•°¾l„的起始ä½ç½®
lengthåQ?拯‚´å¤šå°‘ä¸?br />
数组排åºåQ?br />
è‡ªå·±å®žçŽ°ä¸€ä¸ªæŽ’åºæ–¹æ³•楘q›è¡ŒæŽ’åº
或者调用java.util.Arrays.sort(Object o)
Java的垃圑֛žæ”Óž¼š
ç”׃¸€ä¸ªåŽå°çº¿½E‹gc˜q›è¡Œåžƒåœ¾å›žæ”¶
虚拟机判定内å˜ä¸å¤Ÿçš„æ—¶å€™ä¼šä¸æ–代ç çš„è¿è¡Œï¼Œ˜q™æ—¶å€™gcæ‰è¿›è¡Œåžƒåœ‘Ö›žæ”?br />
¾~ºç‚¹åQšä¸èƒ½å¤Ÿ¾_„¡¡®çš„去回收内å˜
java.lang.System.gc(); 廸™®®å›žæ”¶å†…å˜åQŒä½†¾pÈ»Ÿä¸ä¸€å®šå›žåº”ï¼Œä»–ä¼šå…ˆåŽ»çœ‹å†…å˜æ˜¯å¦å¤Ÿç”¨ï¼Œå¤Ÿç”¨åˆ™ä¸äºˆç†ç¬ï¼Œä¸å¤Ÿç”¨æ‰ä¼šåŽ»˜q›è¡Œåžƒåœ¾å›žæ”¶
内å˜ä¸ä»€ä¹ˆç®—是垃圾:
ä¸åœ¨è¢«å¼•用的对象(局部å˜é‡ï¼Œæ²¡æœ‰æŒ‡é’ˆæŒ‡å‘çš?
java的安全性:
沙箱机制åQšåªèƒ½åšæ²™ç®±å…许的æ“ä½?br />
通过下é¢çŽ¯èŠ‚åQŒå®žçް安å…?br />
åŠ è²æœ‰ç”¨çš„类文äšgåQŒä¸éœ€è¦çš„ä¸åŠ è½?br />
æ ¡éªŒå—节ç ,查看å…许的æ“ä½?br />
查看代ç 和虚拟机的特性是å¦ç›¸½W?br />
æŸ¥çœ‹ä»£ç æ˜¯å¦æœ‰ç ´åæ€?br />
æŸ¥çœ‹æ˜¯å¦æœ‰è¿è§„æ“作,如越ç•?br />
查看¾cÕdž‹æ˜¯å¦åŒšw…åQŒç±»åž‹è{æ¢æ˜¯å¦èƒ½æ£ç¡®æ‰§è¡Œ
æºç¨‹åºï¼š
package mypack; //相当于一个目�br />
public class HelloWorld{
public static void main(String[] args){
System.out.println(“Hello World”);
}
}
注:
1ã€æ–‡ä»¶å必须和public修饰的类å一è‡ß_¼Œä»?javaä½œäØ“æ–‡äšgåŽç¼€åQŒå¦‚果定义的¾cÖM¸æ˜¯public的,则文件å与类åå¯ä»¥ä¸åŒã€?br />
2ã€ä¸€ä¸?javaæ–‡äšgä¸å¯ä»¥æœ‰å¤šä¸ªclassåQŒä½†æ˜¯åªæœ‰ä¸€ä¸ªpublic修饰的类ã€?br />
3ã€javaæºä»£ç 文件编译åŽåQŒä¸€ä¸ªç±»å¯¹åº”生æˆä¸€ä¸?classæ–‡äšg
4ã€ä¸€ä¸ªjava应用½E‹åºåº”该包å«ä¸€ä¸ªmain()æ–ÒŽ³•åQŒè€Œä¸”å…¶ç¾å是固定的,它是应用½E‹åºçš„入壿–¹æ³•,å¯ä»¥å®šä¹‰åœ¨ä“Qæ„一个类ä¸ï¼Œä¸ä¸€å®šæ˜¯public修饰的类
¾~–译åQšjavac -d . HelloWorld.java
嫿œ‰åŒ…çš„¾c»ï¼Œåœ¨ç¼–译的时候最好用上é¢çš„æ ¼å¼ï¼Œ-d指的是让该类生æˆçš„æ—¶å€™æŒ‰ç…§åŒ…¾l“æž„åŽÈ”Ÿæˆï¼Œ" . "指的是在当å‰è·¯å¾„下生æˆ?br />
如果ä¸ç”¨ä¸Šé¢çš„æ ¼å¼ï¼Œä¹Ÿå¯ä»¥ç”¨javac HelloWorld.javaåQŒä½†æ˜¯éœ€è¦æ³¨æ„的是包¾l“æž„ž®Þp¦ç”Þp‡ªå·±åŽ»å»ºç«‹åQŒç„¶åŽå°†ç”Ÿæˆçš?classæ–‡äšg攑ֈ°è¯¥ç›®å½•下
执行åQšjava mypack.HelloWorld
ž®†å—èŠ‚ç æ–‡äšg交给Java虚拟机去解释执行
éœ€è¦æ³¨æ„的事,必须使用包å.¾cÕd去解释执è¡?br />
åŒ?package)åQšæŠŠæºæ–‡ä»¶æ”¾åœ¨ç›®å½•下
ç”׃ºŽå·¥ç¨‹çš„需è¦ï¼Œž®†ä¸åŒçš„æºæ–‡ä»¶æ”¾åœ¨ä¸åŒçš„目录下,从而引入了包ã€?br />
包å¯ä»¥çœ‹ä½œå°±æ˜¯ä¸€ä¸ªå˜æ”¾javaæºæ–‡ä»¶çš„目录ã€?br />
在æºç ä¸å£°æ˜Žä¸€ä¸ªåŒ…å:package p;(åªèƒ½æ”‘Öœ¨½W¬ä¸€è¡Œï¼Œä¸”最多åªèƒ½æ˜¯ä¸€è¡?
如果指定多层包,那么在包å之间我们å¯ä»¥ç”¨.ä½œäØ“åˆ†éš”½W¦ï¼špackage p1.p2.p3.p4;
ç”?#8220;javac HelloWorld.java –d ¾l对路径”åQŒç¼–译åŽç”Ÿæˆçš„å—èŠ‚ç æ–‡äšgž®×ƒ¼šæ”‘Öœ¨æŒ‡å®šçš„包¾l“æž„ä¸?br />
执行该程åºéœ€è¦ç”¨" java 包å.¾cÕd "
引进包ä¸çš„æŸä¸ªç±»åQšimport 包å.¾cÕd;
引进包ä¸çš„æ‰€æœ‰ç±»åQšimport 包å.*;
注释åQ?br />
// å•行注释åQ?到本行结æŸçš„æ‰€æœ‰å—½W¦ä¼šè¢«ç¼–译器忽略
/* */ 多行注释åQ?nbsp; åœ?* */之间的所有嗽W¦ä¼šè¢«ç¼–译器忽略
/** */ 文档注释åQ?javaç‰ÒŽœ‰çš„,åœ?** */之间的所有嗽W¦ä¼šè¢«ç¼–译器忽略
å¯ä»¥ç”¨javadoc把javaæºç¨‹åºä¸˜q™ç§æ³¨é‡ŠæŠ½å–出æ¥å½¢æˆhtml™åµé¢(åªæœ‰å†™åœ¨åŒ…,¾c»ï¼Œå±žæ€§ï¼Œæ–ÒŽ³•åQŒæž„é€ å™¨åQŒå¼•入之å‰çš„æ³¨é‡Šæ‰å¯ä»¥è¿›è¡ŒæŠ½å?
æ ‡è¯†½W¦ï¼š
命å规则åQ?br />
(1) ç”±å—æ¯ã€æ•°å—ã€ä¸‹åˆ’线ã€?¾l„æˆåQŒä¸èƒ½ä»¥æ•°å—å¼€å¤?br />
(2) 大å°å†™æ•æ„?br />
(3) ä¸å¾—使用javaä¸çš„关键å—å’Œä¿ç•™å?br />
关键å—:都是ž®å†™çš„,jdk1.2多了strictfp(¾l准‹¹®ç‚¹åž?åQŒå…³é”®å— jdk1.4多了assert(æ–言)关键å—, jdk1.5多了enum(æžšä‹D) 关键å?br />
éšç€å¦ä¹ ˜q›åº¦åQŒä¼šæ…¢æ…¢æŽ¥è§¦åˆ°çš„
trueã€falseã€nullä¸¥æ ¼è¯´ä¸åº”该½Ž—关键å—åQŒåº”¿U°å…¶ä¸ÞZ¿ç•™å—æ›´åˆé€?br />
ä¹ æƒ¯åQ?br />
(1) æ ‡è¯†½W¦è¦½W¦åˆè¯ä¹‰ä¿¡æ¯
(2) åŒ…åæ‰€æœ‰å—æ¯å°å†?br />
(3) ¾cÕdæ¯ä¸ªå•è¯é¦–å—æ¯å¤§å†™ï¼Œå…¶å®ƒž®å†™ //TarenaStudent
(4) å˜é‡å’Œæ–¹æ³•:½W¬ä¸€ä¸ªå•è¯å°å†™ï¼Œä»Žç¬¬äºŒä¸ªå•è¯å¼€å§‹é¦–å—æ¯å¤§å†™ //tarenaStudent
(5) 帔R‡åQšæ‰€æœ‰å—æ¯å¤§å†™ï¼Œæ¯ä¸ªå•è¯ä¹‹é—´ç”? _ "˜qžæŽ¥
基本数殾cÕdž‹åQ?¿U?br />
1) æ•´åž‹
byte 1B 8�nbsp; -128�27
short 2B 16�nbsp; -2^15�2^15)-1
int 4B 32�nbsp; -2^31�2^31)-1
long 8B 64�nbsp; -2^63�2^63)-1
2) ‹¹®ç‚¹¾cÕdž‹
float 4B 32ä½?nbsp;
double 8B 64ä½?
3) å—符¾cÕdž‹
char 2B 16ä½?
4) 布尔� 1B
boolean false/true
注:
1ã€Javaä¸çš„自动¾cÕdž‹æå‡é—®é¢˜ã€?br />
1)ã€æ£å‘过½E‹ï¼šä»Žä½Žå—节到高å—节å¯ä»¥è‡ªåŠ¨è½¬æ¢ã€?br />
byte->short->int->long->float->double
2)ã€é€†å‘˜q‡ç¨‹åQšä»Žé«˜å—节到低å—节用强制¾cÕdž‹è½¬æ¢ã€?br />
例:int a = (int)4.562åQ?br />
注:逆å‘转梞®†ä¸¢å¤Þq²¾åº¦ã€?br />
2ã€booleanåQšåªæœ‰trueå’Œfalseã€?br />
3ã€charåQšJavaä¸ç”¨" \uå››ä½åå…˜q›åˆ¶çš„æ•°å?(å³ä‹É在注释ä¸å‡ºçް\uåQŒåŽé¢å¦‚æžœè·Ÿçš„ä¸æ˜?个数å—,也会报错)"表示ž®†å—½W¦è{æ¢æˆå¯¹åº”çš„unicode¾~–ç åQŒå—½W¦ç±»åž‹è¦ç”¨å•引巿‹¬è“væ¥ã€?br />
4ã€é»™è®¤æÕQç‚¹ç±»åž‹äØ“doubleåQŒfloat数殾cÕdž‹æœ‰ä¸€ä¸ªå޾~€ä¸? f "æˆ? F "ã€?br />
5ã€long¾cÕdž‹æœ‰ä¸€ä¸ªå޾~€åQŒäØ“" l " 或è€? L "
引用数殾cÕdž‹åQ?br />
¾c…R€æŽ¥å£ã€æ•°¾l?br />
引用¾cÕdž‹ å˜é‡å?= new 引用¾cÕdž‹å?傿•°); //newåŽé¢ä¸€èˆ¬è·Ÿçš„éƒ½æ˜¯ç±»çš„æž„é€ å™¨
æˆå‘˜åQšå†™åœ¨ç±»ä½“括å·é‡Œé¢çš„
内嘽Iºé—´çš„分é…:
内å˜åˆ†äØ“åQ?br />
æ ˆï¼šå˜æ”¾½Ž€å•æ•°æ®ç±»åž‹å˜é‡?值和å˜é‡å都å˜åœ¨æ ˆä¸)åQŒå˜æ”‘Ö¼•用数æ®ç±»åž‹çš„å˜é‡å以åŠå®ƒæ‰€æŒ‡å‘的实例的首地å€
å †ï¼šå˜æ”¾å¼•用数殾cÕdž‹çš„实ä¾?/p>