有興趣可關注微信公衆號:Java成長錄
微信公衆號持續更新------------部分會在csdn同步
1.Java8種基本數據類型:
byte(8)char(16) short(16) int(32) float(32) double(64) long(64) boolean
2.包裝類型:
Java基本類型不具有對象特性,每一種Java基礎類型都對應一種Java包裝類型
並且在Java5之後出現了自動裝箱和拆箱;
裝箱:基礎類型轉換爲包裝類型
拆箱:包裝類型轉換爲基礎類型
int a = 1;
//手動裝箱
Integer a1 = new Integer(a);
//自動裝箱
Integer a2 = a;
//手動拆箱
int a3 = a1.intValue();
//自動拆箱
int a4 = a1;
3,String類
-
字符串工具類StringUntils
1. public static boolean isEmpty(String str)
public static boolean isEmpty(String str)
StringUtils.isEmpty(null) = true
StringUtils.isEmpty("") = true
StringUtils.isEmpty(" ") = false //注意在 StringUtils 中空格作非空處理
2.public static boolean isNotEmpty(String str)
判斷某字符串是否非空,等於 !isEmpty(String str)
3.public static boolean isBlank(String str)
判斷某字符串是否爲空或長度爲0或由空白符(whitespace) 構成
StringUtils.isBlank(null) = true
StringUtils.isBlank("") = true
StringUtils.isBlank(" ") = true
4.public static String trim(String str)
去掉字符串兩端的控制符(control characters, char <= 32) , 如果輸入爲 null 則返回null
StringUtils.trim(null) = null
StringUtils.trim("") = ""
StringUtils.trim(" ") = ""
StringUtils.trim(" \\b \\t \\n \\f \\r ") = ""
StringUtils.trim(" \\n\\tss \\b") = "ss"
StringUtils.trim(" d d dd ") = "d d dd"
StringUtils.trim("dd ") = "dd"
StringUtils.trim(" dd ") = "dd"
-
String類被final修飾,一旦創建String對象,那麼它的值就無法改變
concat()方法只是生成一個新對象,然後將值放到新對象
concat()源碼:
public String concat(String str) {
int otherLen = str.length();
if (otherLen == 0) {
return this;
}
int len = value.length;
char buf[] = Arrays.copyOf(value, len + otherLen);
str.getChars(buf, len);
return new String(buf, true);
}
concat()測試:
String s = "22";
System.out.println(s);//22
String b = s.concat("333");
System.out.println(s);//22
System.out.println(b);//2233
無法改變的優點:
-
自然線程安全
-
可以共用不會改變值
-
哈希值:例如hashcode,hashset用string作爲索引,不可變可保證哈希碼不變,這意味着,無需每次都使用哈希碼。這樣更有效
-
string pool:相同字符串共用一個引用,字符串變化會導致其他引用出現錯誤!
-
安全:字符串被廣泛用許多Java類的參數,例如網絡連接,打開文件,如果字符串不是不可變的,則連接或文件將會改變這可能會導致嚴重的安全問題。
-
String,StringBuffer,StringBuilder
String——可變,線程安全==字符串不打算更改使用
StringBuffer——可變,非線程安全==字符串更改單線程訪問
StringBuilder——可變,線程安全(synchronized進行同步)==字符串可以更改,並多線程訪問
https://stackoverflow.com/questions/2971315/string-stringbuffer-and-stringbuilder
-
怎麼理解 String s = new String("aaa")?
首先:在字符串常量池中還沒有 “aaa”對象時,這行代碼最終會創建兩個String對象
分解:s只是一個String變量 用來承接引用值;new String ; "aaa"
字符串字面量“aaa”,在編譯時候如果字符串常量池中不存在“aaa”則會在字符串常量池創建這個對象並把引用賦值給s,但是 new String() 執行時會堆中創建一個新對象。
字符串常量池:是一用來保存字符串對象的容器。
字符串字面量:就是兩個引號之間的字符序列例如:“aaa”。
4.Java存在的關鍵字:
關鍵字 | 含義 |
abstract | 表明類或者成員方法具有抽象屬性 |
assert | 斷言,用來進行程序調試 |
boolean | 基本數據類型之一,聲明布爾類型的關鍵字 |
break | 提前跳出一個塊 |
byte | 基本數據類型之一,字節類型 |
case | 用在switch語句之中,表示其中的一個分支 |
catch | 用在異常處理中,用來捕捉異常 |
char | 基本數據類型之一,字符類型 |
class | 聲明一個類 |
const | 保留關鍵字,沒有具體含義 |
continue | 回到一個塊的開始處 |
default | 默認,例如,用在switch語句中,表明一個默認的分支。Java8 中也作用於聲明接口函數的默認實現 |
do | 用在do-while循環結構中 |
double | 基本數據類型之一,雙精度浮點數類型 |
else | 用在條件語句中,表明當條件不成立時的分支 |
enum | 枚舉 |
extends | 表明一個類型是另一個類型的子類型。對於類,可以是另一個類或者抽象類;對於接口,可以是另一個接口 |
final | 用來說明最終屬性,表明一個類不能派生出子類,或者成員方法不能被覆蓋,或者成員域的值不能被改變,用來定義常量 |
finally | 用於處理異常情況,用來聲明一個基本肯定會被執行到的語句塊 |
float | 基本數據類型之一,單精度浮點數類型 |
for | 一種循環結構的引導詞 |
goto | 保留關鍵字,沒有具體含義 |
if | 條件語句的引導詞 |
implements | 表明一個類實現了給定的接口 |
import | 表明要訪問指定的類或包 |
instanceof | 用來測試一個對象是否是指定類型的實例對象 |
int | 基本數據類型之一,整數類型 |
interface | 接口 |
long | 基本數據類型之一,長整數類型 |
native | 用來聲明一個方法是由與計算機相關的語言(如C/C++/FORTRAN語言)實現的 |
new | 用來創建新實例對象 |
package | 包 |
private | 一種訪問控制方式:私用模式 |
protected | 一種訪問控制方式:保護模式 |
public | 一種訪問控制方式:共用模式 |
return | 從成員方法中返回數據 |
short | 基本數據類型之一,短整數類型 |
static | 表明具有靜態屬性 |
strictfp | 用來聲明FP_strict(單精度或雙精度浮點數)表達式遵循IEEE 754算術規範 |
super | 表明當前對象的父類型的引用或者父類型的構造方法 |
switch | 分支語句結構的引導詞 |
synchronized | 表明一段代碼需要同步執行 |
this | 指向當前實例對象的引用 |
throw | 拋出一個異常 |
throws | 聲明在當前定義的成員方法中所有需要拋出的異常 |
transient | 聲明不用序列化的成員域 |
try | 嘗試一個可能拋出異常的程序塊 |
void | 聲明當前成員方法沒有返回值 |
volatile | 表明兩個或者多個變量必須同步地發生變化 |
while | 用在循環結構中 |
5.Java命名規範:
1、 項目名全部小寫
2、 包名全部小寫
3、 類名首字母大寫,如果類名由多個單詞組成,每個單詞的首字母都要大寫。
如:public class MyFirstClass{}
4、 變量名、方法名首字母小寫,如果名稱由多個單詞組成,每個單詞的首字母都要大寫。
如:int index=0;
public void toString(){}
5、 常量名全部大寫
如:public static final String GAME_COLOR=”RED”;
6、所有命名規則必須遵循以下規則:
-
名稱只能由字母、數字、下劃線、$符號組成不能以數字開頭
-
名稱不能使用JAVA中的關鍵字。
-
堅決不允許出現中文及拼音命名。
6.運算符:
除了(+ - * /)還有(&與:一真就爲真),(| 或:一假就爲假 ),(!非)這也稱爲位運算符;
另外(&&和||分別也是代表或和與的邏輯關係只不過還另外帶有短路效果)
三元運算符:?—> 例如:int s = a>b?a:b; 意思是如果a>b成立,那麼s = a 否則 s = b;
7.形參與實參的簡單理解
add(1,2)//調用者其中1,2就爲實參
public int add (int a , int b){}//被調用者其中a,b就爲形參,作用是爲了接受實參的值進入方法運行
8.Java中參數傳遞
Java中參數傳遞是將值的地址傳給形參
public class Empolyee {
private String name;
private Integer salary;
private Integer age;
public String getName() {
return name;
}
public Integer getSalary() {
return salary;
}
public Integer getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setSalary(Integer salary) {
this.salary = salary;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return super.toString();
}
}
public class Test {
public static void main(String[] args) {
// write your code here
Test test = new Test();
Empolyee empolyee = new Empolyee();
empolyee.setName("aaa");
System.out.println("最初的地址"+empolyee.getAddress()+"名字:"+empolyee.getName());//@677327b6名字:aaa
test.change(empolyee);//
System.out.println("執行未生成新對象只改變屬性值方法後的地址:"+empolyee.getAddress()+"名字:"+empolyee.getName());//@677327b6名字:bbb
test.change2(empolyee);//@14ae5a5名字:ccc
System.out.println("執行生成新對象並改變屬性值方法後的地址:"+empolyee.getAddress()+"名字:"+empolyee.getName());//@677327b6名字:bbb
Empolyee empolyee1 = test.change2(empolyee);//@7f31245a名字:ccc
System.out.println("執行生成新對象並改變屬性值方法後的地址:"+empolyee1.getAddress()+"名字:"+empolyee1.getName());//@7f31245a名字:ccc
}
private void change(Empolyee empolyee){
empolyee.setName("bbb");
}
private Empolyee change2(Empolyee empolyee){
empolyee = new Empolyee();
empolyee.setName("ccc");
System.out.println("執行生成新對象並改屬性值方法中的地址:"+empolyee.getAddress()+"名字:"+empolyee.getName());
return empoly