初遇java首次接觸java是在大二上學(xué)期的時候,在學(xué)校老師講的很快,再加上本來也沒好好聽講,所以基本也沒學(xué)到什么,為了應(yīng)付考試和項目自己看過一些書,知道一些很少很少的用法。 一、 開始學(xué)習(xí)什么是java? java是一種編程語言 java的優(yōu)勢是什么? 我覺得java的應(yīng)用范圍很廣,基本上方方面面都能涉及到,不過目前我學(xué)習(xí)的是面向網(wǎng)站的javaEE。 JDK版本的選擇和安裝 越高的版本的JDK功能是越多的,但是對于生產(chǎn)開發(fā),很多應(yīng)用還用的是舊版的JDK,類似于1.6,1.7,所以在學(xué)習(xí)時,使用的是JDK1.8.。 環(huán)境變量的配置 百度經(jīng)驗描述還是比較詳細的 IDE的選擇 我選擇的是myeclipse2019.4.0,老實說我覺得這個版本的界面比我之前上學(xué)用的2014好看太多了,所以下下來的時候還是很開心的(不過還是需要吐槽一下,myeclipse啟動的太慢了…隔壁朋友的eclipse每次秒啟動,我要等好久或者重來好多次) Java的運行原理 Java源文件(.java)—>(經(jīng)過編譯)—>Java字節(jié)碼文件(.class)—>交給JVM虛擬機執(zhí)行,然后交給操作系統(tǒng)執(zhí)行;正因如此java可以在多種平臺上使用。
二、 變量與運算符變量和運算符的內(nèi)容很基礎(chǔ),但要牢記 1.命名規(guī)則類名:首字母大寫,如:Student,Test 變量名,方法名:首字母小寫,后續(xù)字母大寫(駝峰命名法),如:stuName,age;getName,getId 包名全部小寫 常量名全部大寫 不能用關(guān)鍵字和保留字命名

 2.變量常量是一直不變的量;而變量就是在程序運行過程中可變的量。 變量的聲明與賦值方法:數(shù)據(jù)類型 變量名 = 值 | 表達式 |方法;
兩個概念: a.成員變量:成員變量是在類的下一級定義的變量,可以不用賦初值。 b.局部變量:在類的方法中定義的變量,使用前必須賦初值,作用于只能在本方法中。 3.數(shù)據(jù)類型8種基本數(shù)據(jù)類型:byte字節(jié)型,short短整型,int整型,long長整型,float double char boolean 引用類型:類,接口,字符換,數(shù)組等… 數(shù)據(jù)類型轉(zhuǎn)換 a.隱式轉(zhuǎn)換:由系統(tǒng)自動轉(zhuǎn)換,類型要相互兼容,小轉(zhuǎn)大; b.強制轉(zhuǎn)化:當(dāng)類型不兼容或大轉(zhuǎn)小時,需要由我們自己強制轉(zhuǎn)換 double d =12.3;
int t=(int) d;
注意:強制類型轉(zhuǎn)換會有精度損失 4.關(guān)系運算符區(qū)分=和==的區(qū)別 其他運算符: !,& ,|, ,/(取模),*,%(取余)等 三元表達式 boolean n = (4 < 3) ? true : false;
?前面的為真,則執(zhí)行:左邊;為假,執(zhí)行:右邊。 三、流程控制語句這里主要學(xué)習(xí)了一些流程控制語句 if語句 if(條件){
}
switch switch(n){
case 1:
break;
default:
}
這里要說明的是,case具有貫穿性,所以在使用時,可以根據(jù)需求,來判斷是否需要些break 能打破switch結(jié)構(gòu)的,只有break和}。 for for(迭代變量;循環(huán)條件;控制循環(huán)次數(shù)的操作){
}
while while(){
}
while是先判斷條件是否成立,再執(zhí)行的 do…while do{
}while()
do…while必定會執(zhí)行一次,先執(zhí)行,后判斷(先斬后奏) 每個流程控制語句可以相互嵌套,但是不要嵌套過多,以免代碼雜亂,邏輯難以理清。 while和do…while常用于次數(shù)不明確的循環(huán),for常用語次數(shù)明確的循環(huán) 死循環(huán)并不一定是錯的,當(dāng)要完成某些需求時,可以用到死循環(huán) 四、數(shù)組這里學(xué)習(xí)了數(shù)組的使用 數(shù)組是引用類型,使用數(shù)組前必須實例化 數(shù)組的聲明a. 1、聲明數(shù)組 2、實例化數(shù)組 int[] nums;
nums= new int [5];
b. 聲明同時實例化 int [] numbers =new int[5];
int [] bym2s ={1,2,3,4};
int [] vya3s=new int[ ] {1,2,3,4};
內(nèi)存:棧 堆 池 程序和變量都在棧中 基本數(shù)據(jù)類型都放在棧中 數(shù)組使用時,先在棧中分配一塊空間,用來存儲數(shù)組元素在堆中存儲的地址。 數(shù)組的索引都是從0開始的 比如我創(chuàng)建了一個length為5的數(shù)組,但是a[5]是取不到的,如果這樣寫,會提示數(shù)組越界。 foreachfor(數(shù)組元素類型 變量名 : 數(shù)組名){
語句;
}
多維數(shù)組多維數(shù)組我的理解就是在一維數(shù)組中,將他的元素也變?yōu)閿?shù)組,就成了多維數(shù)組 多維數(shù)組的創(chuàng)建 數(shù)據(jù)類型 數(shù)組名 =new 數(shù)據(jù)元素類型[行數(shù)] [列數(shù)];
//列數(shù)可以不寫
ex:
int[][] a=new int[3][];
int[][] a=new int[3][4];
數(shù)組的操作a.取數(shù) a[索引] 就可以取出其中的數(shù) b.取數(shù)組長 a.length c.數(shù)組的遍歷 int [] numbers =new int[5];
for(i=0;i<numbers.length;i ){
syso(“number[i]”);
}
//foreach
for(int i : number){
syso(“number[i]”);
}
冒泡排序 for(i = 1; i < n; i )
{
for(j = 0; j < n-i; j )
{
if(a[ j ] > a[ j 1 ])
{
t = a[ j ];
a[ j ] = a[ j 1 ];
a[ j 1 ] = t;
}
}
}
擴展: 直接插入排序
 希爾排序
 簡單選擇排序
 方法方法是可以說是程序里非常重要的一環(huán)了,所以在學(xué)習(xí)中要重點理解,多練習(xí)。 什么是方法? 方法是完成某個功能的一組語句,通常將常用的功能寫成一個方法。 方法的聲明或者定義——方法五要素 訪問修飾符,返回值類型,方法名 , 參數(shù)列表,方法體 [訪問控制符] [修飾符] 返回值類型 方法名(參數(shù)類型 形式參數(shù),參數(shù)類型 形式參數(shù),…){
方法體
}
public void getType(){
}
void 可以寫也可以不寫 return,寫return可以用來結(jié)束方法,類似于break 非void必須寫返回值,方法的每條分支必須要有return 參數(shù) 可以一個可以多個,多個的時候用逗號隔開 參數(shù)傳遞時要注意的問題
 值類型參數(shù)傳遞,傳遞的是值的副本(類似于復(fù)制一份傳遞過去)。 引用類型參數(shù)傳遞, 傳遞的是對象的地址的副本 所以方法內(nèi)或方法外操作的都是同一個堆中內(nèi)容,所以值會改變。 方法的調(diào)用 a.實例化類對象 類 對象名 =new 類();
b.調(diào)用方法 對象名.方法名(有參帶參,無參不寫);
方法的重載 即相同的事,不同的做法 a.在同一個類中 b.方法名相同 c.參數(shù)列表不同(類型,個數(shù)。即有一個獨一無二的參數(shù)列表) d.和訪問修飾符、返回值類型無關(guān)(可以相同,也可以不同) 面向?qū)ο?/h2>面向?qū)ο笫且粋€抽象的概念,java就是屬于面向?qū)ο笳Z言 **抽象:**從事物中舍棄個別的非本質(zhì)特征,抽取共同的本質(zhì)特征只考慮與問題域相關(guān)的信息,而忽略與問題域不相關(guān)的部分 **對象:**萬物皆對象,對象有自己的屬性和行為(方法) **類:**對對象的抽象 生活中先有對象再有類,而程序中先有類,類的作用是創(chuàng)建對象,類是生成對象的模板。 如何寫一個類?寫類三步走: 1.發(fā)現(xiàn)類 2.發(fā)現(xiàn)類的屬性 3.發(fā)現(xiàn)類的方法 //1.發(fā)現(xiàn)類
public class 類名{
//2.發(fā)現(xiàn)屬性
訪問修飾符 數(shù)據(jù)類型 屬性名 ;
//3.發(fā)現(xiàn)方法
訪問修飾符 返回值類型 方法名(參數(shù)列表){方法體;}
}
對象a.對象實例化 類名 對象名 = new 類名();
b.給對象的屬性賦值 對象名.屬性=值
c.調(diào)用對象方法 對象名.方法名(參數(shù));
d.對象在內(nèi)存中的存儲
 棧內(nèi)保存了對象的首地址,即引用; 在堆內(nèi)存中保存了對象的屬性。 方法不能被保存 方法是在cpu中運行計算,然后將所得到的的結(jié)果存入內(nèi)存。 棧:先進后出、后進先出。 棧中保存基本數(shù)據(jù)類型的局部變量和對象調(diào)用引用值。 堆:堆可以保存那些對空間要求較大的變量。 new空間分配存儲符 構(gòu)造函數(shù)作用: 創(chuàng)建對象,初始化對象 特點: a.方法名必須與類同名 b.無返回值(只進不出;與普通方法區(qū)分) c.普通方法可以與構(gòu)造函數(shù)同名,但必須要有返回值 d.構(gòu)造函數(shù)不能被直接調(diào)用,在new時會自動調(diào)用 e.如果不創(chuàng)建構(gòu)造函數(shù),編譯器會提供一個默認不帶參數(shù)的構(gòu)造函數(shù)。寫了構(gòu)造函數(shù)就不提供默認的了 f.構(gòu)造函數(shù)可以帶參數(shù)。 g.一個類可以定義多個構(gòu)造函數(shù)。 h.構(gòu)造函數(shù)可以相互調(diào)用,必須在第一行。this(屬性名) java具有垃圾回收機制,不必專門去寫方法處理包常用的包 java.lang java.io 同一包中的類可以直接訪問并使用 訪問不同包中的類 import import可以多次使用 *通配符 導(dǎo)入全部 封裝面向?qū)ο笕筇卣髦弧?strong>封裝 封裝無處不在 封裝就是將不想或不該告訴他人的東西隱藏起來,將可以告訴他人的內(nèi)容公開( 隱藏對象的屬性和方法的細節(jié),只公開對外接口 ) 封裝的好處: a.隱藏實現(xiàn)的細節(jié) b.方便修改的實現(xiàn) c.只能通過規(guī)定方法訪問 權(quán)限 訪問修飾符: private 私有的 ,不對外公開 最小權(quán)限 default 默認的 不使用訪問修飾符時 public 公共的 所以的類都能訪問 protected 受保護的
靜態(tài) staticstatic在初次加載時被實例化,至始至終只有一個對象 a.屬性 類的屬性 適用范圍:靜態(tài)方法和非靜態(tài)方法都可以調(diào)用 訪問修飾符 static 數(shù)據(jù)類型 變量名=值; public static String context=“hello”
b.方法 類的方法 適用范圍:靜態(tài)方法和非靜態(tài)方法都可以調(diào)用 在靜態(tài)方法中,只能調(diào)用靜態(tài)屬性和靜態(tài)方法 訪問修飾符 static 返回值類型 方法名(參數(shù)列表){ 方法體 } public static void fun(){
syso
}
c.代碼塊 初始化static修飾的變量 static{ }
單例模式讓類只有一個實例對象 a.私有化構(gòu)造函數(shù) b.提供私有類的靜態(tài)屬性 c.提供靜態(tài)方法返回實例對象 i.判斷是否實例化過對象 取的單例對象: 類名.返回實例的靜態(tài)方法 對象數(shù)組實例化對象數(shù)組 Cat[] cats = new Cat[10];
向數(shù)組內(nèi)填充對象 數(shù)組名[ 索引 ]=對象名;//此對象名應(yīng)提前實例化
數(shù)組名[ 索引]=new 數(shù)據(jù)類型();
cats[0]=cat;
cats[1]=tom;
數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[長度]
操作數(shù)組內(nèi)的對象 數(shù)組名[ 索引].屬性;
數(shù)組名[ 索引].方法名
繼承關(guān)系傳遞 ,體現(xiàn)類之間的層次結(jié)構(gòu) object 所有類的父類 特點: a.單繼承,一個類只能有一個父類 b.一個類可以被多個類繼承 c.可以有多層繼承,A被B繼承,B被C繼承 d.子類繼承父類所有的成員變量和成員方法。(除private外) e.子類可以繼承父類的方法,并且可以重寫父親的方法 f.父類構(gòu)造函數(shù)不能被繼承??梢允褂胹uper調(diào)用父親的構(gòu)造函數(shù) g.如果子類的構(gòu)造方法中沒有顯示地調(diào)用父類構(gòu)造方法,也有用this關(guān)鍵字,則在產(chǎn)生子類的實例對象時,系統(tǒng)默認調(diào)用父類無參數(shù)的構(gòu)造方法 super()父類對象 this()本類(當(dāng)前)對像 重寫: 重寫父類方法 @Override 1.在子類中 2.方法名,參數(shù)列表,返回值類型相同 3.訪問修飾符不能比父類更嚴格,即子類方法的 訪問修飾符要大于等于父類的訪問修飾符 抽象類不具體的類 主要用于做父類 如動物類 蔬菜類 水果類 abstract定義抽象類 public abstract class 類名{ }
抽象類不能被實例化 允許(但不要求)抽象類包含抽象成員 含有抽象方法的類稱為抽象類 抽象方法必須在子類中被實現(xiàn),子類是抽象類除外 抽象方法不具體的方法 用于被子類實現(xiàn),子類完成方法體 訪問修飾符 abstract 返回值類型 方法名(參數(shù)列表);
finalfinal 修飾 變量 或常量 訪問修飾符 final 數(shù)據(jù)類型 變量名=值;
2.方法 不能被重寫的方法 訪問修飾符 final 返回值類型 方法名(參數(shù)列表){ };
類 不能被繼承的類 訪問修飾符 final class 類名{ };
接口接口 interface 完全抽象 接口內(nèi):靜態(tài)常量 和 抽象方法 常量默認有 public static final 方法默認有 public abstract 接口是一種規(guī)范、約定 遵循抽象類所有原則 一個類可以實現(xiàn)多個接口 接口沒有構(gòu)造函數(shù) 實際對象要看new的是什么 使用父類作為引用 實例化子類對象 父類引用但只引用到子類繼承父類的成員 instanceof 判讀對象是否是什么類型 對象名 instanceof 類型 返回 ture 或 false 使用接口引用實例對象 能引用到的是該類實現(xiàn)接口的方法 接口: 設(shè)計 規(guī)范 約定 擴展 能力 接口可以作為參數(shù),也可以作為屬性,還可以被類直接調(diào)用 簡單工廠模式: 1.構(gòu)建父類對象 2.子類繼承父類 3.創(chuàng)建工廠類,提供實例化對象的方法. 
異常處理
try{ }catch(異常類型 e){ } 2. try{ }catch(異常類型 e){ }catch(異常類型 e){ }catch(異常類型 e){ }catch(異常類型 e){ } catch的順序要先子類后父類
try{ }finally{ } 4. try{ }catch{ }finally{ } 5. try{ }catch{ }catch{ } … finally{ } finally無論是否有異常,無論是否處理,finally都要執(zhí)行 (system。exit(0)時不執(zhí)行) throw 拋出異常 throws在方法中聲明異常 工具類object是所有類的父類 equals主要比較的是內(nèi)容 ==比的是對象的地址 值類型與引用類型的轉(zhuǎn)換 裝箱和拆箱 消耗性能 int t=5; //裝箱是將值類型轉(zhuǎn)換成引用類型 引用類型 =值類型 integer tt=t; //拆箱是將引用類型轉(zhuǎn)換成值類型 值類型=(值類型)引用類型 int i=(int) tt 集合長度固定 隊形連續(xù) 集合 長度可變 隊形多樣 set接口 無序 - 是指元素存入順序和集合內(nèi)存儲的順序不同 無重復(fù) - 兩個對象e1和e2,如果e1.equals(e2)返回true,則認為e1和e2重復(fù),在set中只保留一個 arraylist用于常查少改 linkedlist用于常改少查 
文件與流流 動 數(shù)據(jù)的流動 數(shù)據(jù)傳輸?shù)倪^程,有開始有結(jié)束 字節(jié) byte 1byte=8位 計算機的存儲單位 字符 文字表達的內(nèi)容 除文本文件外,其他文件均勻標準單位(字節(jié))去輸入輸出讀取 序列化 保存對象的瞬時狀態(tài) 反序列化 就是把對象取出來  1個進程 可以包含一個或多個線程,其中必須要有一個主線程。
繼承式適用于多個對象,每個都是獨立線程 接口式適用于一個對象,多個線程同時操作 這里只是把平時上課的一些筆記轉(zhuǎn)移了上來,并不夠細致,還需要更多的總結(jié)與學(xué)習(xí) 來源:https://www./content-1-435201.html
|