《JAVA基礎(chǔ)》PPT課件.ppt

上傳人:xt****7 文檔編號:14779149 上傳時間:2020-07-30 格式:PPT 頁數(shù):63 大?。?99.50KB
收藏 版權(quán)申訴 舉報 下載
《JAVA基礎(chǔ)》PPT課件.ppt_第1頁
第1頁 / 共63頁
《JAVA基礎(chǔ)》PPT課件.ppt_第2頁
第2頁 / 共63頁
《JAVA基礎(chǔ)》PPT課件.ppt_第3頁
第3頁 / 共63頁

下載文檔到電腦,查找使用更方便

14.9 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《《JAVA基礎(chǔ)》PPT課件.ppt》由會員分享,可在線閱讀,更多相關(guān)《《JAVA基礎(chǔ)》PPT課件.ppt(63頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、JAVA基礎(chǔ)篇,JAVA優(yōu)點,平臺無關(guān)性 分布式應用 多線程 純面向?qū)ο?應用范圍廣 (1)Java的桌面應用 (2)Java Web應用 (3)Java企業(yè)級應用 (4)Java嵌入式應用 ,JAVA編譯原理,Java編譯程序?qū)ava源程序編譯成JVM可執(zhí)行代碼Java字節(jié)碼. JAVA源文件(.java)字節(jié)碼(.class) 運行jvm 字節(jié)碼的工作是由解釋器來完成的。解釋執(zhí)行過程分三步進行: 代碼的裝入、代碼的校驗、和代碼的執(zhí)行。 代碼的裝入:類裝載器class loader 代碼的校驗:被裝入的代碼由字節(jié)碼校驗器進行檢查 代碼執(zhí)行: 1) 即時編譯方式:解釋器先將字節(jié)編譯成機器碼,

2、然后再執(zhí)行該機器碼。 2)解釋執(zhí)行方式:解釋器通過每次解釋并執(zhí)行一小段代碼來完成java字節(jié),J2SE的運行環(huán)境設(shè)置,安裝JAVA SDK(Java Software Development Kit) 通常,我們需要設(shè)置三個環(huán)境變量:JAVA_HOME、PATH 和 CLASSPATH JAVA_HOME:SDK的安裝目錄如:c:java PATH:指定一個路徑列表,用于搜索可執(zhí)行文件的。如:d:oracleproduct10.1.0Db_2bin;%JAVA_HOME%bin CLASSPATH:也指定一個路徑列表,是用于搜索 Java 編譯或者運行時需要用到的類。 如:.;%JAVA_HO

3、ME%libtools.jar;%JAVA_HOME%librt.jar;,JAVA基本數(shù)據(jù)類型,進制二進制、八進制、十進制 整型 byte(1個字節(jié)) int (4個字節(jié)) Integer short (2個字節(jié)) Short long(8個字節(jié)) 浮點型 float (4個字節(jié)) double,JAVA基本數(shù)據(jù)類型,字符型 char 布爾型 boolean 數(shù)制: 十進制:10 八進制:012 十六進制:0 x10,String 函數(shù),常用函數(shù) indexOf() substring() lastIndexOf() replace() replaceAll() matches(

4、) split() toUpperCase(),char data = a, b, c; String str = new String(data); System.out.println(abc); String cde = cde; System.out.println(abc + cde); String c = abc.substring(2,3); String d = cde.substring(1, 2);,Date,Date類型 DateFormat.format(Date date) Date date =new Date(); //System.out.println(Da

5、teFormat.getInstance().format(date)); SimpleDateFormat sdf=new SimpleDateFormat(yyyy-MM-dd HH:mm:ss); //MM HH hh System.out.println(sdf.format(date)); Calendar類型 Calendar cal=Calendar.getInstance(); cal.set(Calendar.DAY_OF_MONTH, 20); GregorianCalendar類型 GregorianCalendar gc=new GregorianCalendar();

6、 gc.setTime(date);,數(shù)組,一維組 二維數(shù)組 三維數(shù)組 例子: int intArr=new int1,3,4; charcharArr=new chara,b; ,面向?qū)ο?類(內(nèi)部類) 訪問控制符類: public /protected/ 對象 包 重載(多態(tài)) 繼承 依賴 聚合 繼承,接口,接口聲明 接口實現(xiàn) 接口多重實現(xiàn) 接口繼承,抽象,抽象類 抽象方法,集合框架,映射(map)、集(set)、列表(list)、樹(tree)、數(shù)組(array)、散列表(hashtable),集合基類,Collection 接口是一組允許重復的對象。 Set 接口繼承 Collecti

7、on,但不允許重復。 List 接口繼承 Collection,允許重復,并引入位置下標。 Map 接口既不繼承 Set 也不繼承 Collection。,Collection接口,添加、刪除元素 boolean add(Object element) boolean remove(Object element) 查詢操作: int size() boolean isEmpty() boolean contains(Object element) Iterator iterator(),Set 接口,HashSet TreeSet(有序),List 接口,void add(int index,

8、 Object element) boolean addAll(int index, Collection collection) Object get(int index) int indexOf(Object element) int lastIndexOf(Object element) Object remove(int index) Object set(int index, Object element) ListIterator listIterator() ListIterator listIterator(int startIndex) List subList(int fr

9、omIndex, int toIndex) ArrayList 類和 LinkedList 類,Map 接口,,JAVA IO,File對象 canRead() canWrite() delete() deleteOnExist() Exists() getAbsoluteFile() length() list() getName() getParent() getPath() listFiles() mkdir(),InputStream抽象類及其子類字節(jié)流,AudioInputStream ByteArrayInputStream FileInputStream FilterInputS

10、tream ObjectInputStream PipedInputStream SequenceInputStream StringBufferInputStream,OutputStream,ByteArrayOutputStream FileOutputStream FilterOutputStream ObjectOutputStream PipedOutputStream,以字節(jié)為導向的stream,Input和Output InputStream 1) ByteArrayInputStream:把內(nèi)存中的一個緩沖區(qū)作為InputStream使用2) StringBufferInp

11、utStream:把一個String對象作為InputStream3) FileInputStream:把一個文件作為InputStream,實現(xiàn)對文件的讀取操作4) PipedInputStream:實現(xiàn)了pipe的概念,主要在線程中使用5) SequenceInputStream:把多個InputStream合并為一個InputStream,OutputStream,1) ByteArrayOutputStream:把信息存入內(nèi)存中的一個緩沖區(qū)中2) FileOutputStream:把信息存入文件中3) PipedOutputStream:實現(xiàn)了pipe的概念,主要在線程中使用4) Se

12、quenceOutputStream:把多個OutStream合并為一個OutStream,以Unicode字符為導向的stream,InputStream1) CharArrayReader:與ByteArrayInputStream對應2) StringReader:與StringBufferInputStream對應3) FileReader:與FileInputStream對應4) PipedReader:與PipedInputStream對應OutStream1) CharArrayWriter:與ByteArrayOutputStream對應2) StringWriter:無與之對

13、應的以字節(jié)為導向的stream3) FileWriter:與FileOutputStream對應4) PipedWriter:與PipedOutputStream對應,線程,進程、線程 (單CPU,多CPU) 單線程、多線程,單線程代碼1,多線程代碼,線程,用Thread 類創(chuàng)建線程 用Runnable接口創(chuàng)建線程 start() run() join()線程合并,后臺線程與聯(lián)合線程,如果我們對某個線程對象在啟動(調(diào)用start方法)之前調(diào)用了setDaemon(true)方法,這個線程就變成后臺線程。 對于Java程序來說,只要還有一個前臺線程在運行,這個進程就不會結(jié)束,如果一個進程中只有后

14、臺線程在運行,這)個進程就會結(jié)束。 Pp.join()的作用就是把pp所對于的線程合并到調(diào)用pp.join;語句的線程中。,使用Runnable接口創(chuàng)建多線程,適合多個相同程序的代碼的線程去處理同一資源的情況,把虛擬的CPU(線程)同程序的代碼、數(shù)據(jù)有效分離,較好體現(xiàn)了面向?qū)ο蟮脑O(shè)計思想 可以避免由于JAVA的繼承特性帶來的局限。假若一個類已經(jīng)繼承了另一類,則我們只能使該類實現(xiàn)Runnable 當線程被構(gòu)造時,需要的代碼和數(shù)據(jù)通過另一個對象作為構(gòu)造參數(shù)傳遞時去,這個對象就是實現(xiàn)了Runnable接口。,多線程的應用,網(wǎng)絡(luò)聊天程序 發(fā)送鍵盤的數(shù)據(jù),接收別人發(fā)送的數(shù)據(jù),從鍵盤上讀取輸入,發(fā)送鍵盤的

15、數(shù)據(jù)給對方,接收對方的數(shù)據(jù),從鍵盤上讀取輸入,發(fā)送鍵盤的數(shù)據(jù)給對方,接收對方的數(shù)據(jù),多線程應用2,批量數(shù)據(jù)copy的問題 WEB服務(wù)器的請求及處理,多線程同步,例子演示 代碼塊同步 方法塊同步,產(chǎn)生者與消費者例子,一個往消息隊列中放入消息 一個往消息隊列中取出消息 消息內(nèi)容包括產(chǎn)生的ID號及內(nèi)容 三個生產(chǎn)者,三個消費者,線程間的通訊,wait() //如隊列為空,我們可以等待,或隊列已經(jīng)滿的時候 notify()//通知由wait()而等待的線程,如我們往某個列隊中放數(shù)據(jù)時,這時可以通知。 notifyAll(),JAVA反射,,AWT,,Swing,,JDBC編程,,應用程序,JDBC,My

16、SQL Driver,Db2 Driver,Oracle Driver,MySQL,Db2,MySQL,連接數(shù)據(jù)庫的步驟,注冊驅(qū)動(只做一次) 建立連接(Conntection) 創(chuàng)建執(zhí)行SQL的語句(Statement) 執(zhí)行語句 處理執(zhí)行結(jié)果 釋放資源,注冊驅(qū)動,Class.forName(“com.mysql.jdbc.Driver”); 推薦這種方式,不會對具體的驅(qū)動類產(chǎn)生依賴。 DriverManager.registerDriver(com.mysql.jdbc.Driver); 會造成DriverManager中產(chǎn)生兩個一樣的驅(qū)動,并會對具體的驅(qū)動類產(chǎn)生依賴。 System.se

17、tProperty(“jdbc.drivers”, “driver1:driver2”); 雖然不會對具體的驅(qū)動類產(chǎn)生依賴;但注冊不太方便,所以很少使用。 驅(qū)動類型(四種類型),建立連接(Connection),Connection conn = DriverManager.getConnection(url, user, password); url格式: JDBC:子協(xié)議:子名稱//主機名:端口/數(shù)據(jù)庫名?屬性名=屬性值 st.executeQuery(sql); PreparedStatement String sql = “select * from table_name where

18、col_name=?”; PreparedStatement ps = conn.preparedStatement(sql); ps.setString(1, “col_value”); ps.executeQuery();,處理執(zhí)行結(jié)果(ResultSet),ResultSet rs = statement.executeQuery(sql); While(rs.next()) rs.getString(“col_name”); rs.getInt(“col_name”); // ,釋放資源,釋放ResultSet, Statement,Connection. 數(shù)據(jù)庫連接(Connecti

19、on)是非常稀有的資源,用完后必須馬上釋放,如果Connection不能及時正確的關(guān)閉將導致系統(tǒng)宕機。Connection的使用原則是盡量晚創(chuàng)建,盡量早的釋放。,基本的CRUD(創(chuàng)建、讀取、更新、刪除),模板代碼 Connection conn = null; Statement st=null; ResultSet rs = null; try //獲得Connection //創(chuàng)建Statement //處理查詢結(jié)果ResultSet finally //釋放資源ResultSet, Statement,Connection ,插入記錄,增加對應SQL的INSERT,返回增加成功的行(記錄

20、)數(shù) conn = getConnection(); Statement st = conn.createStatement(); String sql=“insert into user(name, age,regist_date )” + “values(name, 10, now())”; int i = st.executeUpdate(sql); //i為插入的記錄數(shù),讀取記錄,讀取(查詢)對應SQL的SELECT,返回查詢結(jié)果 conn = getConnection(); st = conn.createStatement(); String sql = select id, n

21、ame, age,regist_date from user; rs = st.executeQuery(sql); while (rs.next()) System.out.print(rs.getInt(id) + tt ); System.out.print(rs.getString(name) + tt ); System.out.print(rs.getInt(age) + tt ); System.out.print(rs.getTimestamp(regist_date) + tt ); System.out.println(); ,SQL注入,PreparedStatement

22、和Statement,在SQL中包含特殊字符或SQL的關(guān)鍵字(如: or 1 or )時Statement將出現(xiàn)不可預料的結(jié)果(出現(xiàn)異?;虿樵兊慕Y(jié)果不正確),可用PreparedStatement來解決。 PreperedStatement(從Statement擴展而來)相對Statement的優(yōu)點: 1.沒有SQL注入的問題。 2.Statement會使數(shù)據(jù)庫頻繁編譯SQL,可能造成數(shù)據(jù)庫緩沖區(qū)溢出。 3.數(shù)據(jù)庫和驅(qū)動可以對PreperedStatement進行優(yōu)化(只有在相關(guān)聯(lián)的數(shù)據(jù)庫連接沒有關(guān)閉的情況下有效)。,數(shù)據(jù)類型,詳細信息見java.sql.Types 幾種特殊且比較常用的類型

23、1.DATA,TIME,TIMESTAMP date,time,datetime 存:ps.setDate(i,d); ps.setTime(i,t); ps.setTimestamp(i, ts); ?。簉s.getDate(i); rs.getTime(i); rs.getTimestamp(i); 2.CLOB text 存:ps.setCharacterStream(index, reader, length); ps.setString(i, s); ?。簉eader = rs. getCharacterStream(i); reader = rs.getClob(i).g

24、etCharacterStream(); string = rs.getString(i); 3.BLOB blob 存:ps.setBinaryStream(i, inputStream, length); ?。簉s.getBinaryStream(i); rs.getBlob(i).getBinaryStream();,一個簡單用戶相關(guān)的數(shù)據(jù)訪問層,J2EE三層架構(gòu)簡介 表示層 、業(yè)務(wù)邏輯層、數(shù)據(jù)訪問層,三層之間用接口隔離。 定義domain對象User,定義存取用戶的接口 用JDBC實現(xiàn)接口 用配置文件(properties)和反射實現(xiàn)與具體類的耦合,事務(wù)(ACID),原子性(

25、atomicity):組成事務(wù)處理的語句形成了一個邏輯單元,不能只執(zhí)行其中的一部分。 一致性(consistency):在事務(wù)處理執(zhí)行前后,數(shù)據(jù)庫是一致的(數(shù)據(jù)庫數(shù)據(jù)完整性約束)。 隔離性(isolcation):一個事務(wù)處理對另一個事務(wù)處理的影響。 持續(xù)性(durability):事務(wù)處理的效果能夠被永久保存下來 。 connection.setAutoCommit(false);//打開事務(wù)。 mit();//提交事務(wù)。 connection.rollback();//回滾事務(wù)。,事務(wù)(SavePoint),當只想撤銷事務(wù)中的部分操作時可使用SavePoint SavePoint sp =

26、 connection.setSavepoint(); connection.rollerbak(sp);mit();,事務(wù)(JTA),跨越多個數(shù)據(jù)源的事務(wù),使用JTA容器實現(xiàn)事務(wù)。 分成兩階段提交。 javax.transaction.UserTransaction tx = (UserTransaction)ctx.lookup(“jndiName); tx.begin(); //connection1 connection2 (可能來自不同的數(shù)據(jù)庫) mit();//tx.rollback();,隔離級別多線程并發(fā)讀取數(shù)據(jù)時的正確性,connection.setTransactionI

27、solation(Connection.TRANSACTION_READ_COMMITTED); V:可能出現(xiàn),X:不會出現(xiàn),存儲過程,存儲過程 CallableStatement(從PreperedStatement擴展來) cs = connection.prepareCall(“call psname(?,?,?)”); cs.registerOutParameter(index, Types.INTEGER); cs.setXXX(i, xxxx); cs.executeUpdate(); int id=cs.getInt(index);,其他的幾個API,PreparedStatem

28、ent.getGeneratedKeys() PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); ps.executeUpdate(); ResultSet rs = st.getGeneratedKeys();rs.getInt(1); 批處理,可以大幅度提升大量增、刪、改的速度。 PreparedStatement.addBatch(); PreparedStatement.executeBatch();,其他的幾個API,可滾動的結(jié)果集 Statement st

29、 = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = st.executeQuery(sql); rs.beforeFirst(); rs.afterLast();rs.first();rs.isFirst();rs.last();rs.isLast(); rs.absolute(9);rs.moveToInsertRow(); 可更新的結(jié)果集 conn.createStatement(ResultSet.TYPE_SCROLL_SEN

30、SITIVE, ResultSet.CONCUR_UPDATABLE); rs.updateString(col name, new value); rs.updateRow();,DatabaseMetaData和ParameterMetaData,DatabaseMetaData meta = connection.getMetaData(); 通過DatabaseMetaData可以獲得數(shù)據(jù)庫相關(guān)的信息如:數(shù)據(jù)庫版本、數(shù)據(jù)庫名、數(shù)據(jù)庫廠商信息、是否支持事務(wù)、是否支持某種事務(wù)隔離級別,是否支持滾動結(jié)果集等。 ParameterMetaData pmd = preparedStatement

31、.getParameterMetaData(); 通過 ParameterMetaData可以獲得參數(shù)信息。,ResultSetMetaData,ResultSetMetaData meta = rs.getMetaData(); 通過ResultSetMetaData可以獲得結(jié)果有幾列、各列名、各列別名、各列類型等。 可以將ResultSet放入Map(key:列名 value:列值)。 用反射ResultSetMetaData將查詢結(jié)果讀入對象中(簡單的O/RMapping) 1)讓SQL語句中列別名和要讀入的對象屬性名一樣; 2)通過ResultSetMetaData獲得結(jié)果列數(shù)和列別名

32、; 3)通過反射將對象的所有setXxx方法找到; 4)將3)找到的方法setXxx和2)找到的列別名進行匹配(即方法中的xxx于列別名相等); 5)由上一步找到的方法和列別名對應關(guān)系進行賦值 Method.invoke(obj, rs.getObject(columnAliasName));,數(shù)據(jù)源和連接池,DataSource用來取代DriverManager來獲取Connection; 通過DataSource獲得Connection速度很快; 通過DataSource獲得的Connection都是已經(jīng)被包裹過的(不是驅(qū)動原來的連接),他的close方法已經(jīng)被修改。 一般DataSour

33、ce內(nèi)部會用一個連接池來緩存Connection,這樣可以大幅度提高數(shù)據(jù)庫的訪問速度; 連接池可以理解成一個能夠存放Connection的Collection; 我們的程序只和DataSource打交道,不會直接訪問連接池;,一個簡單的數(shù)據(jù)源實現(xiàn),使用裝飾模式的Connection(核心代碼) class MyConnection implements Connection private Connection realConn; private LinkedList connPool; MyConnection(Connection rConn, LinkedList cPool) this

34、.realConn=rConn; this.connPool=cPool; public void close() this.connPool.addLast(this); //. ,一個簡單的數(shù)據(jù)源實現(xiàn),DataSource(核心代碼) class MyDataSource implements DataSource private LinkedList connPool = new Vector(); public Connection getConneciton () if(this.connPool.size()0) return this.connPool.removeFirst(0

35、); return createConnection(); private Connection createConnection() Connection realConn = DriverManager.getConnection(); Connection myConn = new MyConnection(realConn,this.connPool); return myConn; //. ,常用的開源實現(xiàn)DBCP,使用DBCP必須用的三個包: commons-dbcp-1.2.1.jar, commons-pool-1.2.jar, commons-collections-3.1.jar。 Java API: BasicDataSourceFactory.createDataSource( properties);,

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!