Java基礎篇之基礎知識(一)

1

有興趣可關注微信公衆號: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) = trueStringUtils.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) = trueStringUtils.isBlank("") = trueStringUtils.isBlank(" ") = true

4.public static String trim(String str)

去掉字符串兩端的控制符(control characters, char <= 32) , 如果輸入爲 null 則返回null

StringUtils.trim(null) = nullStringUtils.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

無法改變的優點:

  1. 自然線程安全

  2. 可以共用不會改變值

  3. 哈希值:例如hashcode,hashset用string作爲索引,不可變可保證哈希碼不變,這意味着,無需每次都使用哈希碼。這樣更有效

  4. string pool:相同字符串共用一個引用,字符串變化會導致其他引用出現錯誤!

  5. 安全:字符串被廣泛用許多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、所有命名規則必須遵循以下規則:

  1. 名稱只能由字母、數字、下劃線、$符號組成不能以數字開頭

  2. 名稱不能使用JAVA中的關鍵字。

  3. 堅決不允許出現中文及拼音命名。

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

1

覺得不錯的關注微信公衆號:Java成長錄

微信公衆號持續更新------------部分會在csdn同步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章