開發過程當中接觸到了從jdk1.5---jdk1.7的使用,在不一樣的階段,都使用過了jdk的一些新特性,操做起來更加方面啦!特此總結了下,如下是測試代碼: java
JDK1.5新特性: git
1.自動裝箱與拆箱: 程序員
Integer iObj = 3; System.out.println(iObj + 12); Integer i1 = 137(-128--127範圍時,爲true); Integer i2 = 137(-128--127範圍時,爲true); System.out.println(i1 == i2); //false,可是括號中時卻返回ture,緣由是Integer採用的是享元模式 Integer i3 = Integer.valueOf(213); Integer i4 = Integer.valueOf(213); System.out.println(i3==i4);//同上,另外一種包裝形式
2.枚舉(經常使用來設計單例模式) 正則表達式
public class EnumTest { /** * @param args */ public static void main(String[] args) { WeekDay1 weekDay = WeekDay1.MON; System.out.println(weekDay.nextDay()); WeekDay weekDay2 = WeekDay.FRI; System.out.println(weekDay2); System.out.println(weekDay2.name()); System.out.println(weekDay2.ordinal()); System.out.println(WeekDay.valueOf("SUN").toString()); System.out.println(WeekDay.values().length); new Date(300){}; } public enum WeekDay{ SUN(1),MON(),TUE,WED,THI,FRI,SAT; private WeekDay(){System.out.println("first");} private WeekDay(int day){System.out.println("second");} } public enum TrafficLamp{ RED(30){ public TrafficLamp nextLamp(){ return GREEN; } }, GREEN(45){ public TrafficLamp nextLamp(){ return YELLOW; } }, YELLOW(5){ public TrafficLamp nextLamp(){ return RED; } }; public abstract TrafficLamp nextLamp(); private int time; private TrafficLamp(int time){this.time = time;} } }
3.靜態導入數據庫
import static java.lang.Math.*; public class StaticImport { public static void main(String[] args){ int x = 1; try { x++; } finally { System.out.println("template"); } System.out.println(x); System.out.println(max(3, 6)); System.out.println(abs(3 - 6)); } }
4.可變參數apache
public class VarableParameter { /** * @param args */ public static void main(String[] args) { System.out.println(add(2,3)); System.out.println(add(2,3,5)); } public static int add(int x,int... args){ int sum = x; /* for(int i=0;i<args.length;i++){ sum += args[i]; }*/ for(int arg : args){ sum += arg; } return sum; } }
5.內省編程
ReflectPoint pt1 = new ReflectPoint(3,5); BeanInfo beanInfo = Introspector.getBeanInfo(pt1.getClass()); PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors(); Object retVal = null; for(PropertyDescriptor pd : pds){ Method methodGetX = pd.getReadMethod(); retVal = methodGetX.invoke(pt1); }
jdk1.6新特性:api
1.Web服務元數據數組
Java 裏的Web服務元數據跟微軟的方案基本沒有語義上的區別,自從JDK5添加了元數據功能(Annotation)以後,SUN幾乎重構了整個J2EE體 系, 因爲變化很大,乾脆將名字也重構爲Java EE, Java EE(當前版本爲5.0)將元數據歸入不少規範當中,這其中就包括Web Services的相關規範, 加入元數據以後的Web Services服務器端編程模型就跟上面看到的C#片段差很少了, 這顯然比之前的JAX-RPC編程模型簡單(固然, Axis的編程模型也很簡單).這裏要談的Web服務元數據(JSR 181)只是Java Web 服務規範中的一個,它跟Common Annotations, JAXB2, StAX, SAAJ和JAX-WS等共同構成Java EE 5的Web Services技術堆棧.瀏覽器
package WebServices; import java.io.File; import java.io.IOException; import javax.jws.Oneway; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebResult; import javax.jws.WebService; import javax.xml.ws.Endpoint; /** * @author chinajash */ @WebService(targetNamespace="http://blog.csdn.net/chinajash",serviceName="HelloService") public class WSProvider { @WebResult(name="Greetings")//自定義該方法返回值在WSDL中相關的描述 @WebMethod public String sayHi(@WebParam(name="MyName") String name){ return "Hi,"+name; //@WebParam是自定義參數name在WSDL中相關的描述 } @Oneway //代表該服務方法是單向的,既沒有返回值,也不該該聲明檢查異常 @WebMethod(action="printSystemTime",operationName="printSystemTime")//自定義該方法在WSDL中相關的描述 public void printTime(){ System.out.println(System.currentTimeMillis()); } public static void main(String[] args) { Thread wsPublisher = new Thread(new WSPublisher()); wsPublisher.start(); } private static class WSPublisher implements Runnable{ public void run() { //發佈WSProvider到http://localhost:8888/chinajash/WSProvider這個地址,以前必須調用wsgen命令 //生成服務類WSProvider的支持類,命令以下: //wsgen -cp . WebServices.WSProvider Endpoint.publish("http://localhost:8888/chinajash/WSProvider",new WSProvider()); } } }
若是想看到Web Services Engine生成的WSDL文件是否遵照上面的元數據, 咱們沒有必要將上面的WSProvider部署到支持JSR-181的應用服務器或Servlet形式的Web Services Engine,如今JDK6已經提供了一個很簡單的機制能夠用來測試和發佈Web Services,下面講講如何在JDK6環境下發布Web Services和查看生成的WSDL
1.將<JDK_HOME>/bin加入path環境變量
2.在命令行下切換當前目錄到WSProvider的class文件所在的目錄,運行下面命令
wsgen -cp . WebServices.WSProvider
在這個例子中會生成如下3個類的源代碼文件及class文件
SayHi
SayHiResponse
PrintTime
3.執行以下代碼發佈WSProvider到http://localhost:8888/chinajash/WSProvider,在這裏能夠執行WSProvider類的main方法就能夠
Endpoint.publish("http://localhost:8888/chinajash/WSProvider",new WSProvider());
4.在瀏覽器輸入http://localhost:8888/chinajash/WSProvider?wsdl就能夠看到生成的WSDL文件,爲了節省篇幅,這裏就不把生成的WSDL文件貼上了,你們能夠本身動手試試.
2.腳本語言支持
JDK6增長了對腳本語言的支持(JSR 223),原理上是將腳本語言編譯成bytecode,這樣腳本語言也能享用Java平臺的諸多優點,包括可移植性,安全等,另外,因爲如今是編譯成 bytecode後再執行,因此比原來邊解釋邊執行效率要高不少。加入對腳本語言的支持後,對Java語言也提供瞭如下好處。
一、許多腳本語言都有動態特性,好比,你不須要用一個變量以前先聲明它,你能夠用一個變量存放徹底不一樣類型的對象,你不須要作強制類型轉換,由於轉換都是自動的。如今Java語言也能夠經過對腳本語言的支持間接得到這種靈活性。
二、 能夠用腳本語言快速開發產品原型,由於如今能夠Edit-Run,而無需Edit-Compile-Run,固然,由於Java有很是好的IDE支持,我 們徹底能夠在IDE裏面編輯源文件,而後點擊運行(隱含編譯),以此達到快速開發原型的目的,因此這點好處基本上能夠忽略。
三、經過引入腳本語言能夠輕鬆實現Java應用程序的擴展和自定義,咱們能夠把原來分佈在在Java應用程序中的配置邏輯,數學表達式和業務規則提取出來,轉用JavaScript來處理。
Sun的JDK6實現包含了一個基於Mozilla Rhino的 腳本語言引擎,支持JavaScript,這並非說明JDK6只支持JavaScript,任何第三方均可以本身實現一個JSR-223兼容的腳本引擎 使得JDK6支持別的腳本語言,好比,你想讓JDK6支持Ruby,那你能夠本身按照JSR 223的規範實現一個Ruby的腳本引擎類,具體一點,你須要實現javax.script.ScriptEngine(簡單起見,能夠繼承 javax.script.AbstractScriptEngine)和javax.script.ScriptEngineFactory兩個接口。 固然,在你實現本身的腳本語言引擎以前,先到scripting.dev.java.net project 這裏看看是否是有人已經幫你作了工做,這樣你就能夠直接拿來用就行。
Scripting API
--------------------------------------------------------------------------------
Scripting API是用於在Java裏面編寫腳本語言程序的API, 在Javax.script中能夠找到Scripting API,咱們就是用這個API來編寫JavaScript程序,這個包裏面有一個ScriptEngineManager類,它是使用Scripting API的入口,ScriptEngineManager能夠經過jar服務發現(service discovery)機制尋找合適的腳本引擎類(ScriptEngine),使用Scripting API的最簡單方式只需下面三步
一、建立一個ScriptEngineManager對象
二、經過ScriptEngineManager得到ScriptEngine對象
三、用ScriptEngine的eval方法執行腳本
下面是一個Hello World程序
/** * @author chinajash */public class HelloScript {public static void main(String[] args) throws Exception { ScriptEngineManager factory = new ScriptEngineManager();//step 1 ScriptEngine engine = factory.getEngineByName("JavaScript");//Step 2 engine.eval("print('Hello, Scripting')");//Step 3 } }運行上面程序,控制檯會輸出Hello, Scripting上面這個簡單的Scripting程序演示瞭如何在Java裏面運行腳本語言,除此以外,咱們還能夠利用Scripting API實現如下功能一、暴露Java對象爲腳本語言的全局變量二、在Java中調用腳本語言的方法三、腳本語言能夠實現Java的接口四、腳本語言能夠像 Java同樣使用JDK平臺下的類下面的類演示了以上4種功能package Scripting;import java.io.File;import javax.script.Invocable;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;/** * @author chinajash */public class ScriptingAPITester { public static void main(String[] args) throws Exception { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("JavaScript"); testScriptVariables(engine);//演示如何暴露Java對象爲腳本語言的全局變量 testInvokeScriptMethod(engine);//演示如何在Java中調用腳本語言的方法 testScriptInterface(engine);//演示腳本語言如何實現Java的接口 testUsingJDKClasses(engine);//演示腳本語言如何使用JDK平臺下的類 } public static void testScriptVariables(ScriptEngine engine) throws ScriptException{ File file = new File("test.txt"); engine.put("f", file); engine.eval("println('Total Space:'+f.getTotalSpace())"); } public static void testInvokeScriptMethod(ScriptEngine engine) throws Exception{ String script = "function hello(name) { return 'Hello,' + name;}"; engine.eval(script); Invocable inv = (Invocable) engine; String res = (String)inv.invokeFunction("hello", "Scripting" ); System.out.println("res:"+res); } public static void testScriptInterface(ScriptEngine engine) throws ScriptException{ String script = "var obj = new Object(); obj.run = function() { println('run method called'); }"; engine.eval(script); Object obj = engine.get("obj"); Invocable inv = (Invocable) engine; Runnable r = inv.getInterface(obj,Runnable.class); Thread th = new Thread(r); th.start(); } public static void testUsingJDKClasses(ScriptEngine engine) throws Exception{ //Packages是腳本語言裏的一個全局變量,專用於訪問JDK的package String js = "function doSwing(t){var f=new Packages.javax.swing.JFrame(t);f.setSize(400,300);f.setVisible(true);}"; engine.eval(js); Invocable inv = (Invocable) engine; inv.invokeFunction("doSwing", "Scripting Swing" ); }}Scripting Tool
SUN提供的JDK6中有一個命令行工具??jrunscript,你能夠在<JDK6_Home>/bin下面找到這個工 具,jrunscript是一個腳本語言的解釋程序,它獨立於腳本語言,但默認是用JavaScript,咱們能夠用jrunscript來測試本身寫的 腳本語言是否正確,下面是一個在命令行運行jrunscript的簡單例子
jrunscript
js>println("Hello,JrunScript");
Hello,JrunScript
js>9*8
72.0
js>
3.JTable的排序和過濾
原來的JTable基本上是隻能顯示數據,在JDK6新增了對JTable的排序和過濾功能,下面代碼演示了這兩個功能
/** * @author chinajash */ public class JTableTester { static String data[][] = { {"China","Beijing","Chinese"}, {"America","Washington","English"}, {"Korea","Seoul","Korean"}, {"Japan","Tokyo","Japanese"}, {"France","Paris","French"}, {"England","London","English"}, {"Germany","Berlin","German"}, }; static String titles[] = {"Country","Capital","Language"}; public static void main(String[] args) { DefaultTableModel m = new DefaultTableModel(data,titles); JTable t = new JTable(m); final TableRowSorter sorter = new TableRowSorter(m); t.setRowSorter(sorter); //爲JTable設置排序器 JScrollPane sPane = new JScrollPane(); sPane.setViewportView(t); JPanel p = new JPanel(); p.setLayout(new BoxLayout(p,BoxLayout.X_AXIS)); JLabel l = new JLabel("Criteria:"); final JTextField tf = new JTextField(); JButton b = new JButton("Do Filter"); p.add(l); p.add(tf); p.add(b); b.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { if(tf.getText().length()==0){ sorter.setRowFilter(null); }else{ sorter.setRowFilter(RowFilter.regexFilter(tf.getText()));//爲JTable設置基於正則表達式的過濾條件 } } }); JFrame f = new JFrame("JTable Sorting and Filtering"); f.getContentPane().add(sPane,BorderLayout.CENTER); f.getContentPane().add(p,BorderLayout.SOUTH); f.setSize(400,300); f.setVisible(true); } }
運行上面程序,單擊JTable的某一個title,這個title對應的列就會按照升序/降序從新排列;在下面的Criteria文本框中輸 入"ese",點擊"Do Filter"按鈕,JTable將只顯示帶有"ese"字符串的行,也就是China和Japan兩行,若是文本框裏面什麼都沒有,點擊"Do Filter"按鈕,這時JTable會顯示全部的行。
4.更簡單,更強大的JAX-WS
JAX-WS2.0的來歷
--------------------------------------------------------------------------------
JAX-WS(JSR-224) 是Java Architecture for XML Web Services的縮寫,簡單說就是一種用Java和XML開發Web Services應用程序的框架, 目前版本是2.0, 它是JAX-RPC 1.1的後續版本, J2EE 1.4帶的就是JAX-RPC1.1, 而Java EE 5裏面包括了JAX-WS 2.0,但爲了向後兼容,仍然支持JAX-RPC. 如今,SUN又把JAX-WS直接放到了Java SE 6裏面,因爲JAX-WS會用到Common Annotation(JSR 250),Java Web Services Metadata(JSR 181), JAXB2(JSR 222), StAX(JSR 173), 因此SUN也必須把後幾個原屬於Java EE範疇的Components下放到Java SE, 如今咱們能夠清楚地理解了爲何Sun要把這些看似跟Java SE沒有關係的Components放進來,終極目的就是要在Java SE裏面支持Web Services.
JAX-WS2.0的架構
--------------------------------------------------------------------------------
JAX-WS不是一個孤立的框架,它依賴於衆多其餘的規範,本質上它由如下幾部分組成
1.用來開發Web Services的Java API
2.用來處理Marshal/Unmarshal的XML Binding機制,JAX-WS2.0用JAXB2來處理Java Object與XML之間的映射,Marshalling就是把Java Object映射到XML,Unmarshalling則是把XML映射到Java Object.之因此要作Java Object與XML的映射,是由於最終做爲方法參數和返回值的Java Object要經過網絡傳輸協議(通常是SOAP)傳送,這就要求必須對Java Object作相似序列化和反序列化的工做,在SOAP中就是要用XML來表示Java object的內部狀態
3.衆多元數據(Annotations)會被JAX-WS用來描述Web Services的相關類,包括Common Annotations, Web Services Metadata, JAXB2的元數據和JAX-WS2.0規範本身的元數據.
4.Annotation Processing Tool(APT)是JAX-WS重要的組成部分,因爲JAX-WS2.0規範用到不少元數據,因此須要APT來處理衆多的Annotations. 在<JDK_HOME>/bin下有兩個命令wsgen和wsimport,就是用到APT和Compiler API來處理碰到的Annotations,wsgen能夠爲Web Services Provider產生並編譯必要的幫助類和相關支持文件,wsimport以WSDL做爲輸入爲Web Service Consumer產生並編譯必要的幫助類和相關支持文件.
5.JAX-WS還包括JAX-WS Runtime與應用服務器和工具之間的契約關係
JAX-WS2.0的編程模型
--------------------------------------------------------------------------------
如今用JAX-WS2.0來編寫Web Services很是簡單,不像JAX-RPC,JAX-WS能夠把任意POJO暴露爲Web Services,服務類不須要實現接口,服務方法也沒有必要拋出RMI異常.下面介紹在JDK6環境下用JAX-WS2.0開發和測試Web Services的步驟
1.編寫服務類,並用Web Services Metadata(JSR-181)標註這個服務類,我用個人另外一篇BlogJDK6的新特性之十:Web服務元數據中的WSProvider類做爲服務類的例子,在此我重複貼一下WSProvider類的源代碼:
/** * @author chinajash */ @WebService(targetNamespace="http://blog.csdn.net/chinajash",serviceName="HelloService") public class WSProvider { @WebResult(name="Greetings")//自定義該方法返回值在WSDL中相關的描述 @WebMethod public String sayHi(@WebParam(name="MyName") String name){ return "Hi,"+name; //@WebParam是自定義參數name在WSDL中相關的描述 } @Oneway //代表該服務方法是單向的,既沒有返回值,也不該該聲明檢查異常 @WebMethod(action="printSystemTime",operationName="printSystemTime")//自定義該方法在WSDL中相關的描述 public void printTime(){ System.out.println(System.currentTimeMillis()); } public static void main(String[] args) { Thread wsPublisher = new Thread(new WSPublisher()); wsPublisher.start(); } private static class WSPublisher implements Runnable{ public void run() { //發佈WSProvider到http://localhost:8888/chinajash/WSProvider這個地址,以前必須調用wsgen命令 //生成服務類WSProvider的支持類,命令以下: //wsgen -cp . WebServices.WSProvider Endpoint.publish("http://localhost:8888/chinajash/WSProvider",new WSProvider()); } } }
2.用wsgen生成上面服務類的必要的幫助類,而後調用用EndPoint類的靜態方法publish發佈服務類(步驟請參考個人另外一篇Blog JDK6的新特性之十:Web服務元數據),我在這裏是將服務類發佈到http://localhost:8888/chinajash /WSProvider
3.用wsimport爲服務消費者(也就是服務的客戶端)生成必要的幫助類,命令以下:
wsimport http://localhost:8888/chinajash/WSProvider?wsdl
這會在<當前目錄>netcsdnblogchinajash下生成客戶端的幫助類,在這個例子中會生成7個類
HelloService.class
ObjectFactory.class
package-info.class
PrintSystemTime.class
SayHi.class
SayHiResponse.class
WSProvider.class
4.在客戶端用下面代碼便可調用步驟1定義的Web Service
HelloService hs = new HelloService();
WSProvider ws = hs.getWSProviderPort();
System.out.println(ws.sayHi("chinajash"));
ws.printSystemTime();
調用上述代碼後客戶端控制檯輸出
hi,chinajash
服務端控制檯輸出服務器當前系統時間
5.輕量級Http Server
JDK6的新特性之五:輕量級Http Server
JDK6提供了一個簡單的Http Server API,據此咱們能夠構建本身的嵌入式Http Server,它支持Http和Https協議,提供了HTTP1.1的部分實現,沒有被實現的那部分能夠經過擴展已有的Http Server API來實現,程序員必須本身實現HttpHandler接口,HttpServer會調用HttpHandler實現類的回調方法來處理客戶端請求,在 這裏,咱們把一個Http請求和它的響應稱爲一個交換,包裝成HttpExchange類,HttpServer負責將HttpExchange傳給 HttpHandler實現類的回調方法.下面代碼演示了怎樣建立本身的Http Server
/** * Created by IntelliJ IDEA. * User: Chinajash * Date: Dec 30, 2006 */ public class HTTPServerAPITester { public static void main(String[] args) { try { HttpServer hs = HttpServer.create(new InetSocketAddress(8888),0);//設置HttpServer的端口爲8888 hs.createContext("/chinajash", new MyHandler());//用MyHandler類內處理到/chinajash的請求 hs.setExecutor(null); // creates a default executor hs.start(); } catch (IOException e) { e.printStackTrace(); } } } class MyHandler implements HttpHandler { public void handle(HttpExchange t) throws IOException { InputStream is = t.getRequestBody(); String response = "<h3>Happy New Year 2007!--Chinajash</h3>"; t.sendResponseHeaders(200, response.length()); OutputStream os = t.getResponseBody(); os.write(response.getBytes()); os.close(); } }
運行程序後,在瀏覽器內輸入http://localhost:8888/xx,瀏覽器輸出
6.嵌入式數據庫 Derby
Derby是IBM送給開源社區的又一個禮物,是一個pure java的數據庫,如今已經被列入到java1.6中。
不知道對於大數據量的性能如何,但傳說中啓動derby只會給JVM添加2M的內存,對那些小數據庫應用,好比像用access那種應該是挺有誘惑力的。
另外,麻雀雖小,五臟俱全,功能要比access多得多咯,包括事務處理,併發,觸發器都有,管理又簡單,所以本身用來作點工具正好合適。
廢話少說,介紹一下我折騰了半天的經驗吧。
個人Derby配置過程:
1,下載db-derby-10.1.3.1-bin.tar.gz,derby_core_plugin_10.1.3.zip和derby_ui_plugin_1.1.0.zip,把兩個插件安裝到eclipse上
2,打開ecllipse,新建一個project
3,右鍵這個project,選擇Apache Derby,再選擇add apache derby native,發現只是給個人project添加了幾個derby的jar,還不是在我看着順眼的lib目錄裏,索性幹掉,換上db-derby- 10.1.3.1-bin.tar.gz解壓出來之後lib目錄下的jar文件,在Build Path裏設置一下;
4,右鍵Project,在apache derby裏選擇start apache derby network server,控制檯能夠看到derby啓動後打出的「服務器準備在端口 1527 上接受鏈接。」
5,右鍵Project,在apache derby裏選擇ij(Interactive SQL),啓動SQL控制檯;
6,輸入connect jdbc:derby:testdb;create=true; 注意要有單引號,能夠在工程跟目錄下建立testdb數據庫,能夠看到一個新建的目錄testdb,那裏的文件就是數據庫咯;
7,用標準的SQL語句來建一個數據庫試試:
create table test (a varchar(4) not null, b char(2) primary key);
竟然能夠用,太神奇了,呵呵
8,再插入一條語句試試呢,insert into test(a,b) values(a,11);,嗯,不錯,能夠用select 查出來的哦。
9,再插一下:insert into test(a,b) values(a,11);,哦哦,報錯了,「錯誤 23505:語句異常終止,由於它致使「TEST」上所定義的「SQL060710092132480」標識的惟一或主鍵約束或惟一索引中出現重複鍵 值。」 呵呵。
10,好了,如今能夠像你控制的其餘數據庫同樣來控制Derby了。
若是上述方法不行,或者你習慣了在eclipse以外使用和管理數據庫,那麼能夠很方便的把Derby「裝」在系統裏。下面我說一下步驟:
1,把db-derby-10.1.3.1-bin.tar.gz解壓到c:derby,使lib和framework兩個目錄在c:derby下邊便可
2,設置環境變量
設置一個c:derbyframeworkembededbin或c:derbyframeworkNetworkServebin到Path中,這樣咱們就能夠直接執行上邊介紹的connect這樣的命令而不用每次鑽到那個目錄下去執行了
設置c:derbylibderby.jar;c:derbylibderbytoos.jar到CLASSPATH中,以便讓這些java編成的命令可以正確執行;
3,打開cmd
4,敲入startNetworkServer,能夠看到像在eclisp中提示的那樣啓動了server
5,再打開一個cmd,敲入sysinfo,能夠看到derby的環境信息了,注意在java user dir這一項,也許是java用戶目錄上和上邊看到的會有所不一樣哦,這樣在connect jdbc:derby:testdb;create=true;的建的數據庫目錄就不同咯。
6,敲入ij,好了,進入到上邊的交互界面,能夠建一個數據庫看看了。
7,最後在另一個cmd中敲入stopNetworkServer就能夠關閉數據庫了。
若是你兩種方法都試過了,那麼須要注意的,仍是上邊步驟5的問題,這個問題是你可能隨時會啓動一個數據庫或新建一個數據庫,但若是你剛剛使用derby,你可能尚未察覺。
derby實際上有兩種啓動方式,一種是嵌入式的,一種是網絡服務器的啓動。
1,咱們在eclipse中右鍵start apache derby network server那個,就是網絡服務器的啓動方式,在這種方式下能夠用另一臺計算機在ij中以:
connect jdbc:derby://192.168.0.28:1527/testdb
的方式進行連接。
2,第二種啓動方式是在ij裏邊就直接
connect jdbc:derby:testdb
這實際是在連當前配置環境下java user dir下那個目錄的數據庫。
看到這裏可能有點糊塗了,這麼就會出問題了那?
實際上derby的訪問更像是一種使用derby driver對本地文件系統的訪問,無論啓動不啓動網絡服務器,均可以用driver訪問本地的數據庫。這樣,在ij裏邊像第二種方式那樣創建鏈接是徹底能夠的。啓動了網絡服務器,只不過是可以讓其餘主機訪問罷了。
另一個問題是,在eclipse中和在系統中鏈接服務器,在connect的時候這個當前配置環境是不同的,eclipse默認工程所在路徑是數據庫 的所在路徑,而在系統中「裝」derby則會認爲 c:document and settings下邊那個用戶目錄是數據庫的所在路徑。
jdk1.7新特性:
1,switch中可使用字串了
String s = "test"; switch (s) { case "test" : System.out.println("test"); case "test1" : System.out.println("test1"); break ; default : System.out.println("break"); break ; }
2.運用List<String> tempList = new ArrayList<>(); 即泛型實例化類型自動推斷
3.語法上支持集合,而不必定是數組
final List<Integer> piDigits = [ 1,2,3,4,5,8 ];
4.新增一些取環境信息的工具方法
File System.getJavaIoTempDir() // IO臨時文件夾
File System.getJavaHomeDir() // JRE的安裝目錄
File System.getUserHomeDir() // 當前用戶目錄
File System.getUserDir() // 啓動java進程時所在的目錄5
5.Boolean類型反轉,空指針安全,參與位運算
Boolean Booleans.negate(Boolean booleanObj)
True => False , False => True, Null => Null
boolean Booleans.and(boolean[] array)
boolean Booleans.or(boolean[] array)
boolean Booleans.xor(boolean[] array)
boolean Booleans.and(Boolean[] array)
boolean Booleans.or(Boolean[] array)
boolean Booleans.xor(Boolean[] array)
6.兩個char間的equals
boolean Character.equalsIgnoreCase(char ch1, char ch2)
7.安全的加減乘除
int Math.safeToInt(long value)
int Math.safeNegate(int value)
long Math.safeSubtract(long value1, int value2)
long Math.safeSubtract(long value1, long value2)
int Math.safeMultiply(int value1, int value2)
long Math.safeMultiply(long value1, int value2)
long Math.safeMultiply(long value1, long value2)
long Math.safeNegate(long value)
int Math.safeAdd(int value1, int value2)
long Math.safeAdd(long value1, int value2)
long Math.safeAdd(long value1, long value2)
int Math.safeSubtract(int value1, int value2)
8.map集合支持併發請求,且能夠寫成 Map map = {name:"xxx",age:18};