今天開始學java(十二):又是String關鍵字還有陌生的static

String

java.lang.String類代表字符串類
API當中說:java程序中所有的字符串面值,都作爲此類的實例實現
其實就是說:程序當中所有的雙引號字符串,都是string類對象,就算沒有new,也照樣是。

String字符串的特點:
1、字符串的內容永不可變,是常亮,創建吼不能更改
2、正是因爲字符串不可改變,所以字符串可以共享使用
3、字符串效果上相當於char[]字符數組,但是底層原理是byte[]字節數組。

使用String 創建字符串的常見4種方式:
三種構造方法:
public String():創建一個空白字符串,不含有任何內容
public String(char[] array):根據字符數組的內容,來創建對應的字符串。
public String(byte[] array):根據字節數組的內容,來創建對應的字符串
一種直接創建:String str = “weqe”,右邊直接用雙引號

注意:直接寫上雙引號,就是字符串對象。

字符串常量池:程序當中直接寫上的雙引號字符串,就是字符串常量池
對於基本類型來說,==是進行數值的比較
對於引用類型來說,==是進行地址值的比較
==是進行對象的地址只比較,如果確實需要字符串的內容比較,可以使用兩個方法:
public boolean equals(Object obj):參數是可以是任何對象,只有參數是一個字符串並且內容相同的纔給true,否則返回flase
注意:
1、任何對象都能用object進行接收。
2、equals方法具有對稱性,也就是a.equals(b)和b.equals(a)是一樣的
3、如果比較對方一個常量一個變量,不推薦吧常量字符串寫在前面,例如:
推薦:“abc”.equals(str) 不推薦:str.equals("abc)
因爲如果變量爲null,在調用方法時,會造成空指針異常(NullPointerException)
使用equalsIgnoreCase可以忽略大小寫進行比較:

    public static void main(String[] args) {
       String str1 = "abc";
       String str2 = "asd";
       char[] charArray = {'a','b','c'};
       String str3 = new String(charArray);
       System.out.println(str1==str2);
       System.out.println(str1==str3);
       System.out.println(str3.equals(str3));
  • public int length():獲取字符串當中含有的字符個數,拿到字符串的長度
  • public String concat(String str)將當前字符串和參數字符串拼接成爲返回值新的字符串
  • public char charAt(int index)獲取指定索引位置的單個字符,所有的索引都從0開始
  • public int indexOf(String str)查到參數字符串在本字符串中首次出現的位置,如果沒有,返回-1
  • public String[] split(String regex)按照參數的規則,將字符串分割成幾個部分

static

如果一個成員變量使用了static關鍵字,那麼這個變量不再屬於自己,而是屬於所在的類,多個對象共享同一份數據
一旦使用static修飾成員方法,那麼這就成爲了靜態方法,靜態方法不屬於對象,而是屬於類
如果沒有static關鍵字,那麼必須首先創建對象,然後紅果對象才能使用它
如果有了static關鍵字,那麼不需要創建對象,直接可以通過類名稱而使用他

無論是成員變量還是成員方法,如果有了static,都推薦使用類名稱進行調用
靜態變量:類名稱.靜態成員方法
靜態方法:類名稱.靜態方法()

注意事項:
1、不能直接訪問非靜態,因爲在內存當中現有的靜態內容,後有的非靜態內容
2、靜態方法不能用this,因爲this代表當前對象,通過誰調用的方法,誰就是當前對象

  • 舉例說明,先創建一個類,裏面寫上不同的方法
public class Myclass {
    int num;//成員方法
    static int num1;//靜態方法

    //成員方法
    public void method(){
        System.out.println("成員方法");
    }
    //靜態方法
    public static void methodStatic(){
        System.out.println("這是一個靜態方法");
            }
}
  • 再創建一個類去調用它
public class Demo02Staticmythod {
    public static void main(String[] args) {
        Myclass obj = new Myclass();
        //先弄一個對象,才能使用沒有static關鍵字的內容;
        obj.method();
        //但對於靜態方法來說,可以通過對象名進行調用,也可以直接通過類名稱調用
        Myclass.methodStatic();//類名稱.靜態方法
        //對於本類當中的靜態方法,可以省略類名稱:Demo02Staticmythod.qqq()
       qqq();
        }
    public static void qqq(){
        System.out.println("11111");
    }
}
  • 靜態代碼塊的格式:
static {
//靜態代碼塊的內容
  }
}

特點:當第一次用到本類時,靜態代碼塊執行唯一的一次
靜態內容總是優先於非靜態,所以靜態代碼塊比構造方法先執行
靜態代碼塊的典型用途:
用來一次性的對靜態成員變量進行賦值
舉個例子:
首先在一個類中創建一個靜態代碼塊和一個構造方法

public class person {
    static{
        System.out.println("靜態代碼塊執行");
    }
    public person(){
        System.out.println("構造方法執行");
    }
}

再首次使用該類:

    public static void main(String[] args) {
        person one = new person();
        person two = new person();
    }

這時候得到的結果只有

靜態代碼塊執行
構造方法執行
構造方法執行
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章