公司內部培訓-JAVA語言程序設計_第1頁
公司內部培訓-JAVA語言程序設計_第2頁
公司內部培訓-JAVA語言程序設計_第3頁
公司內部培訓-JAVA語言程序設計_第4頁
公司內部培訓-JAVA語言程序設計_第5頁
已閱讀5頁,還剩579頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Java簡介第一章就業(yè)技能結構圖本門課程主要技能點課程整體目標掌握Java語言基礎知識理解面向對象的編程思想運用Java編寫命令行程序運用JDBC編寫數據庫訪問程序運用Swing組件編寫圖形用戶界面程序運用Swing組件和JDBC實現C/S結構的應用程序課程項目展示俄羅斯方塊游戲演示演示項目案例:俄羅斯方塊預習檢查什么是程序?Java領域有哪些技術?創(chuàng)建一個Java程序的步驟?本章目標了解Java語言了解Java程序的類型理解Java虛擬機(JVM)掌握Java程序運行環(huán)境的配置編寫第一個基于Java的程序Java中程序的注釋Java釋義“Java”一詞的本意是地名——“爪哇”;爪哇島位于南太平洋,是印度尼西亞的一部分。爪哇島關于爪哇全世界三大咖啡產地:巴西印尼爪哇島中國海南島由此可見,Java的原意是指一個咖啡的產地,也可以說是一種咖啡的品牌。Java語言簡介Java是一種程序設計語言,由SunMicrosystem公司于1995年推出;早在1991年,Sun公司的JamesGosling等人開始開發(fā)名為Oak的程序設計語言,希望用來控制嵌入在有線電視機頂盒和PDA等設備中的微處理器;1994年,Oak語言正式更名為Java;Java語言憑借其獨有的安全性、可移植性和平臺無關性,迅速走紅。Java可以做什么開發(fā)桌面應用程序銀行軟件、商場結算軟件開發(fā)面向Internet的應用程序網上數碼商城、阿里巴巴、易趣網演示示例:Java2DDemoJava與InternetInternet使Java成為網絡上最流行的編程語言;同時,Java對Internet的影響也意義深遠;在Java出現以前,幾乎沒有工具可以在Internet上執(zhí)行動態(tài)交互程序;使用Java語言編寫的Applet程序可以對用戶的輸入和操作作出響應。Java程序的類型-AppletApplet(小應用程序)是用Java編寫,在Internet上運行的程序,可以在任何客戶端系統(tǒng)上下載,在瀏覽器中運行。Java程序的類型-ApplicationApplication(應用程序)是指在計算機操作系統(tǒng)支持下運行的程序,它既可以基于圖形界面,又可以基于控制臺。Java的平臺無關性Java是一種既面向對象又可以跨平臺的語言,即:編寫一次,隨處運行;Java不僅適用于單機應用程序和基于網絡的程序,也可用于創(chuàng)建消費類設備的附件程序,如移動電話、掌上設備等。Java源程序代碼WindowsLinuxSolarisJVMJava虛擬機Java字節(jié)碼(可跨平臺)編譯運行Java虛擬機Java虛擬機(JavaVirtualMachine)是可運行Java字節(jié)碼的虛擬計算機系統(tǒng);使用Java語言編寫的程序,實際上是運行在JVM之上,而不是運行在操作系統(tǒng)上;它有一個解釋器組件,可以實現Java字節(jié)碼和計算機操作系統(tǒng)之間的通信。用戶USER字節(jié)碼程序JVM(Java虛擬機)操作系統(tǒng)硬件Java虛擬機的運行過程網絡JIT代碼生成器.java源代碼文件.class字節(jié)碼文件編譯時運行時硬件類加載器字節(jié)碼校驗器解釋器Java開發(fā)工具包開發(fā)和運行Java程序,必須依賴和使用由SunMicrosystem公司提供的Java開發(fā)工具包(JavaDevelopmentKit)。操作系統(tǒng)Java虛擬機Java基礎類庫客戶端編譯器瀏覽器插件開發(fā)工具集成開發(fā)環(huán)境JavaPlatform2JDK(Java開發(fā)工具包)從1.3版本以后,Sun公司將其正式更名為JavaPlatform2;為適應不同的用途,又將其細分為三個版本:J2SE(StandardEdition):標準版,適用于普通應用程序的開發(fā);J2EE(EnterpriseEdition):企業(yè)版,適用于大型企業(yè)級應用程序的開發(fā);J2ME(MircoEdition):微型版,適用于移動設備或嵌入式設備的程序開發(fā)。下載安裝JDK打開瀏覽器,在地址欄鍵入:/j2se/1.6.3/download.html,登錄Sun公司的官方網站,免費下載JDK軟件和文檔;下載完畢,即可安裝JDK;默認安裝在C盤根目錄下bin目錄:存放可執(zhí)行文件;lib目錄:存放Java的類庫文件;demo目錄:存放演示程序;jre目錄:存放Java運行環(huán)境文件。

配置環(huán)境變量成功安裝JDK以后,還需配置環(huán)境變量才可以開發(fā)和調試Java程序,右擊【我的電腦】→【屬性】→【高級】→【環(huán)境變量】:編輯Path變量新建classpath變量開發(fā)Java程序的步驟創(chuàng)建Java源程序Java源程序可以使用任何文本編輯器創(chuàng)建與編輯,一般用.java作為擴展名,其實就是一個使用Java語言編寫的文本文件;編譯源程序Java編譯器讀取Java源程序并翻譯成Java虛擬機能夠明白的指令集合,并以字節(jié)碼的形式保存在文件中,通常,字節(jié)碼文件以.class作為擴展名;運行class(字節(jié)碼)文件Java解釋器讀取字節(jié)碼文件,取出指令并翻譯成計算機能夠執(zhí)行的機器代碼,完成運行過程。編寫第一個Java程序打開記事本,新建一個文本文件,將文件名改為Hello.java,在文件中鍵入如下內容并保存:classHello{publicstaticvoidmain(String[]args){System.out.println("Helloworld!");}}Java源程序擴展名為.java的源文件使用記事本進行編輯使用javac編譯器編譯源文件接下來需要將源程序進行編譯;進入命令提示行,切換到源文件所在的目錄,執(zhí)行javac命令,使用javac編譯器編譯源文件;javac命令的格式是:javac完整的源文件名切換到源文件所在的目錄使用javac命令編譯源文件光標閃爍表示語法無誤,順利通過編譯.class(字節(jié)碼)文件順利通過編譯后將生成一個擴展名為.class的字節(jié)碼文件(類描述文件)。擴展名為.java的源文件通過編譯后生成的擴展名為.class的字節(jié)碼文件使用java解釋器運行字節(jié)碼文件進入命令提示行,在字節(jié)碼文件所在的目錄下,執(zhí)行java命令,使用java解釋器運行字節(jié)碼文件;java命令的格式是:java類名稱請注意:這里只需要類名稱,而不是帶擴展名的文件名。執(zhí)行java命令運行字節(jié)碼文件程序運行效果分析程序3-1關鍵字class用來定義一個類,Hello是類的名稱;在Java程序中,所有的語句都必須放在某個類中;整個類及其所有成員都包含在一對花括號中(即{和}之間),它們標志著類定義塊的開始和結束。定義類的一般語法:

class類名 { …… }分析程序3-2程序必須從main函數開始執(zhí)行;關鍵字public是訪問修飾符,用來控制類成員的可見范圍及作用域;關鍵字static允許在不創(chuàng)建類的實例的情況下,調用main函數;關鍵字void用來說明main函數是沒有返回值的;args是字符串數組,用來從命令行接收參數;main函數的一般形式如下:

public

static

voidmain(String[]args) { …… }分析程序3-3String[]是字符串類型的數組;在Java中,類名稱一般首字母大寫;使用System.out.println()將信息輸出到控制臺上,即打印出來。JavaAPI文檔JavaAPI文檔描述了Java的許多內置功能,以及提供各種類的幫助說明,它是程序員經常查閱的資料;可登錄Sun公司的官方網站免費下載。Java語言的特點2-1簡單去掉了C和C++中許多復雜功能,如指針、運算符重載等,沒有goto語句,沒有struct和union等;面向對象Java是完全面向對象的編程語言,比C++更徹底,純度更高;健壯性沒有指針,避免對指針的誤操作造成程序崩潰;程序員分配的內存空間,無需釋放,由Java虛擬機的垃圾回收機制來統(tǒng)一完成此項工作,避免了內存泄漏;Java語言的特點2-2安全性由于Java取消了指針運算,有效地提高了程序的安全性;Java程序運行在Java虛擬機上,虛擬機可以有效地過濾掉惡意代碼,防止程序員有意編寫的病毒程序;分布性Java程序可以跨平臺,跨操作系統(tǒng),完全支持網絡應用程序的設計;多線程Java程序使用一個稱為“多線程”的進程同時處理多項任務。小結程序運行出現了問題,怎么辦?如何定位錯誤代碼的位置?如何知道錯誤的原因?編程輸出以下信息。*********************************************

歡迎進入Java編程世界*********************************************參考代碼Java文件中的注釋與其它編程語言一樣,也可以在Java文件添加注釋,Java文件中的注釋有三種:單行注釋:以//開始,在行尾結束;多行注釋:以/*開始,以*/結束,可以有多行;總結Java是面向對象的、跨平臺的程序設計語言;Java程序是運行在Java虛擬機之上的;要下載安裝JDK,才可以開發(fā)和運行Java程序;JDK提供一系列的工具,這些工具位于JDK安裝路徑的bin目錄下,常用的有:javac:編譯java:運行javadoc:提取文檔可以使用任何文本編輯器編寫Java源程序;Java中的注釋有三種:單行注釋、多行注釋、文檔注釋;作業(yè)1、完成(六)Java初級編程教材P13頁理論復習題。2、完成補充作業(yè)題。第二章Java語言基礎(上)作業(yè)點評本章相關詞匯(藍色為關鍵字)本章目標Java中的變量和數據類型Java中變量的作用域規(guī)則數據類型轉換Java中的運算符和表達式程序控制結構變量變量是內存中的一塊存儲區(qū)域,是存儲數據的基本單元;聲明變量的語法:

數據類型標識符[=值];如:

intnum;

floatmoney=123.45f;

charch1,ch2=‘A’;標識符命名規(guī)則變量、函數、數組、對象、類和接口等等都需要命名,這些名稱統(tǒng)稱為標識符;Java中對于標識符的命名規(guī)則作了如下限制:只能由英文字母、數字、下劃線“_”和“$”符號組成;必須以英文字母、“_”或“$”開頭,即不能以數字開頭;除“_”和“$”以外,不能包含其它任何特殊字符;不能與關鍵字沖突;嚴格區(qū)分大小寫。關鍵字Java中的關鍵字:abstract、boolean、break、byte、case、catch、char、class、continue、do、double、else、enum、extends、false、find、finally、float、for、implements、import、instanceof、int、interface、long、native、new、null、package、private、protected、public、return、short、static、super、switch、synchronized、this、throw、throws、true、try、void、while標識符命名規(guī)則練習題:ab$ a_b 13cn float Main ab doubles ab-12 a$.s name數據類型數據類型用來確定要存儲在內存單元中的數據的類型;在Java中,數據類型被區(qū)分成兩個種類:原始數據類型引用數據類型原始數據類型原始數據類型是最簡單的數據形式,與C的基本數據類型很相似:數據類型轉換程序中經常會遇到要將數據類型進行轉換的情況(如:在一個表達式中存在不同類型的操作數時),Java的數據類型轉換比C控制得更為嚴格;數據類型轉換有兩種情況:自動類型轉換強制類型轉換自動類型轉換自動類型轉換也稱作隱式類型轉換;將一種類型的變量賦值給另一種類型的變量時,只要滿足以下條件,就會發(fā)生自動類型轉換:兩種類型之間相互兼容;目標類型大于源類型(即類型提升);如:

charch='A';

intnum=ch;

floatf=num;

doubled=f;

//類型轉換自動發(fā)生,無需顯式說明強制類型轉換強制類型轉換也稱作顯式類型轉換;如果被轉換的值的數據類型大于其目標類型,將會丟失部分信息;如:

intx=65;

charch=x;這樣的語句將報錯,因為char類型小于int類型,編譯器無法將其自動轉換,只能進行強制轉換:

intx=65;

charch=(char)x;類型提升規(guī)則不難看出,在有類型提升的情況下,編譯器將自動進行類型轉換,否則就要進行強制類型轉換;類型提升應遵循如下規(guī)則:兩種類型必須兼容,且目標類型大于源類型,例如: byte、char和short類型都可以提升為int型。對于表達式而言,其最終結果將會與表達式中最高的數據類型相同。引用數據類型在Java中,除了上述8種原始數據類型的變量以外,其余的全都屬于引用數據類型,其中包括:數組對象存儲在引用類型變量中的值是該變量表示的值的地址;變量的作用域和生命周期變量的作用域指變量起作用的范圍,說明變量在什么部分可以被訪問;變量的生命周期是指變量在內存中存在的周期,即什么時候分配空間,什么時候銷毀;作用域示例/*用于演示變量的作用域*/public

classScopeVariable{

public

static

voidmain(String[]args){

intouter=10;//outer定義在外層作用域

if(outer<100){ intinner=outer*2; //inner定義在內層作用域

}

/*正確,main方法內都可以訪問outer變量*/ System.out.println("outer="+outer);

/*錯誤,外層作用域不能訪問定義在內層作用域的變量*/ System.out.println("inner="+inner);}}運算符和表達式運算符是通過一定的運算規(guī)則操作一個或多個操作數,并生成結果的特定符號;運算符和操作數的有效組合稱為表達式;Java提供了一系列豐富的運算符,包括:算術運算符關系運算符邏輯運算符條件運算符賦值運算符算術運算符算術運算符主要用于數學計算,一般使用數值作為操作數:關系運算符關系運算符可以測試兩個操作數之間的關系(但不會改變操作數的值),關系表達式的結果為boolean型true/false:邏輯運算符邏輯運算符與boolean型操作數一起使用:邏輯與和邏輯或Java提供了兩個在其它計算機語言中沒有的邏輯運算符,這就是邏輯與和邏輯或的短路版本;對于短路與(&&),如果其左側為false,則不再計算其右側,整個表達式的結果為false,只有左側為true時才計算右側;對于短路或(||),如果其左側為true,則不再計算其右側,整個表達式的結果為true,只有左側為false時,才計算右側。短路與示例inta=10;intb=20;if(++a==12&++b==22){……}System.out.println(a);System.out.println(b);/*這里使用的是邏輯與,試分析最后的輸出結果*/inta=10;intb=20;if(++a==12&&++b==22){……}System.out.println(a);System.out.println(b);/*這里使用的是短路與,試分析最后的輸出結果*/11211120賦值運算符賦值運算符的運算順序是從右至左的:條件運算符?:條件運算符是三元運算符;它的一般形式是:

表達式1?表達式2:表達式3根據表達式1的結果來判斷執(zhí)行表達式2還是表達式3,如果表達式1的結果為true,則執(zhí)行表達式2,否則執(zhí)行表達式3;條件運算符在某些情況下能夠替代小型的if…else語句。運算符的優(yōu)先級很多情況下,一個表達式由多個運算符組成,優(yōu)先級決定運算符的計算順序:控制流語句一般情況下,程序是從上往下依次順序執(zhí)行的;但很多時候,我們需要改變程序執(zhí)行的流程,這就使用到了控制流語句;控制流語句包括:判斷語句循環(huán)語句跳轉語句判斷語句判斷語句也稱作條件語句或分支語句;判斷語句主要用來控制程序在何種情況下執(zhí)行某一部分;判斷語句包括:if語句if…else語句if…elseif語句switch…case語句練習:寫程序,若星期一到星期五,則打印出“工作快樂”,若星期六、星期天則輸出“周末更快樂”循環(huán)語句循環(huán)語句也稱作迭代語句;循環(huán)語句可用于重復執(zhí)行相同的操作;循環(huán)語句包括:while語句do…while語句for語句練習:使用循環(huán)打印九九乘法表跳轉語句跳轉語句允許以非線性的方式執(zhí)行程序,可以將控制權轉到程序的其它部分;跳轉語句包括:break語句continue語句Java拋棄了C語言中的goto語句。跳轉語句判斷下面程序能循環(huán)多少次?classTest{ publicstaticvoidmain(String[]args){ inti=0; while(i<10){ if(i<10){ i++; continue; } if(i==5){ break; } } System.out.println(i); }}第二章Java語言基礎(下)如果要將某些信息打印到屏幕上,就必須使用輸出語句;使用System.out.println()實現換行輸出效果;使用System.out.print()實現輸出但不換行效果;無論輸出什么類型的數據,只需將數據作為參數傳遞給它們即可,而無需像C語言中那樣,使用%s、%d之類的控制字符,如:

inta=10;

floatf=3.14f; System.out.println(a); System.out.print(f); System.out.println('X');作業(yè)點評有些時候,我們可能會需要對輸出格式進行控制,這就使用到了轉義字符;以下是一些常用的轉義字符:本章目標Java中的數組new關鍵字命令行參數回顧C語言中的內存分配C語言中內存分配的兩種形式:棧內存:特點:和作用域同生命周期,自動申請,自動釋放。申請方式:局部變量,形式參數。棧內存中的空間一般都有名稱,通過變量名訪問其存儲的數據。堆內存(即動態(tài)內存分配):特點:手工申請,手工釋放,生命周期由程序員決定。申請方式:由malloc函數或calloc函數申請,realloc函數進行調整,free函數負責釋放。堆內存中的空間一般沒有名稱,只能通過指針訪問。Java中的內存分配Java中的原始數據類型與C語言中的基本數據類型一樣,其變量都是在棧中分配空間;而除了8種原始數據類型以外,其它的任何數據都不可以在棧中分配,只能到堆中開辟空間,而在堆中分配的空間又只能通過指針訪問;通過指針訪問堆內存的方式,在Java中被稱作引用數據類型;可以認為,Java中的引用就類似于C語言中的指針,只是對指針進行了一定程度上的包裝,避免了因直接操作指針而造成的數據意外損壞,從而導致程序錯誤的情況?;仡機語言中的數組在C語言中,從存儲方式上講,聲明數組有兩種情況;在棧內存中分配空間,如:

intary[10];//聲明有10個整型元素的數組在堆內存中分配空間,如:

int*p=NULL;//聲明整型指針

//指針指向堆空間 p=(int*)malloc(10*sizeof(int));C語言允許有棧數組,也允許有堆數組。 數組數組用于將相同類型的數據存儲在連續(xù)的存儲單元中;可以通過指定數組的名稱和長度來聲明數組;一旦聲明數組的大小,就不能再修改;數組元素通過數組名和索引來訪問,索引從0開始;數組可以是一維,也可以是多維。new關鍵字在Java中,不允許將數組分配在棧內存中,只能分配在堆內存中;Java中沒有類似于malloc、calloc、realloc和free等函數,取而代之的是new關鍵字;new是Java中內置的操作符;new操作符用來從堆中分配指定類型的內存空間,并返回相應類型的引用,其作用類似于malloc函數。Java中聲明數組的幾種方式在Java中聲明數組有如下方式://僅聲明數組的引用,但沒有分配內存空間float[]fAry;//聲明數組的同時,根據指定的長度分配內存,但數組中沒有值char[]chAry=new

char[10];//聲明數組并分配內存,同時將其初始化int[]ary1=new

int[]{1,2,3,4,5};//與前一種方式相同,僅僅只是語法相對簡略int[]ary2={1,2,3,4,5};聲明數組示例public

classArrayDemo{

public

static

voidmain(String[]args){

//聲明整型數組的引用,類似于C中的int*p;

int[]ary;

//為數組引用在堆內存中分配實際的內存空間

//類似于C中的p=(int*)malloc(10*sizeof(int));ary=new

int[10];

//使用循環(huán)為數組元素賦值

for(inti=0;i<ary.length;i++){ary[i]=i;}

//使用循環(huán)將數組元素逐個輸出到控制臺

for(inti=0;i<ary.length;i++){System.out.println(ary[i]);}}}數組之間賦值在C語言中,不可以將數組直接賦值給另一個數組;在Java中,語法上允許這樣做,但實際得到的效果是兩個數組引用指向同一塊內存。

int[]ary1={2,4,6,8,10};

int[]ary2; ary2=ary1;//允許這樣賦值108642堆棧ary1ary2數組賦值示例public

classArrayDemo{

public

static

voidmain(String[]args){

int[]ary1={2,4,6,8,10};//聲明并初始化數組1

int[]ary2;//聲明數組2ary2=ary1;//將數組1賦值給數組2

ary2[3]=1024;//通過數組2修改其中一個元素的值

//打印出數組1中的元素

System.out.println("數組1中的元素:");

for(inti=0;i<ary1.length;i++){System.out.println(ary1[i]);}

//打印出數組2中的元素

System.out.println("數組2中的元素:");

for(inti=0;i<ary2.length;i++){System.out.println(ary2[i]);}}}關于數組長度在Java中,程序員可以不再關注數組的長度,數組自帶的length屬性將負責保管數組的長度;C語言不檢查數組的邊界,數組索引完全由程序員掌握;Java對數組下標越界情況強加約束;如果試圖訪問不在有效索引以內的元素,將會引發(fā)運行錯誤。命令行參數在命令行使用java命令執(zhí)行程序時,可以將一些參數傳遞給main函數;main函數攜帶的String[](字符串數組)類型的形參args正是為了接收這些來自命令行的參數;可以從命令行傳遞任意多個字符串給main函數,其間使用空格隔開,也可以不傳遞任何參數;這些傳遞進來的多個字符串最后以字符串數組的形式,供main函數中加以使用。命令行參數示例public

classArgumentDemo{

public

static

voidmain(String[]args){

intlen=args.length;//獲得命令行參數的個數

if(len>0)//判斷是否有命令行參數

{

//如果有,將其逐一打印到控制臺

System.out.println(len+"個命令行參數,具體如下:");

for(inti=0;i<args.length;i++){System.out.println(args[i]);}}

else{

//否則給出提示信息

System.out.println("您沒有傳遞任何命令行參數。");}}}接收命令行參數輸入public

classArgumentDemo{

public

static

voidmain(String[]args){

Scannersc=newScanner(System.in);

//定義一個引用變量

intnum=sc.nextInt();System.out.println(num);

}}從命令行接收輸入:Scannersc=newSanner(System.in);JDBC基礎知識第三章java.io包中包含了一系列對輸入/輸出進行操作的類File類用于訪問文件系統(tǒng),但只能訪問文件(或目錄)的屬性,而不能進行讀/寫操作流是指一連串流動的數據信號,是以先進先出方式發(fā)送信息的通道,從流動方向上區(qū)分,流可以分為輸入流和輸出流,從格式上區(qū)分,可以分為字節(jié)流和字符流使用FileInputStream類和FileOutputStream類以字節(jié)流的方式讀寫文件回顧1回顧2FileReader類和FileWriter類配合BufferedReader類和BufferedWriter類可以以字符流的方式對文件進行讀/寫操作要從控制臺接受輸入,需要將System.in對象進行包裝,使用如下語句:

InputStreamReaderisr=newInputStreamReader(System.in); BufferedReaderbr=newBufferedReader(isr);絕大部分的IO操作都有可能拋出IOException本章相關詞匯本章目標了解JDBC的概念和必要性了解JDBC驅動程序類型了解java.sql包理解JDBC程序的結構使用JDBC進行數據庫編程數據庫訪問技術簡介當今企業(yè)級應用程序大部分采用了客戶機/服務器(C/S)模式;客戶端機器需要與服務器進行通訊,要操作數據庫中的數據,執(zhí)行SQL(StructuredQueryLanguage結構化查詢語言)語句以及檢索查詢結果;在Java中實現這些活動的技術稱作JDBC。JDBCJDBC(JavaDataBaseConnectivity)是由SunMicrosystem公司提供的API(ApplicationProgrammingInterface應用程序編程接口);它為Java應用程序提供了一系列的類,使其能夠快速高效地訪問數據庫;這些功能是由一系列的類和對象來完成的,我們只需使用相關的對象,即可完成對數據庫的操作。JDBC連接數據庫類型使用JDBC連接數據庫可以通過不同的驅動方式來實現,有4種驅動類型:JDBC-ODBC橋驅動純Java驅動本地API部分Java驅動JDBC網絡純Java驅動不論采用哪種驅動方式,在程序中對數據庫的操作方式基本相同,只是加載不同的驅動程序即可。java.sql包

java.sql.DriverManager管理一組JDBC驅動程序的基本服務。java.sql.Statement用于執(zhí)行靜態(tài)SQL語句并返回它所生成結果的對象。java.sql.PreparedStatement表示預編譯的SQL語句的對象。java.sql.ResultSet表示數據庫結果集的數據表,通常通過執(zhí)行查詢數據庫的語句生成。java.sql.SQLException提供關于數據庫訪問錯誤或其他錯誤信息的異常。ODBCODBC(OpenDataBaseConnectivity)指開放式數據庫連接,是由Microsoft公司提供的應用程序接口;它負責連接各種不同產商和類型的DBMS,然后為各種不同的編程語言提供查詢、插入、修改和刪除數據的功能;如同在各種不同的DBMS和各種不同的編程語言之間架設了一座通用的橋梁。JDBC程序訪問數據庫步驟開始導入java.sql包加載并注冊驅動程序創(chuàng)建Connection對象創(chuàng)建Statement對象執(zhí)行SQL語句關閉ResultSet對象關閉Statement對象關閉Connection對象使用ResultSet對象建立數據源(ODBC)附加相應產商提供的驅動結束JDBC-ODBC橋方式純Java驅動方式步驟詳解1:建立數據源這里以JDBC-ODBC橋驅動方式為例,逐步詳細地講解在Java程序中如何操作數據庫,而對于其它驅動方式,只需更換驅動程序即可,其余不變;首先建立ODBC數據源: 【開始】→【設置】→【控制面板】→【管理工具】→【數據源(ODBC)】新建數據源,名稱可以任意,這里假設已經建立了一個名為myODBC的數據源,連接到SQLServer2005中的pubs數據庫。步驟詳解2:加載驅動程序使用Class類的forName方法,將驅動程序類加載到JVM(Java虛擬機)中;對于使用JDBC-ODBC橋的驅動方式,應該加載: sun.jdbc.odbc.JdbcOdbcDriver類如:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");步驟詳解3:獲得連接對象成功加載驅動后,必須使用DriverManager類的靜態(tài)方法getConnection來獲得連接對象;對于使用JDBC-ODBC橋的連接方式,連接字符串的一般形式是:“jdbc:odbc:數據源名稱”,如: Connectioncon= DriverManager.getConnection("jdbc:odbc:myODBC","sa","");步驟詳解釋4:創(chuàng)建語句對象一旦成功連接到數據庫,獲得Connection對象后,必須通過Connection對象的createStatement方法來創(chuàng)建語句對象,才可以執(zhí)行SQL語句;如:

Statementsta=con.createStatement();步驟詳解5:執(zhí)行SQL語句使用語句對象來執(zhí)行SQL語句,有兩種情況:一種是執(zhí)行DELETE、UPDATE和INSERT之類的數據庫操作語句(DML),這樣的語句沒有數據結果返回,使用Statement對象的executeUpdate方法執(zhí)行;如:

sta.executeUpdate("INSERTINTOFriendsVALUES('田七','重慶',456712,'2003-2-25',7500)");步驟詳解5:執(zhí)行SQL語句(續(xù))另一種是執(zhí)行SELECT這樣的數據查詢語句(DQL),這樣的語句將從數據庫中獲得所需的數據,使用Statement對象的executeQuery方法執(zhí)行;如:

ResultSetrs= sta.executeQuery("SELECT*FROMFriend");步驟詳解6:關閉資源當對數據庫的操作結束后,應當將所有已經被打開的資源關閉,否則將會造成資源泄漏;Connection對象、Statement對象和ResultSet對象都有執(zhí)行關閉的close方法;函數原型都是:voidclose()throwsSQLException如:

rs.close();//關閉ResultSet對象 sta.close();//關閉Statement對象 con.close();//關閉Connection對象有可能拋出SQLException異常,必須捕捉;請注意關閉的順序,最后打開的資源最先關閉,最先打開的資源最后關閉。數據庫操作示例importjava.sql.*;//導入java.sql包public

classJDBCDemo{

public

static

voidmain(String[]args){StringstrCon="jdbc:odbc:myODBC";//連接字符串StringstrUser="sa";//數據庫用戶名StringstrPwd="";//口令System.out.println("正在連接數據庫...");

try{//監(jiān)控異常Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//加載驅動程序Connectioncon;

//獲得連接對象con=DriverManager.getConnection(strCon,strUser,strPwd);System.out.println("成功連接到數據庫。");Statementsta=con.createStatement();//創(chuàng)建語句對象

//執(zhí)行SQL語句StringstrSql="DELETEFROMFriendsWHERE[Name]='鄭六'";

intcount=sta.executeUpdate(strSql);System.out.println("成功刪除"+count+"行數據。");sta.close();con.close();//關閉所有已經打開的資源}catch(ClassNotFoundExceptioncnfe){cnfe.printStackTrace();}

catch(SQLExceptionsqle){sqle.printStackTrace();}}}操作結果集使用Statement對象的executeQuery方法成功執(zhí)行SELECT語句后,將返回一個包含有結果數據的ResultSet對象,要從該對象中獲取數據,將使用到如下方法:操作結果集示例try{StringstrCon="jdbc:odbc:MyODBC";System.out.println("正在連接數據庫...");Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connectioncon;con=DriverManager.getConnection(strCon,"sa","");System.out.println("成功連接到數據庫。");Statementsta=con.createStatement();ResultSetrs=sta.executeQuery("SELECT*FROMFriends");System.out.println("查詢到數據如下:");

while(rs.next()){//循環(huán)將結果集游標往下移動,到達末尾返回false

//根據字段名稱獲得各個字段的值System.out.print(rs.getString("Name")+"\t");//獲得字符串System.out.print(rs.getString("Address")+"\t");//獲得字符串System.out.print(rs.getInt("Telephone")+"\t");//獲得整數System.out.print(rs.getDate("HireDate")+"\t");//獲得日期型數據System.out.println(rs.getFloat("Salary"));//獲得浮點型數據}rs.close();sta.close();con.close();}catch(ClassNotFoundExceptioncnfe){cnfe.printStackTrace();}

catch(SQLExceptionsqle){sqle.printStackTrace();}純Java驅動方式連接數據庫使用JDBC-ODBC橋方式連接數據庫,其性能完全取決于數據源(ODBC)的性能,并且無法脫離Microsoft的平臺,這樣將帶來不便;大部分DBMS產商都為自己的產品開發(fā)了純Java的驅動程序,我們只需要加載相應的驅動,就可以直接連接到數據庫,而無需通過ODBC橋連接;鑒于DBMS產品太多,這里只針對當今比較流行的SQLServer2005和Oracle9i進行介紹。下載驅動程序包要使用純Java驅動,首先必須獲得相應數據庫的驅動程序包;將驅動程序包復制到本地磁盤,在命令提示行下,將完整路徑設置到classpath環(huán)境變量中。如用開發(fā)工具開發(fā)程序,還需在開發(fā)環(huán)境中設置路徑純Java驅動連接SQLServer2005使用純Java驅動連接到SQLServer2005數據庫,加載驅動程序應改成如下語句: Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");連接字符串應如下格式: "jdbc:sqlserver://服務器名或IP:1433;databaseName=數據庫名"如:

Connectioncon=DriverManager.getConnection("jdbc:sqlserver://:1433;

databaseName=pubs","sa","");純Java驅動連接Oracle使用純Java驅動連接到Oracle9i數據庫,加載驅動程序應改成如下語句:

Class.forName("oracle.jdbc.driver.OracleDriver");連接字符串應如下格式: "jdbc:oracle:thin:@服務名或IP:1521:數據庫名"如:

Connectioncon=DriverManager.getConnection("jdbc:oracle:thin:@:1521:NEWER","scott","tiger");總結JDBC是使用Java程序操作數據庫的技術;使用Class類的forName方法可以將驅動程序加載到Java解釋器中;使用DriverManager類的getConnection方法獲得Connection對象,從而建立與數據庫的連接;使用Connection對象的createStatement方法創(chuàng)建語句對象,以便執(zhí)行SQL語句;使用Statement對象的executeQuery或executeUpdate方法執(zhí)行SQL語句,并使用ResultSet對象來操作結果數據;PreparedStatement接口允許創(chuàng)建預編譯的SQL語句,并使得在后續(xù)階段可以指定語句的參數。類和對象(I)第三章Java中的數據類型分為:原始數據類型和引用數據類型;在數據類型轉換中,由低類型轉至高類型,將會自動(隱式)類型轉換,而從高類型轉至低類型,則必須強制(顯式)類型轉換;Java中的數組是引用數據類型,必須由new關鍵字在堆中分配內存;Java虛擬機的垃圾回收機制將自動釋放不再使用的內存;使用命令行參數接收來自用戶的輸入?;仡櫛菊孪嚓P詞匯(藍色為關鍵字)本章目標了解什么是面向對象面向對象的基本概念類對象封裝繼承多態(tài)如何定義類,如何創(chuàng)建對象成員運算符訪問控制權限:public和privateSP和OOP對比什么是面向對象?ObjectOriendtedProgramming對象以…為導向的程序設計面向對象就是使用對象進行程序設計,簡寫成OOP。面向對象的編程思想OOP旨在計算機程序中模擬現實世界中解決問題的方式在計算機程序中用代碼和特有結構模擬現實世界中的實體每個實體都專注和實現于特定的功能和價值實體之間的交互構成解決問題的方式面向對象的三大特征OOP

封裝

繼承多態(tài)姓名:布蘭尼職銜:收銀員年齡:35體重:60千克操作:收款打印帳單收銀員對象顧客姓名:朱麗葉年齡:28體重:52千克操作:購買商品顧客對象狀態(tài)行為現實世界中的實體是實際存在的某種物體,用OOP的術語就稱為對象在Java中我們通過對象對現實世界中的實體進行一個模擬和映射對象是面向對象編程的核心部分,和現實世界一樣,需要具有明確定義的狀態(tài)和行為對象對象的特征——屬性屬性——對象具有的各種特征每個對象的每個屬性都擁有特定值例如:布蘭尼和朱麗葉的體重不一樣60kg

布蘭尼屬性35歲收銀員布蘭尼

對象的特征——方法方法——對象執(zhí)行的操作打單

收銀方法刷卡收銀員布蘭尼對象同時具有屬性和方法兩項特性對象的屬性和方法通常被封裝在一起,共同體現事物的特性,二者相輔相承,不能分割對象的屬性和方法屬性:

品牌:法拉利型號:F360Spider顏色:黃色價格:380萬元方法:

發(fā)動停止加速屬性:

顏色:白色方法:

叫跑吃教室里的對象顏色:黑色品牌:BENQ投影類型:白熾燈開關變亮變暗材制:木質支撐物品從對象抽象出“類”

汽車顧客類人們?yōu)榱烁玫卣J識世界,將現實生活中的事物(對象)劃分成類;同一類中的事物總是具有一些共性;類以共同的特性和行為定義實體;類是具有相同屬性和行為的一組對象的集合。類和對象的區(qū)別類是用來描述實體的“模板”或“原型”;對象是實際的實體,每一個對象都是類的一個具體實例;類用來定義對象所有的屬性和方法,同一類的所有對象都擁有相同的特征和操作;可以將類理解成生產產品的模具,而對象則是根據此模具生產的一個個產品。類與結構最簡單的理解方式:類結構體結構體變量對象CJava區(qū)別在于:結構體一般只有數據(屬性)而沒有函數(方法)。在Java中定義類/*定義學生類*/classStudent{Stringname;//姓名

intage;//年齡

floatweight;//體重

/*吃飯的方法*/

voiddining(){System.out.println("吃飽了...");weight++;}

/*走路的方法*/

voidwalk(){System.out.println("走累了...");weight--;}}成員變量成員函數在Java中實現類所有Java程序都以類class為組織單元關鍵字class定義自定義的數據類型class后面接類型名,遵從標識符規(guī)則,首字母必須大寫且與java文件物理名字相同class單元使用{}定義邊界,{}里面只允許定義屬性和方法,不能執(zhí)行程序流程任何的程序流程都應位某個方法中一般情況下,一個.java文件中只允許定義一個class,并且必須修飾為公開public創(chuàng)建對象的語法和數組相似,對象也是引用數據類型,只能使用new運算符從堆中分配內存;創(chuàng)建對象的一般語法:

類名引用名=new類名();使用已經定義好的類,創(chuàng)建該類對象的過程稱為“實例化”。注意:這里要有括號成員運算符.在C語言中,必須要先聲明結構體變量,才可以訪問結構體中的成員;同樣的,只有先實例化類的對象,才可以訪問到類中的成員(屬性和方法);使用成員運算符(.)來訪問成員屬性或成員方法;一般語法是:

對象名.成員名如:std.age=18;//為成員屬性賦值 std.dining();//調用成員方法一個人類的對象姓名:張三體重:50kg……密碼:******屬性走路吃飯……方法可以公開無所謂不可以公開訪問權限:public和privateC語言中結構體的成員可以從任何地方進行訪問,這將給數據的安全留下極大的隱患;為了避免從類外部直接訪問類成員而造成的數據損壞,Java對類成員的訪問制定了約束;關鍵字public和private是訪問修飾符,用來說明某個成員是否可以從類外部進行訪問;public修飾的成員可以在任何地方進行訪問,不受任何約束;private修飾的成員只能夠被本類中的其它成員訪問,而不能從類的外部進行訪問。訪問權限無法從類的外部訪問私有成員;其它類的私有成員對于當前類也是隱藏的。可以從類外部訪問類屬性或方法私有屬性或方法公有不可從類外部訪問總結對象由狀態(tài)(屬性)和行為(方法)組成;類是具有相同屬性和方法的對象的集合;必須先實例化類的對象,才可以訪問到其中的成員;成員運算符用于訪問對象的成員;封裝可以隱藏對象實現的具體細節(jié);成員可以定義為公有,也可以定義為私有;

類和對象(II)第四章138對象由屬性(數據)和方法(函數)組成;類是具有相同屬性和方法的對象的集合;封裝可以隱藏對象實現的細節(jié)部分;對象是引用數據類型,使用new運算符創(chuàng)建對象實例,使用成員運算符訪問對象中的成員;訪問修飾符用來控制訪問權限,可以有效地保證數據安全;回顧139本章相關詞匯(藍色為關鍵字)140本章目標構造方法方法重載構造方法重載對象在內存中的存放形式141對象初始化在上次課中,我們定義Student類的一個引用std,只能逐個地為數據成員賦值,如果想在對象實例化的同時就初始化成員屬性,就使用到了構造方法;構造方法是特殊的成員方法,它與類同名,在對象實例化時由虛擬機自動調用;請注意:構造方法沒有返回值類型,也不能有返回值。142構造方法示例/*定義ConstructorDemo類,對構造方法進行測試*/classConstructorDemo{

/*構造方法,方法名與類名完全一致無需指定返回值類型,也不能有返回值*/

publicConstructorDemo(){System.out.println("這是構造方法");}}/*Test類,用來容納main方法一般將包含有main方法的類聲明為public*/public

classTest{

/*main方法,程序入口*/

public

static

voidmain(String[]args){

/*實例化ConstructorDemo類的對象*/ConstructorDemocd=newConstructorDemo();}}143構造方法正是由于在實例化對象的同時會自動調用構造方法,所以構造方法一般用來給數據成員分配資源或初始化數據成員;構造方法的一般形式:

訪問權限類名(形參列表){方法體}因為是由虛擬機來調用構造方法,所以構造方法一般應定義成public。144為Student類添加構造方法classStudent{//定義學生類

privateStringname;//姓名,私有

private

intage;//年齡,私有

private

floatweight;//體重,私有

//構造方法,根據傳遞進來的參數,為數據成員賦值

publicStudent(Stringn,inta,floatw){

//分別為每個數據成員賦初始值name=n;age=a;weight=w;}

public

voidsetName(Stringn){……}//為姓名賦值的方法,公有,代碼略

public

voidsetAge(inta){……}//為年齡賦值的方法,公有,代碼略

public

voidsetWeight(floatw){……}//為體重賦值的方法,公有,代碼略

public

voiddisplay(){……}//將所有信息打印出來的方法,公有,代碼略

public

voiddining(){……}//吃飯的方法,公有,代碼略

public

voidwalk(){……}//走路的方法,公有,代碼略}public

classTest{

public

static

voidmain(String[]args){

//利用構造方法,為數據成員指定初始值Studentstd=newStudent("張三",18,55);std.display();//將信息打印出來}}145構造方法(續(xù))每個對象在生成時都必須執(zhí)行構造方法,而且只能執(zhí)行一次;如果構造方法調用失敗,那么對象也無法創(chuàng)建;不可以顯式地直接調用構造方法;在沒有定義構造方法的情況下,類會自動產生一個無參數的默認構造方法,這個默認的構造方法什么都不做;一旦顯式地定義了構造方法,默認構造方法自動消失。146回顧函數在Java中,函數無需C語言中的前向聲明,只要直接定義即可;Java中,函數被稱為方法;定義一個方法的一般形式:

[訪問權限]返回值類型方法名稱(形參列表){ 方法主體; }我們更關注的是方法原型,對于方法原型的三個主要組成部分應當明確區(qū)分:返回值類型方法名稱形式參數方法原型147在Java中定義方法/*Java中的方法示例代碼片段*//*定義求平方值的方法*/public

intsquare(intx){

return(x*x);}返回值類型方法名稱形式參數148案例/*編寫求絕對值的方法來求整數的絕對值*//*AbsoluteValue類,其中包含求絕對值的方法Java中的任何方法都必須在類中定義*/public

classAbsoluteValue{

/*求絕對值的方法*/

public

intabs(intx){

return((x>=0)?x:-x);}

/*main方法,程序入口*/

public

static

voidmain(String[]args){

//必須先實例化類的對象,才可以調用到其中的成員方法AbsoluteValueobj=newAbsoluteValue();

inta=-8,b;b=obj.abs(a);//調用abs方法求a的絕對值System.out.println(a+"的絕對值是"+b);}}方法的定義方法的調用149案例分析在上面的案例中,我們已經定義了求整數絕對值的方法;但有時候,我們可能還需要求浮點數的絕對值,請問:可以繼續(xù)使用這個方法嗎?事實上是行不通的,這個方法只能求出整數的絕對值,對于浮點數,還需另外再定義求浮點數絕對值的方法。150修改案例public

classAbsoluteValue{

/*求整數絕對值的方法*/

public

intabsOfInt(intx){

return((x>=0)?x:-x);}

/*求浮點數絕對值的方法*/

public

floatabsOfFloat(floatx){

return((x>=0)?x:-x);}

public

static

voidmain(String[]args){AbsoluteValueobj=newAbsoluteValue();

inta=-8,b;b=obj.absOfInt(a);System.out.println(a+"的絕對值是"+b);

floatc=-3.14f,d;d=obj.absOfFloat(c);System.out.println(c+"的絕對值是"+d);}}如果還要求其它類型的絕對值,就需要定義更多的方法,這對于調用者來說,將會是非常麻煩的事情。151方法重載用于定義一組方法,這些方法具有相同的名稱,并執(zhí)行類似的操作,但是卻使用不同的參數列表;編譯器會根據調用時傳遞的實際參數自動判斷具體調用的是哪個重載方法,如:/*abs方法的重載*/intabs(intx){……}floatabs(floatx){……}doubleabs(doublex){……}longabs(longx){……}152方法重載的三大原則方法名相同參數不同(可以有三方面的不同)數量不同類型不同順序不同同一作用域溫馨提示:方法重載跟方法的返回值類型沒有任何關系。也就是說,只有返回值不同的方法不能構成重載。/*錯誤的方法重載*/voidfun(intx){……};intfun(intx){……};153方法重載示例public

classAbsoluteValue{

public

intabs(intx){//重載方式1,求整數的絕對值

return((x>=0)?x:-x);}

public

floatabs(floatx){//重載方式2,求浮點數的絕對值

return((x>=0)?x:-x);}

public

doubleabs(doublex){//重載方式3,求雙精度數的絕對值

return((x>=0)?x:-x);}

public

longabs(longx){//重載方式4,求長整型數的絕對值

return((x>=0)?x:-x);}

public

static

voidmain(String[]args){AbsoluteValueobj=newAbsoluteValue();

inta=-8,b;b=obj.abs(a);System.out.println(a+"的絕對值是"+b);

floatc=-3.14f,d;d=obj.abs(c);System.out.println(c+"的絕對值是"+d);}}154方法重載的兩種方式之一利用不同數據類型的參數重載;對于帶有相同數量參數但參數類型不同的重載方法,編譯器可以區(qū)分它們,如:只要所有參數式樣都是唯一的,就可以使用多個重載;很多編程語言已經重載了輸出方法,以便您可以用相同的函數名稱輸出任何類型的數據。intsquare(intx){……}floatsquare(floatx){……}doublesquare(doublex){……}155方法重載的兩種方式之二利用不同數量的參數重載,如:將調用與參數最匹配的方法,如果沒有方法得出最佳匹配,那么編譯器將報錯;編譯器解決重載的方式與方法定義的順序無關;重載不考慮方法的返回值類型。/*函數定義*/intfun(intn1){……}intfun(intn1,intn2,intn3){……}/*函數調用*/fun(a);fun(x,y,z);156方法重載的作用域規(guī)則只有屬于同一作用域范圍內的方法才能構成重載。classFirst{……public

voidshow(){……}……}classSecond{……public

voidshow(intx){……}……}不構成重載157課堂練習1在Java中,對于成員方法

floatadd(floatf1,floatf2){……} 下面選項()是對該成員方法的重載。intadd(intn1,intn2){……}floatadd(floatf){……}floatadd(floatf2,floatf1){……}voidadd(floatf1,floatf2){……}voidadd(floatf1,floatf2,floatx){……}158課堂練習2在Java中,下列方法()不能與

intfun(intx){……} 構成方法重載。intfun(intx,inty){……}floatfun(intx){……}intfun(floatx){……}intfun(intx,inty,intz){……}159關于方法重載的重要提示請勿將功能完全不一樣的方法進行重載!160重載構造方法方法重載的一個重要應用就是重載構造方法;可以定義一組構造方法,使其構成重載關系,從而方便使用者能夠靈活機動地以各種不同的方式來實例化對象。161重載構造方法示例classMyTime{//定義時間類

private

intmHour,mMinute,mSecond;//三個成員變量,時、分、秒

publicMyTime(){//構造方法重載1mHour=0;mMinute=0;mSecond=0;}

publicMyTime(inthour){//構造方法重載2mHour=hour;mMinute=0;mSecond=0;}

publicMyTime(inthour,intminute){//構造方法重載3mHour=hour;mMinute=minute;mSecond=0;}

publicMyTime(inthour,intminute,intsecond){//構造方法重載4mHour=hour;mMinute=minute;mSecond=second;}

public

voiddisplay(){//顯示時間信息的方法System.out.println(mHour+":"+mMinute+":"+mSecond);}}162重載構造方法示例(續(xù))/*測試時間類*/public

classTest{

/*main方法,程序入口*/

public

static

voidmain(String[]args){

//分別調用不同的構造方法來初始化時間對象My

溫馨提示

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

最新文檔

評論

0/150

提交評論