




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、core java的課程體系,Java語法基礎(chǔ) Java面向?qū)ο蟮木幊?Java的高級編程接口:4個專題 Java圖形GUI編程 多線程編程 I/O編程 網(wǎng)絡(luò)編程,Java語言的知識體系結(jié)構(gòu)圖,java語法基礎(chǔ)Day01-Day03,Day01,了解java的產(chǎn)生與發(fā)展 理解java語言的特性 理解java虛擬機jvm的特性和功能 理解字節(jié)碼和垃圾收集的概念 列舉出在java平臺上實現(xiàn)代碼安全的方法 知道在java中定義類,包,applets和applications 掌握編碼,編譯,運行java應(yīng)用程序的步驟 安裝,搭建java開發(fā)運行環(huán)境 第一個java程序 帶包的java程序 JVM搜索
2、類的順序和類加載 CLASSPATH的應(yīng)用 常用的java命令,Java的產(chǎn)生與發(fā)展,Java的產(chǎn)生 Sun公司的Green項目 基于c+開發(fā)的Oak語言 Mosaic和Netscape到JavaHot瀏覽器 Internet的蓬勃發(fā)展推動了java的發(fā)展(Applet) Java(爪哇) 名字的由來 Java的發(fā)展 Java的現(xiàn)狀 純面向?qū)ο蟮恼Z言 平臺無關(guān)性,一次編寫,到處運行 適合于基于Internet應(yīng)用程序開發(fā) Java的地位確立 IT產(chǎn)業(yè)很多大公司購買了java的許可證 眾多軟件開發(fā)商已支持java軟件產(chǎn)品 Intranet是企業(yè)信息系統(tǒng)最佳的解決方案,java發(fā)揮了不可替代的作用
3、 Java的發(fā)展與其分支 95.5.23 Oak改名為java 98.12. java1.2,后來改名為java2 陸續(xù)出現(xiàn)了java1.3,java1.4 2004.12 java1.5版本推出 命名為java5.0 后來陸續(xù)出現(xiàn)java6.0,java7.0,Java的產(chǎn)生與發(fā)展,Java的發(fā)展與其分支 java在今天已形成了龐大的體系,經(jīng)過十年發(fā)展,已有了3個平臺標準 三大技術(shù)平臺都提供了相應(yīng)的開發(fā)工具包(SDK:SoftWare Development Kits) java SE -標準版應(yīng)用平臺 java EE-企業(yè)級應(yīng)用平臺 java ME微型版應(yīng)用平臺:應(yīng)用在存儲,運算很小的受限
4、的平臺,Java語言的特性,什么是java? 程序設(shè)計語言;開發(fā)環(huán)境;應(yīng)用環(huán)境;部署環(huán)境 Java的特性 提供更簡單的方式寫程序 無指針,無需做內(nèi)存管理 提供龐大的類庫,純粹面向?qū)ο笤O(shè)計 支持靜態(tài)和動態(tài)的代碼繼承和重用 提供一個可解釋執(zhí)行的環(huán)境 支持任何開發(fā)平臺 只寫一次,到處使用 支持多線程 支持動態(tài)升級 以上特性如何實現(xiàn) Java虛擬機:JVM 垃圾收集:Garbage Collection 代碼安全:Code Security 字節(jié)碼文件:Verifying,Java語言的特性,JVM與跨平臺性: 一次編寫,到處運行:不同操作系統(tǒng),不同數(shù)據(jù)庫,不同的服務(wù)器 數(shù)據(jù)類型也可以實現(xiàn)跨平臺 Ja
5、va虛擬機的作用 程序的開發(fā)及運行方式 Java的工作方式:先編譯后解釋,Java是先編譯后解釋執(zhí)行,CPU,Java語言的特性,Java源文件先通過編譯生成一個字節(jié)碼文件bytecode 字節(jié)碼不與當前OS相關(guān),結(jié)構(gòu)中立的,是二進制文件。任何平臺編譯生成的字節(jié)碼都是一樣的。 字節(jié)碼文件不能直接執(zhí)行,必須需要JVM的支撐才能運行 JVM是sun開發(fā)的,字節(jié)碼的結(jié)構(gòu)也是sun定義的,他們之間有很好的接口 JVM存在的意義實際上就是屏蔽掉底層平臺的差異,為上層結(jié)構(gòu)中立的字節(jié)碼統(tǒng)一運行的環(huán)境,而JVM會將字節(jié)碼轉(zhuǎn)化成相應(yīng)的底層平臺的機器碼執(zhí)行 java解釋器功能是用JVM來實現(xiàn)的,java的解釋器是
6、在jvm中運行的 JVM的作用: 對下是屏蔽掉了底層平臺的差異,對于上層的字節(jié)碼而言不需要關(guān)心它運行在什么平臺上,由JVM去把底層平臺的差異屏蔽掉 對上為結(jié)構(gòu)中立的字節(jié)碼提供了統(tǒng)一的運行環(huán)境,實現(xiàn)了字節(jié)碼的跨平臺,JVM,Bytecode,Java語言的特性,Java的垃圾收集器 Java的垃圾收集解除了程序員分配存儲器的責任,它提供了一種系統(tǒng)級線程以便跟蹤每一存儲器的分配情況。在Java虛擬機的空閑周期,垃圾收集線程檢查并釋放那些可被釋放的存儲器。 內(nèi)存泄漏 垃圾收集線程 垃圾收集調(diào)用的方法:java.lang.System.gc()/java.lang.Runtime.gc() Java代
7、碼的安全性,Java語言的特性,字節(jié)碼的作用 字節(jié)碼的結(jié)構(gòu)是JVM特定指定的 字節(jié)碼不會破壞,篡改系統(tǒng) 禁止運行時堆棧溢出 防止蠕蟲病毒襲擊 參數(shù)類型正確 類型轉(zhuǎn)換正確 安裝,搭建java開發(fā)運行環(huán)境 官方網(wǎng)站下載JDK 官方網(wǎng)站: 不同系統(tǒng)平臺,JDK不一樣,選擇適合于自己平臺的JDK JDK的安裝 Windows直接安裝運行jdk的可執(zhí)行exe文件 Linux系統(tǒng)將JDK文件壓縮包解壓后放入opt目錄,配置初始化文件的環(huán)境變量 Windows下JDK安裝后,會有2個文件夾生成 JDK:java開發(fā)工具軟件包,它包含了java的編譯,調(diào)試,運行整個環(huán)境和包含了整個類庫的軟件包 JRE:jav
8、a運行環(huán)境 JDK,JRE和JVM,安裝,搭建java開發(fā)運行環(huán)境,JDK,JRE和JVM jre是jdk的子集,在一套完整的jdk中就包含了jre jre只負責運行一個編譯好的java程序(字節(jié)碼文件bytecode) jdk它可以去編譯,調(diào)試,運行整個操作過程都支持 在jre內(nèi)部有一個軟件組件jvm就是java虛擬機 JDK的結(jié)構(gòu)簡介 bin目錄:java開發(fā)調(diào)試的命令, exe文件,連接庫文件,編譯器等等 編譯一個java文件:javac;運行一個字節(jié)碼文件:java jre目錄:jdk中自帶的jre src壓縮文件:放置的是jdk類庫的源碼文件,按包結(jié)構(gòu)組織的 demo::java代碼
9、的演示實例文件 include:用于編譯本地方法的文件 docs:html格式的類庫文檔 lib:類庫文件 Java程序開發(fā)環(huán)境配置 在windows平臺:autoexec.bat文件;使用對話框(右擊我的電腦屬性高級環(huán)境變量系統(tǒng)或用戶的環(huán)境變量)操作 Unix平臺需要分shell:csh $HOME/.cshrc bsh/ksh $HOME/.profile 環(huán)境變量: JAVA_HOME:保存jdk的安裝目錄 windows : set JAVA_HOME=c:programfilesjavajdk1.5.0_09,Java程序開發(fā)環(huán)境配置,csh: setenv JAVA_HOME /o
10、pt/jdk1.5.0_09 bsh/ksh: JAVA_HOME=/opt/jdk1.5.0_09 CLASSPATH:系統(tǒng)搜索字節(jié)碼(類文件.class)文件的搜索路徑。設(shè)置系統(tǒng)在查找字節(jié)碼文件時,它的搜索路徑。 windows: set CLASSPATH=.; %JAVA_HOME%jrelibrt.jar; csh: setenv CLASSPATH .:$JAVA_HOME/jre/lib/rt.jar bsh/ksh: CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar PATH:設(shè)置命令的搜索路徑,在執(zhí)行命令時,操作系統(tǒng)就會在PATH設(shè)置的路徑去查找命令
11、的可執(zhí)行文件。 設(shè)置path不能覆蓋原有的,可以使用特殊符號 windows:%PATH%; Linux:$PATH: windows: set PATH=%PATH%;%JAVA_HOME%bin; csh: setenv PATH $PATH:$JAVA_HOME/bin bsh/ksh: PATH=$PATH:$JAVA_HOME/bin Linux系統(tǒng)使用bsh/ksh時則需要export JAVA_HOME CLASSPATH PATH 將環(huán)境變量設(shè)置為全局的 編輯,編譯,調(diào)試,運行一個java程序 寫第一個java程序:HelloWorld.java public class He
12、lloWorld public static void main(String args) String str=“Hello World!”;,編輯,編譯,調(diào)試,運行一個java程序,System.out.println(“The String is::”+str); System.out.println(MyAge is: +age); 通過這個程序掌握以下概念 一個java源文件中可以定義多個類,但最多只能有一個類用public來修飾,而且該public修飾的類名要與java源文件名一樣。 一個java應(yīng)用程序應(yīng)該包含一個主方法,而且主方法的簽名是固定不變的。主方法定義在哪個類中并不做固
13、定安排。 定義的所有的代碼中,只看到類的定義。在類中去封裝其他變量或方法。 編譯HelloWorld.java程序 開始運行cmd進入dos,修改當前目錄為d:javacodeday01 使用javac HelloWorld.java命令編譯 編譯成功后,到day01程序目錄下查看,發(fā)現(xiàn)有2個.class文件得出有效結(jié)論 編譯報錯則根據(jù)錯誤提示找出錯誤位置然后修改程序重新編譯 舉例來演示學習錯誤提示 假如將String的S寫為小寫 :string str=“HelloWorld!; 假如將out寫為out:System.otu.println(“The String is: +str); 再次
14、編譯一下,查看錯誤提示,必須要會讀錯誤提示 分析錯誤提示,排除錯誤是基本的能力,包的概念,含義和使用,運行HelloWorld程序: 包含有主方法的程序才可以運行,沒有包含主方法的類是不能運行的 開始運行cmd進入dos;使用cd d:javacodeday01進入程序目錄 使用 java HelloWorld(包含有主方法的類的類名)來運行 使用java Student就會報告錯誤提示沒有主方法 要求學員做HelloWorld程序并操作演示幾種錯誤情況和調(diào)錯 帶包的java程序 包的聲明:package day01 package是關(guān)鍵字 day01是包名 包的概念和含義 包名的命名符合標識
15、符命名規(guī)則即可 企業(yè)項目開發(fā)中,包的命名也有企業(yè)規(guī)范的如:com.shunshi.abs.model .來隔開每一部分,每一部分都是包結(jié)構(gòu) com.shunshi這個是軟件公司網(wǎng)址的url,可以區(qū)分確認哪個公司開發(fā)的軟件產(chǎn)品 com.sun/com.ibm,這樣包名不會產(chǎn)生沖突 abs是項目名,model是項目中的模塊/子模塊名 寫MySecondJava.java程序 使用包結(jié)構(gòu) package com.shunshi.corejava.day01 使用包后,如何編譯 寫MySecondJava.java,使用包聲明: package corejava.day01; 編譯程序:javac d
16、 . MySecondJava.java,JVM搜索類的順序與類加載,-d選項的作用: 把編譯好的字節(jié)碼放在你指定的目錄下,所以需要指定目錄 如果源文件聲明了包結(jié)構(gòu),那么在給定的目錄位置下會按照包結(jié)構(gòu)自動創(chuàng)建目錄結(jié)構(gòu),編譯好的字節(jié)碼文件是放在最終的子目錄下 為什么使用包? 企業(yè)項目開發(fā)中方便管理不同的類 用包來分門別類地組織不同模塊功能的類 使用包的好處:舉例:航班機票預(yù)定項目 JVM搜索類的順序與類加載 使用包結(jié)構(gòu)編譯后,如何運行? 使用java,注意:java corejava.day01.MySecondJava 如何運行?類加載 演示錯誤情況的發(fā)生 直接使用 java MySecond
17、Java 則報告找不到這個類的定義的錯誤提示 為什么找不到?從系統(tǒng)如何去找類來說,與jvm在查找類時的搜索順序有關(guān)系 直接進入包結(jié)構(gòu)目錄cd corejavaday01,使用java MySecondJava運行,則報告找不到類的定義同時給出錯誤原因(找到的類與要運行的類不一致),Java 常用命令,為什么不一致呢?找到的是帶包的,運行的是不帶包的 CLASSPATH的應(yīng)用 深刻理解java技術(shù)體系 如何使用第三方的java技術(shù) 常用命令 javac 選項 源文件名 編譯java 源文件 -d 查看javac命令到底有哪些選項,直接使用javac/javac -help命令回車 java 選項
18、 類名 參數(shù) 運行java程序 jdb 選項 類名 參數(shù) 進行debug調(diào)試的命令 javadoc 選項 包名 源文件名 生成jdk的api形式的程序文檔 在java源文件中允許使用文檔形式的注釋 單行注釋 /注釋內(nèi)容 多行注釋 /*注釋內(nèi)容*/ 多行注釋不能嵌套,但可以嵌套單行注釋 文檔注釋 /*注釋內(nèi)容*/ 出現(xiàn)在類的定義,方法的定義,屬性的定義之前,用來說明類的含義,方法的含義,屬性的含義 使用javadoc命令給MySecondJava.java生成文檔注釋 在MySecondJava.java中,類前,主方法前寫一些文檔注釋 使用javadoc命令將文件MySecondJava.ja
19、va中的文檔注釋抽取出來生成程序文檔。javadoc d .doc MySecondJava.java,Java 常用命令,分析程序文檔結(jié)構(gòu)和理解jdk的API文檔 jar ctxuvfm0Mi jar-file manifest-file -C directory files 創(chuàng)建/展開/更新一個jar文件 jar文件:sun公司定義的一種文件格式,與zip格式相同,可以用普通的解壓縮工具解開。jar文件壓縮的一般是java的字節(jié)碼文件,按照包結(jié)構(gòu)組織好的.class文件。 創(chuàng)建jar文件: 將d:corejavaday01中的1個.class文件打包成一個jar文件 jar -cvf fi
20、rst.jar .corejava 不與源文件放在一起 c 代表創(chuàng)建jar文件 v 是可視化即可以看見創(chuàng)建過程和創(chuàng)建詳細清單 f 代表可在后面指定jar文件名 解壓生成后jar文件,有corejava和META-INF2個文件夾 jar文件有什么作用? 將開發(fā)的類打包jar文件給客戶,客戶得到后只需要設(shè)置classpath后就可以用了 開發(fā)一個中間件,將中間件的程序打包成jar 打包day01.jar(corejavaday01中的.class)給第三個程序MyThirdJava使用。 寫MyThirdJava.java程序,Jar文件和import的使用,將day01.jar路徑設(shè)置給CLA
21、SSPATH 將day01包下的MySecondJava.class移走 將javacodeday01下的MySecondJava.java移走 編譯運行MyThirdJava來演示自定義jar文件的使用 思考問題 找不到MySecondJava,沒有給包結(jié)構(gòu)名 修改為corejava.day01.MySecondJava msj=new corejava.day01.MySecondJava(); String的使用不需要rt.jar路徑給CLASSPATH,也不需要使用包結(jié)構(gòu)名+類名 因為它是lang包下的類 若在MyThirdJava.java中自定義一個String class Str
22、ing則會報錯 與JVM搜索類的順序有關(guān),先搜索當前包下的String,它無構(gòu)造方法 簡便引入某包下的類 直接使用包名+類名的形式,程序太煩瑣了 在程序的開頭使用import 包結(jié)構(gòu)名.類名來引入使用的類 要引入某包下的所有類則 import 包結(jié)構(gòu)名.*;,JDK的常用包,java.lang:JAVA語言包,核心的類和接口,無需導(dǎo)入可直接使用。如String、Math、Integer和Thread。 java.awt/javax.swing/java.awt.event:做java的圖形開發(fā)使用的包,包含有圖形組件,用來構(gòu)建和管理應(yīng)用程序的圖形用戶界面。 java.applet:用來開發(fā)ja
23、va小程序的類和接口,包含了可執(zhí)行applet特殊行為的類。 java.io:包含了java所有做輸入輸出的類和接口,包含處理I/O文件的類 :用來做網(wǎng)絡(luò)開發(fā)的類和接口 java.util:java工具包,包含java開發(fā)常用的工具類,java的時間日期,java的數(shù)據(jù)結(jié)構(gòu),隨機數(shù)發(fā)生等。,知道java的特殊符號 熟悉java的標識符 掌握java的關(guān)鍵字的使用 理解java各數(shù)據(jù)類型的存儲和使用 原始數(shù)據(jù)類型 基本數(shù)據(jù)類型的轉(zhuǎn)換 定義類,對象,成員變量和引用變量 類的聲明 類變量與類成員變量 創(chuàng)建類的對象實例和使用默認值 描述引用變量與類對象的關(guān)系 掌握表達式和運算符的使用,Day02,Ja
24、va中的特殊符號,注釋 單行注釋:/ 多行注釋:/*.*/ 這兩種注釋只能通過打開源文件來查看,寫程序一定要寫注釋。注釋與程序應(yīng)是2:1 多行注釋:/*/ 這個注釋可以不打開源文件來查看,java中有一個javadoc工具,它的作用是將源文件中的/*.*/注釋單獨抽出來放在另一個文件中。 例如: javadoc d . Hello.java,執(zhí)行后,會在當前目錄下生成一個doc目錄,里面文件就可查看注釋了。 其他符號 ; 一個語句的結(jié)束 一個語句塊 空白字符 空格,tab,回車,換行等,Java標識符,標識符:程序中的組件名字,包括類名,方法的參數(shù)名,變量名,方法名,包名等 定義標識符的規(guī)則:
25、 以_ ,$,字母開頭; 只含有_,$,字母,數(shù)字; 沒有長度限制,不能有空格; 不能使用java的關(guān)鍵字或保留字 大小寫敏感 例如:_abc , $ABC ,2A ,A# ,For,順時 Java開發(fā)的命名習慣 所有的命名要望文生義,這樣才具有良好的可讀性 Total,Sum,ShunshiStudent, 類名,接口名:每個單詞的首字母大寫,其他字母小寫 如類MyFirstJava,Player,Teacher 屬性,方法,,局部變量名:第一個單詞全小寫,從第二個單詞開始以后每個單詞首字母大寫,其他字母小寫 如方法 getName() setDoctorBirthday() 常量:每個單詞
26、所有字母全部大寫,單詞之間用_來連接 java中使用final修飾 final int MARK_GREED=22; 包名:所有字母全部小寫 如package com.shunshi.corejava.day01,Java關(guān)鍵字,關(guān)鍵字:對Java技術(shù)編譯器有特殊的含義,可以被編譯器識別執(zhí)行 abstract do implements private throw boolean double import protected throws break else instanceof public transient byte extends int return true case fals
27、e interface short try catch final long static void char finally native super volatile class float new switch while continue for null synchronized default if package this Java關(guān)鍵字特點 java關(guān)鍵字與c+很多相似,只要與c+一樣的,它的含義都與c+中的相同 有些關(guān)鍵字c+有,而java沒有 sizeof求出某種類型的變量的占內(nèi)存的大小 為什么c+有sizeof? 因為不同機器內(nèi)存占用空間大小不一樣 16,32,64位,取
28、決于操作系統(tǒng)平臺。 為什么Java不需要? 因為有JVM。 java中的關(guān)鍵字都是小寫的 true、false和null為小寫,而不是象在C+語言中那樣為大寫。嚴格地講,它們不是關(guān)鍵字。,Java關(guān)鍵字,有些關(guān)鍵字java沒有取消保留下來,但它自己也不用它也不給程序員用 goto和const不是Java編程語言中使用的關(guān)鍵字,而是保留字。 什么是保留字? 為什么保留下來但不能用? 在java中final替代const goto在c+代表無條件跳轉(zhuǎn),功能很好,但不能經(jīng)常用,要謹慎。 很多建議去掉goto關(guān)鍵字,沒有理解goto真正含義。 為什么c+到現(xiàn)在都沒有刪除掉goto?它有一個特殊使命 J
29、ava中使用break代替goto 跳出一層循環(huán) :break 跳出多層循環(huán):break out out是一個標號,可以跳到out標識處 break避免濫用goto,把goto功能削弱了,只能跳到外層循環(huán) java中加入新的關(guān)鍵字enum assert enum:枚舉 assert:斷言,Java的原始數(shù)據(jù)類型,boolean true/false byte 8位整型 1個字節(jié) short 16位整型 2個字節(jié) int 32位整型 4個字節(jié) long 64位整型 8個字節(jié) char 16位 unicode 字符 2個字節(jié) double 64位浮點數(shù)字型 8個字節(jié) float 32位浮點數(shù)字型
30、4個字節(jié),boolean類型,Java中定義boolean類型 boolean b=true; Java中的boolean類型的取值只能是true,false Java中的boolean類型不能與int通用,而在c+中可以 C+中,0代表false,非0代表true boolean與int通用好還是不好呢?不好 舉例說明 c+中的boolean與int通用 int a=1; if(0a2) coutaendl;,Integer 數(shù)據(jù)類型byte,short,int,long,Java中的4種整型類型,Java的不同整型占用內(nèi)存空間的大小不一樣 Java中整型的存儲規(guī)則與c+一樣, 但java整
31、型沒有無符號和有符號的區(qū)分,這與c+不一樣。Java中所有整型都是有符號的,這樣就可以求出每個整型能表示的范圍。 以byte為例說明 Byte是8位整型 1個字節(jié) 最多可表示28=256個數(shù) 從(-27)-128到127(27-1) 為什么是-128-127而不是-127-128呢?與整型數(shù)據(jù)在內(nèi)存的存儲規(guī)則有關(guān) 整型數(shù)據(jù)在內(nèi)存空間中的存儲方式 正整數(shù)(最高位為0)在內(nèi)存中是存儲原碼 負整數(shù)(最高位為1)在內(nèi)存中是存儲其補碼 補碼是不考慮符號情況下原碼取反后末位加1。以-5來分析補碼 分析一些特殊數(shù)字:8位全為1則是數(shù)字-1,8位全為0則是數(shù)字0 不考慮符號位最大的數(shù)是01111111表示數(shù)字
32、127,最小的數(shù)10000000表示數(shù)字-128,Integer 數(shù)據(jù)類型在內(nèi)存的存儲方式,為什么用補碼存儲負數(shù)?方便二進制計算,例如-128+127=-1 其他類型的整型在內(nèi)存的存儲方式與byte相同,只是空間更大。其他類型的整型表示數(shù)的范圍如前面 整型數(shù)據(jù)表示 long類型使用 l或L來表示 int的不同進制:十六進制用0 x或H表示 8進制用0或O表示 10進制用D或10表示 默認類型為int 整型定義 short s1=10000; short s2=40000; 超出范圍 long l=40000L; Long la=1234567l; int ia=0 x55; /十六進制 int
33、 ib=011;/8進制 byte bb=0 x771;/超出范圍 寫TestIntBool.java程序 byte a=1, b=2; byte c=a+b; int d=a+b; byte e=2;e=e+2; e+=2; int ia=0 x2aff; byte bb=(byte)ia; System.out.println(bb); boolean bl1=false; if(bl1=false) System.out.println(bl1); boolean bl2=true; if(bl2=1) System.out.println(bl2);,char類型 char 字符型為1
34、6位, 2個字節(jié),與c+不一樣,采用的是unicode編碼,unicode編碼是統(tǒng)一編碼,可包含字母,數(shù)字,符號,中文文字等 unicode碼是采用16進制表示的 如u0061 2個字節(jié)的unicode編碼可以表示216個字符,字符使用單引號來表示 127個ASCII碼全可表示 英文字符,控制字符,數(shù)字,標點符 表示其他語言的字符:中文,德語,法語,阿拉伯等 一個char類型本質(zhì)上是一個整型 char與short都是16位的,他們的差別? 通過查詢unicode編碼集可以獲取一個整型值對應(yīng)的unicode字符 unicode編碼集包含了ASCII碼集的 在0-127內(nèi)unicode編碼值與AS
35、CII碼值一樣,表示的字符也一樣 常見的ASCII碼值 :A:65 a:97 0:48 通過unicode碼得到碼值可以將16進制轉(zhuǎn)換為10進制,char zhchar=中; char enchar=a; char enchar1=97;在java中,int 與char 是可以互相轉(zhuǎn)換的 char ucchar=u0061; char uchar1=u61;因為unicode是16進制的,2個字節(jié)則需要16位,需要4個16進制數(shù) 下面寫一組char與int的定義,TestChar.java,char數(shù)據(jù)類型,String類型簡介,Java中的轉(zhuǎn)義字符 : 單引號 ” : “雙引號 :順斜杠 n
36、:換行 t:tab制表符 b:退格 0:u0000 unicode碼值為0的空字符 String類型 String類型:字符串類型,它不是java的8種基本類型,是類的類型 String是java的一個類,這個類的實例叫做String對象 Java中字符串用”雙引號來引用 Java中的字符串類不是以0結(jié)尾 String類是Java中使用最多的類,它有很多有用的方法,查看jdk的api文檔 獲得String類的對象變量 String str1=“Hello”; String str2=new String(“ World!”); String可做什么操作 使用+號來連接字符串 String s1
37、=“12”; int ia=3; int ib=4; System.out.println(s1+ia+ib); System.out.println(ia+ib+s1); char charAt(int):返回參數(shù)int指示位置上的字符 System.out.println(str1.charAt(0); String concat(String):將當前String與參數(shù)String連接起來返回新串 System.out.println(str1.concat(str2);,String類型簡介,boolean contains(charSequence s):判斷一個字符串中是否包含參數(shù)
38、的子串 String str3=“Hello World!”; System.out.println(str3.contains(str1); boolean equals(String):比較2個字符串內(nèi)容是否相等,不忽略大小寫 String s2=“Hello”; String s3=“Hello”; System.out.println(s2.equals(s3); boolean equalsIgnoreCase(String):比較2個字符串內(nèi)容是否相等,忽略大小寫 String s4=“heLLo”; System.out.println(s4.equals(s3); System
39、.out.println(s4.equalsIgnoreCase(s3); int indexOf(String/char):獲得參數(shù)字符/字符串在改字符串中的第一次出現(xiàn)的位置索引,假如找不到則返回-1 System.out.println(str3.indexOf(“Wor”); System.out.println(str3.indexOf(o); length():獲得字符串的長度 System.out.println(str3.length(); 寫TestString.java,演示上面String的功能,浮點型數(shù)據(jù)類型,浮點數(shù)據(jù)類型:種 float:單精度,位個字節(jié)使用f或者F表示
40、 double:雙精度位個字節(jié)默認類型 使用d或者D表示 浮點數(shù)舉例 float fa=123.4f; float fb=123.4; 默認是double double直接賦給float精度丟失 float fc=12.5E300F; float fd=(float)12.5E301; double da=123D; double db=123.456d; double dc=123.45e301; 浮點數(shù)據(jù)類型的存儲方式 整型存儲方式是精確存儲 浮點存儲方式是近似存儲:實數(shù)范圍太大了,實數(shù)太多了,無法在內(nèi)存中對應(yīng)每一個實數(shù)的狀態(tài) 浮點數(shù)的近似存儲在程序中的問題:寫TestFloat.java
41、 實型值分母可為0,double d=0.0/0.0; System.out.println(d);編譯正確 double a=2.0,b=1.91,c=0.09; if(a-b=c) System.out.println(“ok”);else System.out.pringln(“no ok”); 結(jié)果輸出”on ok”。實型數(shù)值直接比較相等不安全,不要直接比較相等,但可以比較大小。,浮點型數(shù)據(jù)類型,假如一定想要2個實型數(shù)值比較是否相等,可以考慮比較2個實型數(shù)的差是否在一個非常小的范圍內(nèi) 想要輸出“ok”,則if(Math.abs(a-b-c)(1e-6) System.out.print
42、ln(“ok”); Math類 lang包下的類,它里面定義了很多方法來實現(xiàn)常用的數(shù)學運算 Math類中的方法都是靜態(tài)的 Math類中的方法: abs():求絕對值 sqrt():求平方根 pow():求乘方 cos(),sin(),tan(),ctan():數(shù)學的三角函數(shù)運算 random():獲得0-1之間的隨機數(shù) 在TestFloat.java中測試使用Math類中的方法 Math.abs(-5) Math.sqrt(9) Math.pow(2,3) Math.random()*100:獲得0-100之間的隨機數(shù),數(shù)據(jù)類型之間的轉(zhuǎn)換,數(shù)據(jù)類型之間的轉(zhuǎn)換分為2種 自動類型轉(zhuǎn)換 a類型轉(zhuǎn)換為
43、b類型時,a的取值范圍是b的取值范圍的完全子集 這就是自動類型轉(zhuǎn)換 在java的8種基本類型中,除boolean以外,其他7種類型都是可以相互轉(zhuǎn)換的。 7種原始類型之間可自動轉(zhuǎn)換結(jié)構(gòu)圖 byteshortintlongfloatdouble char 順著箭頭方向可自動轉(zhuǎn)換;逆著箭頭方向則是強制轉(zhuǎn)換 強制類型轉(zhuǎn)換:只要不能自動轉(zhuǎn)換的,則只能是強制轉(zhuǎn)換 整型數(shù)據(jù)之間的強轉(zhuǎn):改變數(shù)據(jù)的符號;改變數(shù)值 int a=0 x2aff; byte b=(byte)a; b為-1 強制轉(zhuǎn)換的原理:從最低位開始取到目標類型長度為止 整型之間的強轉(zhuǎn)是保留二進制低位,去掉高位,需要考慮在內(nèi)存中如何存儲 實型強轉(zhuǎn)整
44、型是保留整數(shù),去掉小數(shù),不考慮實型在內(nèi)存中的如何存儲 寫一個DataTypeTest.java程序演示數(shù)據(jù)類型轉(zhuǎn)換,數(shù)據(jù)類型之間的轉(zhuǎn)換,byte+byte會自動提升為int byte a1=1,a2=2;byte a3=a1+a2;(精度丟失) +=不進行類型提升 byte c=3; c=c+3; c+=3;System.out.println(c); 默認整型為int,int,long提升為float有精度丟失 float fa=37; System.out.println(fa); int ia=(int)fa; System.out.println(ia); long la=0 xfff
45、fffffffL;float fb=la;System.out.println(fb); long lb=(long)fb; System.out.println(lb); 整型之間的強轉(zhuǎn) int a=0 x2aff; byte b=(byte)a; System.out.println(b); float轉(zhuǎn)換為double會有精度丟失 float fe=1234.56f; double de=fe; System.out.println(de); float ff=(float)de; System.out.println(ff); 整型除法 System.out.println(5/2);
46、 System.out.println(float)5/2); char與int的轉(zhuǎn)換 char c1=A; int iic=c1;System.out.println(iic); char c2=99; System.out.println(c2);,Java中的特殊類型對象,為什么會有對象? 早些時候的編程語言和初級程序員將每個變量看作相互無關(guān)的實體。例如,如果一個程序需處理某個日期,則要聲明三個單獨的整數(shù):int day, month, year; 盡管這種作法很容易理解,但它存在兩個重大缺陷 名稱太多,會引起混亂 忽略了各個變量之間的聯(lián)系 例如:若程序需同時記錄幾個日期,則需要三個不同
47、的聲明,要記錄兩個生日, 則要使用 int myBirthDay, myBirthMonth, myBirthYear; int yourBirthDay, yourBirthMonth, yourBirthYear; 忽視了日、月和年之間的聯(lián)系并把每個變量都作為一個獨立的值,每個變量都是一個獨立單元(在本例中為date)的一部分并被相應(yīng)地處理 Java的對象類型 為克服上述兩種缺陷,Java編程語言使用類來表示這種新類型 Java除了中基本類型,還有一種類類型或者叫做對象類型(或是一個類,或是一個接口) Java的類類型不是表達一個簡單的數(shù)據(jù),而是表達一個較復(fù)雜的數(shù)據(jù)(復(fù)合數(shù)據(jù)),Java中
48、的特殊類型對象,例如:描述一個學生,定義一個學生類,它包含學生的相關(guān)信息:姓名,性別,年齡,專業(yè) 創(chuàng)建一個學生類 class Student private String name; private boolean sex; private int age; private String major; public Student(String name,boolean sex,int age,String major) =name; this.sex=sex; this.age=age; this.major=major; public void setName(Strin
49、g name) this.year=year; public void setSex(boolean sex) this.sex=sex; ,Java中的特殊類型對象,public void setAge(int age) this.age=age; public void setMajor(String major) this.major=major; public String getName() return name; public boolean getSex() return sex; public int getAge() return age; public String ge
50、tMajor() return major; Student就是一個新的類型,就像int,float等一樣可以用來定義變量 例如:Student stu; 聲明一個Student的變量stu,則它里面的name,sex,age,major也都隱含聲明了,name,sex,age,major稱為stu的成員變量。,Java中的特殊類型對象,類類型對象類型的數(shù)據(jù)的存儲方式與基本類型數(shù)據(jù)存儲方式的差別 類型創(chuàng)建一個Student對象: Student stu; stu=new Student(“LiDW,true,22,”computer”); 原始類型的聲明 int x;x=7; float y=
51、9.9f; 把類看作一個類型的話,它的使用其實和基本類型int等一樣,只不過賦值是賦的一個復(fù)雜的復(fù)合類型數(shù)據(jù),是new出的對象 存儲形式的差別 int x; x=7; 基本類型聲明變量時就已經(jīng)創(chuàng)建了變量并分配空間,無論它是否已經(jīng)賦值,賦值只是將值放入已分配的空間 Student stu;對象類型聲明Student stu;時,在內(nèi)存空間也給stu分配了空間。 那分配了多少空間?Student中所有成員變量的空間大小和嗎? 不是取決于Student的大小,與Student的大小無關(guān) 那stu是什么?在java中把stu叫做引用,這個引用與c+中的引用完全不一樣 Java中的引用與c+的指針相似,
52、java中沒有指針,只有引用,它保存的也是一個地址值(內(nèi)存空間中的Student對象的地址) Java中的引用與c+的指針有差別 C+中指針可被程序員操作:int* p; p+,p-,*p等等,所以很危險,不安全 Java中不允許程序員對引用做操作,只能通過引用訪問對象,但不能對引用進行+,-等操作,所以java語言更安全。,Java中的特殊類型對象,Java的引用需要多少個字節(jié)呢? 引用無論什么類型都保存的是內(nèi)存中的地址值 地址值常見的是4個字節(jié),相對來講很固定的值 地址值的長度嚴格來講也取決于不同的機器平臺,由機器的尋址空間決定的。例如常用的是32位機器,所以4個字節(jié) 那么stu=new
53、Student(“LiWD”,true,22,”computer”)又干什么? 在內(nèi)存空間中又開辟了一個區(qū)域?qū)iT用來保存該Student對象的數(shù)據(jù) 賦值語句將開辟的對象空間的地址賦給stu,stu就指向這個對象 綜上所述,對象類型的存儲方式即需要兩個空間:引用空間,對象空間 Java中的對象與引用的關(guān)系:可以打個比方來看看 對象可以看作是充滿氫氣的氣球,氣球中的空氣就是對象中的數(shù)據(jù),氣球我們無法直接拿到 任何時候我們拿到氣球都必須通過連接它的一根繩子,這跟繩子就可以看作是引用 深入理解對象與引用的關(guān)系 同一個氣球可不可以有多根繩子連著它?可以 就像雙胞胎牽同一個氣球 Student stu1=
54、new Student(“LiWD”,true,22,”computer”); Student stu2=stu1; stu2,stu1保存的是相同的地址值,stu2,stu1指向同一個對象 通過stu1修改了對象Student的數(shù)據(jù)值后,通過stu2訪問的對象也就改了,Java中的特殊類型對象,可不可能一根繩子同時栓著多個氣球?不能 如果一根繩子沒有連任何氣球,那么對于這個引用的訪問有意義嗎?沒有意義 Student stu3=null;定義了一個空引用,沒有指向任何對象 假如使用stu3去訪問name,age等會報告空指針異常 NullPointerException 如果某一個氣球沒有任
55、何繩子栓著,那它怎么辦?飛走了 這個氣球就無法訪問了,變成垃圾。(垃圾占用空間,但我們無法訪問) Student stu4=new Student(“LiWD”,true,22,”computer”); stu4=null; Java的垃圾回收機制 Java不讓程序員管理內(nèi)存 一個系統(tǒng)級線程專門掃描內(nèi)存,回收垃圾 垃圾回收是自動進行的,程序員可以建議但不能控制,程序員調(diào)用java.lang.System.gc()來告訴JVM做垃圾回收。程序員建議后,也不一定就回收。,Java中的特殊類型對象,一般java.lang.System.gc()語句放在前面程序已釋放了很多垃圾后,則調(diào)用該語句執(zhí)行的可
56、能性大 Java的垃圾回收并不是馬上回收,jvm有一套算法來確定什么時候進行垃圾回收 Java垃圾回收與c+內(nèi)存釋放的比較差異:打個比方 C+內(nèi)存釋放:相當于學校食堂吃飯,吃飯后要將餐盤送到回收處,若你不做則大家會鄙視你。若大家都不做,則長時間就沒有餐盤了。 Java垃圾回收:相當于餐館中吃飯,吃完了,只結(jié)帳就走了。餐館自然有人來回收。無需自己把餐盤送到后臺。 理解對象 對象無處不在;對象彼此聯(lián)系;對象有屬性;對象有方法 There are students and a teacher in classroom,Java的運算符,賦值運算符:一個簡單的賦值=和11個復(fù)合賦值 =,*=,/=,%
57、=,+=,-=,=(右移位),=, 比較運算符 ,=,=,instanceof(比較類型),= =,!= Java的數(shù)據(jù)類型中哪些是可用比較運算符來連接的 算術(shù)運算符 +,-,*,/,% 5/2, (float)5/2,Java的運算符,移位運算符 所有的移位運算只能針對整型數(shù)據(jù)操作 (右移,右移一位等于除2),(無符號右移) 有符號的右移:則移走后最左邊高位填補為原來的符號位 有符號的左移:則移出去的不管,移進來用0來填補 無符號右移:則移出去的不管,移進來都用0填補 int a=68; a=a1); 10 System.out.println(in11); 10 int in2=-20;S
58、ystem.out.println(in21); -10 System.out.println(in21); 很大的數(shù) 位運算符 ,Java的運算符,想要a高8位不變,低8位全變0 a 操作數(shù)只能是布爾表達式 在java中, ,dd,Java中的變量,字符串常量:由雙引號“”括起來表示。.如“hello”,”33”,”tu0024” 空值常量:null表示空值。 常量的聲明: final 類型 常量名; final 類型 常量名=常量值; Java中的變量 什么是變量 系統(tǒng)為程序分配的內(nèi)存單元,存儲數(shù)據(jù)的,用一個標識符來表示,其中的數(shù)據(jù)值是可以改變的,所以叫變量 變量名與變量值 定義變量的標識
59、符叫變量名 內(nèi)存所裝載的數(shù)據(jù)值叫變量值 例如 int x=0,y; y=x+3;解釋其在內(nèi)存中的實現(xiàn)原理 變量的類型 八種基本類型:boolean,byte,short,int,long,char,float,double 對象類型:類,接口,數(shù)組 不同類型變量的取值范圍:變量的使用特別要注意的就是數(shù)據(jù)長度。,Java的變量,Java的變量,基本類型變量之間的數(shù)據(jù)轉(zhuǎn)換 自動類型轉(zhuǎn)換:也叫隱式類型轉(zhuǎn)換 轉(zhuǎn)換的兩種類型之間要兼容 目標類型的取值范圍要大于源類型 如例:byte b=3; int t=b;/程序會將b的結(jié)果自動轉(zhuǎn)換為int型 強制類型轉(zhuǎn)換:顯示類型 轉(zhuǎn)換當兩種類型不一致,不兼容 目標類型的取值范圍小于源類型時則就需要進行強制轉(zhuǎn)換 轉(zhuǎn)換方法:目標類型 變量=(目標類型)值 例:int x; byte b=(byte)x; 強制轉(zhuǎn)換是將x的值轉(zhuǎn)換后賦給b,而變量x本身的類型不變 強制轉(zhuǎn)換會丟失數(shù)據(jù) 表達式的數(shù)據(jù)類型自動提升 表達式在計算值時也會自動進行數(shù)據(jù)類型提升,Java的變量,變量的聲明:類型 變量名; 類型 變量名=變量值; 變量的作用域 代碼塊:在程序中一
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 十分鐘講清創(chuàng)業(yè)計劃書
- 珠海硅酮密封膠項目申請報告參考范文
- 2025-2030年中國奧維先行業(yè)深度研究分析報告
- 教育信息化的現(xiàn)狀與發(fā)展趨勢研究報告
- 藥企商業(yè)配送工作計劃范文
- 二年級數(shù)學基礎(chǔ)知識復(fù)習計劃
- 2025年中國醫(yī)藥零售市場運行態(tài)勢及行業(yè)發(fā)展前景預(yù)測報告
- 新教材下的語文課堂創(chuàng)新計劃
- 濕電子化學品項目可研報告
- 訂單處理系統(tǒng)升級服務(wù)實施計劃
- 倉儲場所消防安全培訓(xùn)
- 大學課件-電路分析基礎(chǔ)
- 2025年中國流行成分和原料消費深度洞察白皮書
- 2025年昆明長水機場勤務(wù)員招聘筆試參考題庫含答案解析
- DG-TJ 08-2336-2020 綠道建設(shè)技術(shù)標準
- 安全生產(chǎn)法律法規(guī)匯編(2025版)
- 《光電對抗原理與應(yīng)用》課件第3章
- 二次供水水箱清洗操作流程
- AEO貿(mào)易安全培訓(xùn)
- 推行注塑生產(chǎn)自動化改造計劃
- 執(zhí)行案件審計報告范文
評論
0/150
提交評論