Java的基礎程序設計結構(Java學習-1)
- 2019 年 11 月 5 日
- 筆記
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/weixin_43126117/article/details/90710314
一年前學習Java的總結
注釋
注釋就是方便自己或者別人閱讀代碼,絕大多數的程序語言都有注釋這個功能,大部分的注釋命令都是相同的或者想通的,
下面給出Java的注釋結構
三類注釋 //單行注釋 /*多行注釋*/ /**文本注釋*/
注意:/*多行或者文本注釋*/不能嵌套。後面的*/或匹配前面的。
文本注釋可以用來自動生成程序文檔。
數據類型
Java是一種強類型語言,也就是說每一個變量聲明都需要一種數據類型,作為一款可移植性,跨平台可用的語言,當然不像C、C++這種換平台,64位OS->32位OS,數據類型空間就發生改變,JVM的好處唄。
- 數據類型劃分兩種
基本數據類型:
數值型 整型:byte short int long 默認值:0; 浮點型:float double 默認值0.0 字符型:chat 』u0000' 『 布爾型:Boolean false
引用數據類型: 數組 類 接口 默認值:根據存放內容,初始化不同值,對象(null),基本數據類型(默認值)。
- 整型
聲明一個數據類型 一個數據溢出(最小值?)的問題 int maxValue = Integer.MAX_VALUE +1 一個變量命名要求 首字母小寫 下個單詞大寫) 操作前預估數據大小 怎麼解決溢出問題:換個數據類 long解決interest的數據溢出問題,(有一個大數值的概念) 在使用方法處理時,要注意 所有的程序執行順序都是 由等號的右邊到左邊,計算還會溢出, 溢出的問題
一 將int 的數據變量賦值給long
long result = maxValue; long result = maxValue +1; //出錯 這裡涉及到一個自動轉換的問題, 等號右邊到左邊;
二 直接將某一int型變量變為long型
long result = (long)maxValue +1;//強制轉換
數據類型也可以以小變大!!(強制完成- 肯定會丟內容,少用 少用) 任何整數其默認數據類型,所以 long i= 2147483648; 編譯是錯誤的 int型儲存不了那麼的數字範圍 所以在int型 強制轉換前就出錯了。

數值類型之間的合法轉化(實線合法)
類比。 long i = 2147483648L (L/l)
重要說明
關於數據類型的默認值, 這個默認值在方法(主方法)中聲明無效 int num; 直接輸出 System.out.print(num) 出錯
class Untitled { public static void main(String[] args) { int i ; System.out.println(i); } } Untitled.java:4: error: variable i might not have been initialized System.out.println(i); ^ 1 error
byte數據保存範圍問題 十進制為( -128–127. ),1位元組
byte i = 10 ;// 輸出也是 10 ,為什麼沒錯, 10 int型 可以強制轉換成 byte 可以保存下。 byte i = 128; //從 int轉換到 byte 可能有損失。 byte i = (byte)128 //溢出 ! byte i = (int j = 10); //出錯!!運行:等號右邊到左邊,小的自動轉大的 byte i = (byte) (int j = 10);
- 浮點型
描述小數的數據,默認是double。 如果要用float,要強制轉換,在數字後加一個F/f。、
float f = 1.1 ; //錯誤,從double轉換float可能有損失。 float f = 1.1F; float f = (float)1.1;
(Java 的一個but , 輸出的數有一推零。) 精度問題(int型 除 int型 等 int型 , 10/4 =2 ,錯誤。 )
- 字符型
會使用字符型的概念,但是很少使用char, 單引號 chat c ='A'; 麻煩的地方在 int型的轉換等比較難, Unicode編碼,十六進制編碼。包含ASCII。 常用範圍 大寫字母A-Z;65—90 小寫字母a-z;97 -122(相差32個) chat c ='A'; int num = c + 32; //等於int 型 ,大的範圍類型加小範圍類型,等於大的數據類型 字符數字(『0』-『9』),48-57. 另外一個神奇的用法, 變量命 類名 直接用中文都可以。命名標識符
char只可以描述單一字符, 多個字符用String,String不是基本數據類型是一種引用數據類型 『』+『』 兩個字符串相加, int+double+String 結果(String)為字符串相加連接,不能用減。解決方法:(int+double)+String 還存在一種轉義字符! 可以對字符串進行一些操作。
這裡也涉及到一個Unicode和char的問題,要從編碼機制開始說,就不談了。
- 布爾型
一般指邏輯結果,其他語言沒有布爾型,其他語言用0 1表示 .
變量
剛說的,Java是一種強類型語言,也就是說每一個變量聲明都需要一種數據類型
命名規範,大小寫敏感,不能用Java關鍵字。
public calss Constants{ int i ; int i = 1;//變量聲明 public static void main(String [] arg){ int i ;//局部變量聲明,上面說了,這個無效 int i = 1;//局部變量聲明 final double i = 2.3;//加了final關鍵字就是常量了,不能改變值 } public static final double i = 2.3;//類常量,別的類可直接訪問。 }
運算符
程序的計算 別寫特別的複雜運算。可使用Math類下的方法,關於這些算法,其實都是用C寫的,有興趣可以看算法網站
- 基本四則運算
自增運算:++變量(先加再運算)。 變量++(先運算再相加)。 自減運算。
- 三目運算
賦值運算,根據條件運算。 int result = x > y ? x : y; 不熟悉,也可以寫if判斷。代碼行數太多了。
- 關係運算符
>,<,<=,==,!=.返回結果都是布爾型。字符和數字判斷 『a』 == 97 ;
- 邏輯運算
與, 或 ,非(!) 。 返回布爾型 & , && (單& 全部都都返回了,不管後面是怎麼樣, 雙&&,(短路與),判斷一個就行了) | , | | (單 | 全部都返回了, 雙||判斷前面就ok了。)
- 位運算(了解)
按照二進制 十六進制 等進行 數據移位處理。 位運算實現的關鍵問題再與要進行十進制與二進制的轉換,轉換原則是 數據除 2 取余,一直除到 0 為止,說有的餘數按照倒序排列。
- 運算符優先級,運算可以直接加括號。()

運算符優先級
- 常見運算符使用例子
int x ; x += 4; x = x + 4; x +=3.5; x = (int) x + 3.5; x++; x = x + 1;//先賦值再運算 ++x; x = x + 1;//先運算再賦值 if(x != 0 && x++>y ) //前面要是false了,後面是不會運行的。 enum Size{s,m,l,x};//枚舉 Size s = Size.s;
字符串
Java是沒有字符串類型的,它只是Unicode字符序列,其實就是一個字符數組(char [ ]),String是一個Java一個預定義類,也稱為不可變字符串。
String e = ""; //一個空字符串 if(e != null&& e.length != 0);//判斷字符串,因為String還有一個特殊的值null;
- 子串
String e = "hello"; String sube = e.substring(0,2);//hel //源碼 public String substring(int beginIndex) { if (beginIndex < 0) { throw new StringIndexOutOfBoundsException(beginIndex); } int subLen = value.length - beginIndex; if (subLen < 0) { throw new StringIndexOutOfBoundsException(subLen); } return (beginIndex == 0) ? this : new String(value, beginIndex, subLen); }
- 拼接
java語言允許使用加號連接兩個字符串,需要注意的是這是生成一個新對象,jvm的垃圾回收會解決舊對象的回收問題。
- 檢查字符串是否相等
==和.equal
在引用數據類型中==比較的是:在內存中的地址是否相等。
在基本數據類型中==比較的是:值是否相等。
.equal的問題,由於String對象是利用字符常量形成的數組,並且內部有一個字符串共享的存儲池的概念;
String a = "hello";//在字符串共享池中存入。 String b = "hello";//先在共享池中查找到相同對象,引用相同內存地址,共享池就是一個對象數組 a==b;//是相等的,內存地址相等;
so,一般比較字符串大小使用.equal。
if(e.equal(hello)); if(e.compareTo("hello"));//類似上面的 //.equal源碼java.lang.String類 /** The value is used for character storage. */ private final char value[]; public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
- 字符串原理
字符串由char值序列組成的,char類型是一個採用UTF-16編碼表示unicode碼點的代碼單元。(有一些字符需要兩個代碼單元)
String e = "hello"; String num = e.length();//獲取代碼單元(在內存中的大小) 5 String num = e.codePointCount(0,e.length());//獲取碼點(實際看到的數量) 5 /** The value is used for character storage. */ private final char value[];
- 一些字符串注意點
我們盡量減少使用char類型,因為這個太底層了,太多技術細節了,
String類是一個非線程安全的,並且一部小心就生成了很多String對象,浪費空間和時間,雖然jvm有自動垃圾回收,但是也是系統的一個負擔。
so,使用StringBuilder類,或者StringBuffer類(線程安全)。
控制流程
- 順序結構
分支結構,邏輯判斷,滿足某些條件才執行
if 分支結構 if(布爾表達式){ 滿足條件時執行代碼; }else if( 布爾表達式){ 條件滿足時的執行代碼; }。。。【else】{ 所有條件都不滿足時執行的代碼; } switch分支結構 switch(數字|枚舉|字符|字符串){ case 內容1 :{ 瞞住的條件執行 【break】~停止的 } default{ 都不滿足執行 } }
- 循環結構
while循環 while(布爾表達式)( 循環語句; 修改循環結束田間判斷; } 另 do -- while(始終執行一次) 基本不使用 for循環 FOR(循環初始條件;循環結束判斷;修改循環條件{ 循環代碼 }
對於不知道循環次數的用while, 知道次數的使用for循環。 循環控制 continue: 跳過當前的循環,循環體後面的不執行。回到循環語句開頭 brake:結束整個循環體 循環嵌套,用的不多。
數組
數組是一種引用數據類型,用來存儲同一類值的集合,通過一個整型下標可以訪問數組中的每一個值。
- 數組初始化
int a[]; int [] a ;//聲明整型數組a,只是聲明了變量。 int [] a = new int[100]//創建數組,下標為0-99。 int [] b = {1,2,3};//簡寫 b = new int[]{3,5,4};//匿名數組
- 數組拷貝
數組拷貝,只是兩個變量引用同一個數組,也就是同一個堆地址。同一塊堆被不同塊棧指向,堆真實數據 , 棧保存堆的地址。
int [] a = {1,2,3}; int [] b = Arrays.copyOf(a,a.length); //源碼 public static int[] copyOf(int[] original, int newLength) { int[] copy = new int[newLength]; System.arraycopy(original, 0, copy, 0, Math.min(original.length, newLength)); return copy; }
- 數組排序與查找
Java語言是完全面向對象的,相比於「結構化」的語言,注重方向是一樣的,Java,更加註重數據結構,而不是算法。so,這裡就談算法的問題啦,直接使用api。
int [] a = {1,3,2,5}; int [] b = Arrays.sort(a);//優化了的快速排序算法 int c = Arrays.binarySearch(a ,0 ,3 ,2);//二分搜索查找算法
- 多維數組
Java實際上是沒有「多維數組」的概念的,但是可以用「數組的數組」代替。
int [][] a ;//聲明 int [][] a = new [1][2];//初始化化 int [][] a = { {1,2,3}, {2,3,4} };//簡寫 //不規則數組 int [][] b = { {1,2,3}, {1,2,3,4,5} }; //可以用foreach輸出數組 foreach(int [] row : b){ foreach(int value : row){ System.out.println(value); } System.out.println("---"); }
總結
這些是很基礎的東西,絕大多是編程語言都支持,並且相差不會很大,上面說的是遠遠不夠的,這只是自己一年前的總結,這些基礎其實敲多了,就自然的熟悉了。