爲選定的行改成註釋:
shift+方向鍵 選定數行內容
ctrl+/
想解綁哪一行的話,一樣使用ctrl+/
常量:final 數據類型
輸入賦值:
int 變量名;
Scanner in=new Scanner(System.in);
變量名=in.nextint();
數據類型強制轉換:
(數據類型名) 變量名
if else:
else語句總與最近的if匹配;
math.random() 這個函數能夠隨機產生一個【0,1)的數
能夠經過*100 *1000 的方法改變隨機取值範圍;
要轉換成整數,能夠*100後再強制轉換類型
對輸出結果進行位數控制:
system。out。printf(「%。2f」,i);
數組定義:
數據類型【】 數組名=new int【數組大小】
直接賦值與c相同。
防止數組溢出的方法:
先讓用戶輸入個數,在定義數組。
for。。。。。each循環:
for(int k:data) //在這個for循環中,每一次使用數組名爲data的一個值k進行運算。
boolean 布爾類型
\ 的類型:
\r 回車;
\" 雙引號
\' 單引號
\\ 斜槓
\t 製表符
string s爲大寫;
一個字符串類型的變量加上一個不是字符串類型的值,自動轉換爲字符串。
in.next() //讀入一個值
in.nextline() //讀入一行
字符串操做:
比較字符串:
.equals(比較值)
length() 字符串長度;
charAt(index) //獲取該字符串的某一個字符。
s.substring(n) //獲得從n開始的到結尾的所有內容。
s.substring(b,e) //獲得從b開始的到e位以前的內容。
s.indx0f(c) //從右邊開始找c所在的位置,-1表示不存在
s.index0f(c,n) // 從n開始找c的位置。
s.replace(c,n) //用c2的內容替換c1的內容
s.toLowerCase() // 替換爲小寫
s.toUpperCase() //替換爲大寫
數學函數操做;
math.abs() // 絕對值
math.pow() //冪次
math.random() //
math.round() //
傳值時,寬的值兼容窄的值。
char--》int---》double
傳值與穿址:
數組傳址;
string傳值;
super()
//
"super"。它和"this"相似,可是也有不一樣的地方。
1。表示調用父類的構造函數。也是一個特殊語法,不是變量,沒有什麼類型。
2。能夠在一個類的非static成員內部使用。好比super.method()。
可是,注意,這個super.method()只是長得跟some_var.method()同樣,一個語法糖而已。實質上,"super"根本不是一個變量。
爲何不是?由於若是是就壞了。java裏面有一個金科玉律:任何public非static函數的調用都是多態的。
因此,若是super是個變量,也指向當前對象,那麼,無論super的靜態類型是什麼super.method()必然調用的是子類的那個版本,而不會是咱們指望的,靜態地選擇父類的那個版本。
因此,你只要把super.xxx當作一個特殊的語法,好比理解爲「super::xxx」就行了。
既然super不是一個變量,那麼不能把它象一個普通變量那樣"==",或者傳遞給某個函數就看起來很正常了,是麼?況且,你其實也用不着它,有this你這些要求就均可以辦到了。
3。super的另一個做用是調用父類的protected函數。只有經過"super"這個魔咒,咱們才能操做父類的protected成員,別無它法。
在定義類時候,內部的this表示該類實例。
封裝類的屬性的寫入與讀取:
繪圖類:
繪製多邊形:
java架構:
jvm:java虛擬機
dos命令行:
rd 刪除文件夾,必須保持文件夾保持空的狀態。
del 能夠通配符刪除文件
幫助: help 內容
系統根目錄:即指系統盤的windows目錄
去某一個盤:
配置環境變量:
電腦--》屬性--》高級--》環境變量-》path 把要加路徑與其它路徑用「;」分割;
環境變量從新配置後,須要重啓命令行程序;
臨時配置java環境:
使用cmd命令行工具修改環境變量,只在本cmd下有效。
set path=........ 修改環境變量
set path=........%path% //在原有環境變量基礎上添加新的值。
新紀錄:2015.11.17
變量類型:
變量命名規範:
path:java所在的路徑
classpath:java類型的類文件的路徑
java運行過程:
javac java文件
java class文件(不用加class後綴)
數據類型:
布爾型:boolean
字符型:
大寫a是65
小寫97
jav使用Unicode字符集
Unicode中一箇中文字符與一個英文字符佔用大小相同
浮點型:
整數類型:
邏輯運算符:
if
else if
else if
else
switch:
循環:
ctrl+c 強制中止
對象:關於類的內存:
匿名對象:
構造函數:
不寫系統會爲你自動添加
構造函數在new時觸發。
較多傳入值時,可經過重載構造函數。
this:
本類的字段和方法使用this字段。
調用方法和字段的對象使用this代指。
靜態:
不可以使用this;
使用類名,對象名皆可;
靜態函數中,不可引用非靜態的字段或方法。
靜態屬性,字段,全部該類對象公用,如上圖。
靜態代碼塊:
裝載類時執行;無需調用。
繼承:
關鍵字:extends
以下圖:
注:即自動函數(若是父類沒有構造函數);
爲什幺調用父類構造函數?好處是什麼?
由於沒法繼承構造函數。
若是想調用父類中的其餘構造函數,在super()的括號中輸入參數便可;
函數複寫或重寫(override):
對父類的函數複寫:
函數的代碼塊改變;
子類覆蓋父類;
super的用法:
super.函數 //調用父類的函數,有重寫時使用。
主函數入口:
對象轉型:
向上轉型:
向上轉型:把子類傳給父類;
以下圖:
person類沒有address屬性,而student有該屬性;
向上引用只能使用子類和父類皆有的字段名和函數名,且使用的是子類的字段和函數內容(至關於複寫父類函數);
向下轉型:
如何應對「這種辦法不是多餘的麼」的說法?
舉例:超市裏的泡麪吃的時候不須要包裝,咱們想買的只是麪餅,但廠家還對咱們想要的東西進行了包裝。不瞭解就不該該想固然,多瞭解。
爲何能夠強制轉換?
由於p已經指向student,他是一個潛在的student對象,強制轉換隻不過是把他的假裝撕破而已。
編譯全部java文件: javac *.java
抽象類和抽象函數:
abstract void fun();
//抽象函數沒有函數體
抽象類亦被稱爲基類;
有抽象函數的類必須爲抽象類,沒有抽象函數依然能夠聲明抽象類;
抽象類不能生成對象;
抽象類天生是當爹的,只被繼承;
繼承抽象類的類須要複寫重寫抽象函數,避免沒法生成的問題;
子類的生成時能夠調用抽象類的構造函數;
關於抽象基類使用抽象函數的做用:
若是一個子類須要一個函數,而這個函數在父類中爲抽象函數。若是忘記複寫函數,在執行的時候,會報錯。
包和訪問權限:
包:
編譯時注意:
注: 「-d」指的是目錄,「.」指的是當前目錄下;
即指在但前目錄生成包文件夾,並編譯文件;
包名的命名規範:
注:相似於org.marsdroid的包名,會先生成一個org文件夾,在其下面生成marsdroid文件夾,class文件會在其下;有點多一級;
訪問權限:
若是想訪問方法和屬性,字段,也應該使用public權限。
private 一般狀況下只修飾方法和屬性,字段。
只能在聲明類中使用。
不聲明範圍默認default,權限爲包級別。
在不一樣包中聲明類時,要帶上包名。
技巧:
若是包名很長,聲明類時比較麻煩,能夠事先聲明包.類(命名空間),在下面聲明類時,不須要帶包名了。
ex:
另外:
若是須要使用一個包中的多個類還能夠進一步簡便:
ex:
包和繼承:
protected權限:
注:protected權限容許跨包訪問屬性,函數權限(限於子父類)。
權限排名:
public
protected
default
private
技巧:
批量編譯:
javac *.java
接口:
interface
繼承接口使用implement關鍵字
稱爲實現了接口
該類稱爲實現類
多重實現:
接口繼承接口:
能夠多繼承:
工廠方法模式:
在工廠模式中,在實現接口向上轉型中,要先聲明接口,不初始化(抽象類不能實例化);
詳見轉型部分
異常是在執行時出現的錯誤,不是語法錯誤。
例如計算1/0。
關於try......catch:
throw與throws:
I/O(input與output):
I/O核心類:
字節流:
核心方法:
read方法的返回值爲該次讀取了多少個字節;
若是read已經讀取完文件,則返回-1;
簡寫:
fis
fos
注:b指下標開始,5即指從下標5那個開始;len指長度;
注意:
代碼:
字符轉化爲字符串:
注:關於trim方法:
大文件的讀寫方法:
分次讀取寫入:
示意:
代碼以下:
關閉I/O流:
fis.close();
注:
要放在finally裏;防止try中出現問題,不能正常關閉;
字符流:
代碼:
代碼:
import java.io.*;
class TestIo{
public static void main(String arge []){
FileReader frd = null;
FileWriter fwt = null;
//io操做必須捕捉異常
try{
frd = new FileReader("d:/report_data2.txt");
fwt = new FileWriter("d:/123.txt");
char[] buffer = new char[100];
int temp = 0;
while(temp != -1){
temp = frd.read(buffer,0,buffer.length);
fwt.write(buffer,0,temp);
System.out.println("ffffff");
}
}
catch(IOException e){
e.printStackTrace();
}
finally{
try{
frd.close();
fwt.close();
}
catch(IOException e){
System.out.println(e);
}
}
}
}
節點流&處理流:
BufferedReader: //處理流
readLine(): //讀取一行數據
代碼:
注:
參見裝飾者模式,bufferedReader爲裝飾者,fileReader爲被裝飾者;
bufferedReader使fileReader能夠成行讀取數據,加強操做;
裝飾者模式:
注:Plumber,Carpenter都實現了Worker接口;
編譯結果:
生成內部類:
或者:
在a的基礎上生成內部類b,b可使用a
注:內部類可使用外部類的方法和屬性;但不是繼承;
匿名內部類:
注:new A是聲明一個實現A接口的實現類,只不過該類沒有名字;
類如:向上轉型:file = new IoFile();
進程和線程:
注:cpu時間輪盤切走,回到runnable狀態;
建立線程:
第一種方法:
啓動線程:
.start();
注:
注:這樣寫是執行類的run方法,而不是啓動線程;
區別:
執行run:
執行start:
實現線程的第二種方法:
線程與線程體分離:
代碼:
RunnableImpl類:
線程的一些簡單的線程控制方法:
注:sleep();Thread爲靜態類;
1000毫秒爲一秒;
當sleep時間完成時,從新回到準備狀態;
yield方法執行讓出cpu,回到準備狀態;
顯示優先級:getpriority int類型
設置優先級:setPriority()
最大優先級:
最小優先級:
等級:
注:
優先級越高,執行的機率越高;
setName()和getName():
currentThread():
獲取當前正在執行的線程
線程間同步:
同步鎖:
或者:
注:一個線程取得同步鎖權限後,在執行同步鎖範圍內的代碼時,其它線程若是取得cpu也許等待執行完畢;
synchronized關鍵字:
注:鎖住的並不是代碼塊,而是對象;
一旦一個線程獲取了同步鎖對象,那麼其它線程不能執行該對象的其它須要同步鎖的代碼;
ex:
注:該類被賦予給了兩個線程,線程1拿到this同步鎖,執行sleeep代碼;線程2得到cpu,但由於線程1拿到鎖,因此線程2不能執行該this對象的fun2下的同步鎖包含的代碼塊;
及
注:中括號寫在變量名前面亦可;
.length // 數組長度
int arr[ ][ ] =
二維數組:
類集框架主體結構:
注:集合內容不容許重複,列表能夠;
集合(Set):
列表(List):
映射 鍵值對(Map):
關於List(ArrayList):
獲取及移除:
注:從零開始
長度:
代碼示例:
Collection:
Set(集合):
實現類HashSet:
注:集合沒有順序;
迭代器(取得集合中的元素):
注:由於List也繼承了迭代器,因此也可使用迭代器遍歷List;
注: 須要導入接口;
代碼:
注:hasNest() //下一個元素是否爲空
實現類HashMap:
經常使用方法:
聲明及使用: