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