自學JAVA總結

来源:http://www.cnblogs.com/zlx2905/archive/2016/03/15/5277868.html
-Advertisement-
Play Games

2.在定義常量的時候C語言中定義為const而JAVA中為final3.在JAVA聲明成員變數的時候,使用static來定義。4.在JAVA中的boolean類型只包括true和false,但是在C中非0為true,0為false5.在JAVA中byte、short、int、long其存儲空間分別為


2.在定義常量的時候C語言中定義為const而JAVA中為final
3.在JAVA聲明成員變數的時候,使用static來定義。
4.在JAVA中的boolean類型只包括true和false,但是在C中非0為true,0為false
5.在JAVA中byte、short、int、long其存儲空間分別為1、2、4、8個位元組,而在C中其char、short、int、long其存儲空間分別為1、2、4、4個位元組。其中這裡的long為int long。C語言中有unsign類型,而Java中沒有。
6.long類型在Java中必須在賦值後面使用L表示,否則會出錯。或者會成為int類型,但是int類型的長度會比long少。C語言中沒有此規則。
7.JAVA中數據類型按容量大小(表示的數的大小)排序,不是按所占記憶體大小排序。
8.int類型數據可以直接賦值給byte類型變數。byte類型變數是直接將int類型數據直接砍掉到他所需要的長度,而將double類型的數據不可以直接賦值給float類型數據,因為小數點的限制。
9.邏輯與& 邏輯或| (都必須計算兩端的值) 短路與&& 短路或||可以不計算第二個值
10.switch後面的判斷值應該為int類型,在Java中可以是char,byte,short類型,因為其可以自動轉動為int類型數據。

第二章題
1.輸出1-10的階乘之和
2.輸出100以內奇數這和
3使用while和do-while迴圈輸出1-9
4.輸出1-100以內5個可以被3整除的數
5輸出101-200 內的質數

第三章 面向對象
註:面向對象思維:1那些個類那些個對象2這些類和對象有什麼屬性和方法3類和類之間具備什麼樣的關係。合適的方法應該出現在合適的類裡面。
對象和類的關係:類可以看成一類對象的模板,對象可以看成該類的一個具體實例。
類(對象)之間的關係
關聯關係:一個類的方法的參數是另一個類的對象。 關係不是很緊密(最弱)
繼承關係:XX是一種XX,可以考慮用繼承關係封裝。(在做設計的時候很有可能會生成一種生成樹,但是也有可能從多個不同的類繼承。C++存在多重繼承(如果父類裡面存在重名的成員變數,處理起來會非常麻煩),但是JAVA存在繼承多個介面)。強
聚合關係:整體和部分的關係(XX是XX的一部分呢)。細分之下還可以分為聚集(身兼數職)和組合(密不可分)的關係。強
實現關係:當子類繼承父類的方法時,並由子類來實現其具體方法,這叫實現。
多態關係:

static關鍵字:
static方法是不可以直接訪問非靜態變數和方法 。
對象可以看成屬性(成員變數)和方法的封裝體。
Java和C的區別:
C是面向過程的編程,它的屬性和方法是分開的,不是聚合在一起的,而Java是面向對象的,對象將屬性和方法封裝到一起,然後復用,即Java復用性(方法和屬性)更強,而面向過程復用的是方法。除了可復用性,還有可擴展性和維護和替換比面向過程更加方便。

JAVA語法
引用:除了基本類型(4類8種)之外的變數類型都稱之為引用類型,初始值為null。
重載:方法名一樣,參數類型或者參數個數不一樣,但是返回值類型不一樣不構成重載。
static方法裡面不可訪問非static成員,且static和其他引用應該放在data segment區

打包:在dos環境下將class文件進行打包時,輸入jar -cvf test.jar *.*即可完成。此時將其拷貝給其他人後,其他人可使用,打包記得在需要打包文件的父目錄進行。

訪問修飾符:private default(只可以被同一個包內部的類訪問) protected public(在C ++中是friend)
修飾符 類內部 同一個包 子類 任何地方
private YES
default YES YES
protected YES YES YES
public YES YES YES YES

繼承:
一個孩子只能有一個爸爸(extends),但是他可以有繼承(implement)多個介面(interface)。總起來說孩子比父親的範圍大。
super繼承父類的方法。
繼承中的構造方法:
子類構造過程中必須調用其基類的構造方法。super.父類構造方法,this.子類其他構造方法。如果調用super,必須寫在子類構造方法的第一行。
如果子類沒有顯示調用父類的構造方法,則程式會自動調用其父類的無參數的構造方法,然後再執行子方法。如果子類沒有顯示調用父類的構造方法,而父類沒有無參數的構造方法則編譯會出錯。

重寫:就是與繼承的方法的方法名稱、參數列表、返回類型必須一致,且其訪問許可權應該大於或者等於 其繼承的方法。

哈希編碼:獨一無二的代表了一個對象,並且可以通過哈希編碼找到那個對象所在的位置。map<鍵,值>。

equals:object對象的equals方法定義是當兩個變數指的是同一個對象的時候和==是一樣的使用。當比較兩個不同對象但是在其他方面一樣時,可以重寫equals方法來實現。

對象轉型(可以向上轉型也可以向下轉型和數值類型相似):
例如上轉型:Animal a=new Cat();a.enjoy(); 下轉型:Animal a = new Cat(); Cat c = (Cat)a; c.enjoy();
instanceof後面加類名,從而來判斷該引用變數所指向的對象是不是屬於該類或者該類的子類。

註:父類引用指向子類對象,其看到的只是子類繼承父類的方法和變數,不可以訪問其子類對象新增加的內容。可以在代碼中產生可擴展性。

多態(擴展性達到極致)
使用多態的三個條件:1.要有繼承 2要有重寫3父類引用指向子類對象

動態綁定:實際中new的誰就調用誰。是指執行期間而非編譯期間判斷所引用對象的實際類型,根據其實際中調用的誰就調用其相應的方法。new的是誰就調用誰的方法。

final:final的變數的值不能改變,final的方法不能被重寫,final的類不能被繼承

抽象類:要由子類來實現抽象方法。介面也是一種特殊的抽象類(裡面的方法都是抽象方法,成員變數都是static final類型)

第四章 異常處理
列印異常出現信息位置:e.printStackTrace()跟蹤異常事件發生時執行堆棧的內容。getMessage()只是列印異常信息。
throwable包括Error、Exception。Error是系統錯誤,Exception是可以處理的異常。Exception下又有RuntimeException是可以逮也可以不逮,剩餘的錯誤必須逮。但是程式中如果throws出的錯誤需要逮。

在方法名後使用throws+異常,方法內部是throw+異常

finally 無論捕到或者沒捕到異常均執行其裡面的語句,從而一般進行資源的清除工作。

第五章 數組
在C中必須指定數組的範圍,即大小,且其值放在棧空間上,而Java是不能指定數組大小的,其值放在堆
空間上。
每個數組都有一個屬性length表長度,用.length。
System.exit(0|-1);-1為非正常退出,0是正常退出。

在這裡涉及到Java排序的演算法問題。快速排序、冒泡排序、希爾排序、堆排序、選擇排序。
排序:
選擇排序:將數組裡的值按選擇排序方法:將數組裡的值從小到大排序,將第一個數值與後面的數值做比較,當找到最小的值後進行位置交換,然後進行下一輪的迴圈,直到結束。
修改使選擇排序的效率更高:每次迴圈都找到未排好序列的最小值,然後進行交換。(重新做一遍)

冒泡排法:從後往前,從下往上
作業:整形的冒泡排序,date的選擇排序 數三退一500人,最後的那個人是原來的第幾個位置
雙向迴環鏈表
搜索:往往是建立在已經排好序的基礎之上。
二分法查找

二維數組:在JAVA中不能在靜態初始化的時候定義幾維美維幾個數組,由JAVA自動分配,自動定義。
在數組arrayCopy中,如果更改拷貝過後的數組中的值,則被拷貝的數組的值也將改變。

常用類:
String、StringBuffer區別:可以在StringBuffer後面直接添加字元串。
String類表示不可變的字元序列。
StringBuffer代表可變的字元序列。
例:
String s1="Hello";
String s2="World";
//s1+=s2;//HelloWorld記憶體分析:在data seg區一塊記憶體是Hello,還有一塊記憶體是World在執行第三句話的時候是將上面兩個變數的值拷貝到另一塊記憶體區間,然後再將s1指向這塊記憶體區。

StringBuffer的append方法。添加。reverse逆序

Math類的round四捨五入是long類型

File類.io.
路徑分隔符separator 在windows反斜杠,Linux正斜杠,或者都是用/正斜杠。long類型來存儲上次修改時間。

遞歸:關鍵是找到方法,找參數和返回值。

枚舉:某些類型必須取某些值之一。enum

第7章容器(重點)集合
容器:裝其他各種各樣的對象。

一個圖一個類,三個知識點六個介面
圖:容器之圖。util
<interface>
Collection(集合。對外提供方法)
<interface> <interface> <interface>
Set(沒有順序
並且不可以重覆) List (有順序且可以重覆equals) Map

HashSet LinkedList ArrayList HashMap

容器類對象在調用remove、contains等方法時需要比較對象是否相等,這回涉及到對象類型的equals方法和hashCode方法以實現自定義的對象相等規則。
註:相等的對象應該具有相等的hash codes。hash code非常適合做索引。

類:java.util.Collections提供了一些靜態方法實現了基於List容器的一些常用演算法(比如排序,二分查找等演算法)。

知識點:增強的for迴圈,泛型,自動打包/解包
介面:Collection 、Iterator、 Set、 List、 Comparable、 Map

Iterator做遍歷使用,每一個實現Collection介面的容器類都有一個iterator方法用以返回一個實現Iterator介面的對象。Iterator對象成為迭代器,用以方便的實現對容器內元素的遍歷操作。統一地遍歷了collection

iterator對象的remove方法是在迭代過程中刪除元素的唯一的安全方法。也就是說iterator的remove方法只能由它自己看到,其他的都不可以。

增強的for迴圈for(int i:array)
缺點:數組(不能方便的訪問下標值),集合(與使用Iterator相比,不能方便的刪除集合中的內容)。

Set無順序,不重覆。
retain交集

List 有順序可重覆
容器中的元素都對應一個整數型的序號記載其在容器中的位置,可以根據序號存取容器中的元素。

List容器中的元素都對應一個整數型的序號記載其在容器中的位置,可根據序號存取容器中的元素,和array差不多,但是List可以更改其大小。
Array讀快改慢 Linked該快讀慢 Hash兩者之間

arrayList使用數組作為底層的存儲空間,對外提供List的介面。
LinkedList以鏈表作為底層存儲空間,對外提供List的介面

Object set (int index,object element)將舊值返回。

Map用來存儲鍵值對(紅黑樹)
當比較多個元素時可用hashcode來比較,效率比較高。也就是重寫equals方法必須重寫hashcode方法
put方法將原來的value返回

自動打包(自動將基礎類型轉換為對象)與解包(自動將對象轉換為基礎類型)

泛型其實就是你要在裡面裝的東西和<>中的類型一樣即可,在列印使用時不需要使用強制轉換。
只要類後面跟著<>的則可以使用泛型,否則不可以使用。
在定義集合的時候同時定義集合中對象的類型,可以在Collection時指定同時也在Iterator指定時,從而增加程式的可讀性和穩定性。

第八章IO流(一個字元兩個位元組)
按數據方向:輸入流(位元組流:InputStream;字元流:Reader),輸出流(位元組流:OutputStream,字元流:Writer)。

按處理數據單位:位元組流 ,字元流
按功能:節點流(直接將管道查到數據源處,可以從一個特定的數據源(節點)讀寫數據(如:文件,記憶體)),處理流(套層的管道,也就是說通過對數據的處理為程式提供更為強大的讀寫功能)。

在讀入數據的時候記得關閉,在寫數據的時候記得flush經緩衝區的數據全部寫出到目的地,然後再關閉
經實驗驗證必須在外面定義一個整形變數,並將讀出的數據存放到那個變數中,然後再寫入,此時寫入的文件將與讀出的文件中是一樣的順序。

處理流:
1.緩衝流:帶緩衝區的。套接在相應的節點流之上,對讀寫的數據提供了緩衝的功能,提高了讀寫的效率,同時增加了一些新的方法。Buffer

2.轉換流:就是將位元組流直接轉換成字元流進行輸入或者輸出,其中有一個readline方法可以讀或者寫一行,從而增加其速度。InputStreamReader

3.數據流
DataInputStream套接在InputStream類型的節點流上。它提供了可以存取與機器無關的JAVA原始類型數據(如:int,double等)的方法。其構造方法DataInputStream(InputStream in)
先寫的先讀,先進先出,隊列。
4.print流(只有輸出流,沒有輸入流,列印)
PrintWriter和PrintReader都屬於輸出流,分別針對字元和位元組,不會拋出異常。其用於多種數據類型的輸出,且有自動flush功能。
5.Object流
serializable介面,指序列化,標記性介面,不需要實現其方法。
ObjectOutputStream
transient透明的修飾的成員變數,在序列化的時候不考慮,也就是在硬碟上寫的時候是其預設值。
externalizable介面是serializable的子介面。可以使用其方法自己控制讀或者寫。

第9章線程
線程:一個程式里的不同執行路徑。
進程:靜態的概念。class文件,.exe文件就是一個進程。進程的執行指的是進程裡面的主方法開始運行
可以通過創建Thread對象來創建線程,使用run方法來完成去操作,使用start()方法來啟動一個線程。

線程啟動必須調用Thread類的start()方法

創建新線程的兩種方法:
1.實現Runnable介面。
2.定義一個Thread的子類並重寫其run方法

開啟線程的時候儘量從介面處繼承。

線程的狀態轉換
阻塞狀態
| | (向上)
阻塞解除 導致阻塞的事件
|(向下) |
創建——>start()——>就緒狀態<——>調度<——>運行狀態——>終止

sleep:Thread的靜態方法(拋異常)。使用標誌來結束子線程的調用。
jion:合併線程,將子線程執行完了再繼續原來的線程。
yield()讓出CPU,當前線程進入就緒隊列等待調度。

線程優先順序的範圍是從1-10,預設值是5

線程同步
synchronized(this){}或者public synchronized void add(String name){}是執行這個方法過程中鎖住當前對象

解決死鎖的方法之一:降低同步的粒度,即鎖住當前整個對象,而不用鎖定裡面的子對象。

註:一個線程訪問一個帶有鎖的方法,鎖定了當前對象,另一個線程不可以執行這個對象中該加有鎖的方法;但是可以訪問這個對象中沒有加鎖的方法。

程式中訪問資料庫中的某一個資源時,一般在“改的方法”上加鎖;而在讀的方法上不加鎖

第十章 網路編程 技術+管理+溝通
網路編程的一本好書《TCP/IP詳解》
TCP:專門設計用於在不可靠的網際網路上提供可靠的、端到端的位元組流通信的協議,是一種面向連接的協議。TCP連接是位元組流而非報文流。(TCP三次握手)

UDP:嚮應用程式提供了一種發送封裝的原始IP數據報的方法,並且發送時無需建立連接,是一種不可靠的連接。

Socket 用來實現client----server連接 java.net
兩個JAVA應用程式通過一個雙向的網路通信連接實現數據交換,這個雙向鏈路的一端稱為一個Socket.
java.net包中定義的兩個類Socket和ServerSocket(TCP服務端的連接),分別用來實現雙向連接的client和server端。其是實現TCP的,只有TCP有C-S之分,UDP沒有。

建立連接時所需的定址信息為遠程電腦的IP地址和埠號(65536個埠號,也就是65536個應用程式,用來區分同一個機器上的不同應用程式,自己用1024以上)

埠號可分UDP和TCP

使用eclipse測試時,需要使用兩個eclipse來測試,如果是用dos那就需要開兩個視窗,先開服務端再開客戶端。

UDP傳遞信息快,但是不可靠,TCP傳遞信息慢,但是可靠
UDP byteArrayOutputStream

十一章 GUI編程(資料庫、HTML 、CSS、java script、JSP、servelet、J2EE、spring、structs、hibernet、EJB)
AWT(Abstract Window Toolkit)用於JAVA application 的GUI(Graphics User Interface圖形用戶界面)編程
Java圖形比較舊的開發包,Javax.swing這個是比較新的視窗開發包(重要圖片的AWT組)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在使用百度編輯器ueditor的時候,怎麼將圖片保存到另一個伺服器,或者上傳到ftp伺服器?這個問題,估計很多使用UE的人會遇到。而且我百度過,沒有找到這個問題的解決方案。那麼:本篇文章就很適合你了。因為本文解決了這個問題。
  • 今天受同事的委托,修複一臺伺服器的Apache漏洞,主要集中在以下幾點: 1.Apache httpd remote denial of service(中危) 修複建議:將Apache HTTP Sever升級到2.2.20或更高版本。 解決方法:升級HTTP。 現Apache官網提供的都是源碼包
  •   我們先假設業務場景,是需要有這麼一個擴展,提供一個叫ccvita_string的函數,他的主要作用是返回一段字元。(這個業務場景實在太假,大家就這麼看看吧)對應的PHP代碼可能是這樣: 第一步,生成代碼PHP為了擴展開發的方便,提供了一個類似代碼生成器的工具ext_skel,具體可以參見說明。首
  •  
  • 本文章詳細的介紹了在php學習中的最基礎的內容包括了基本數據類型、變數類型、操作符等入門都會要接觸到的東西。-php支持的基本數據類型:Integer:整數Float(Double,雙精度值):浮點數,表示所有實數String:字元串Boolean:布爾值,true/falseArray:保存具有相
  • 必知:軟體企業要求基礎軟體工程師具備六大基本素質,即良好的編碼能力、自覺的規範意識和團隊精神、認識和運用資料庫的能力、較強的英語閱讀和寫作能力、具有軟體工程的概念和求知欲和進取心。                   1.良好的編碼能力。軟體人員的一個重要職責是把用戶的需求功能用某種電腦語言予以實
  • python利用or在列表解析中調用多個函數.py
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...