【原創】java基本語法(本人學習java的筆記)

基本語法部分



爲選定的行改成註釋:
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虛擬機
 





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()   //下一個元素是否爲空
 

Map(鍵值對)
實現類HashMap:
 
 
經常使用方法:
 
聲明及使用:
相關文章
相關標籤/搜索