JavaSE-常用類

JavaSE-常用類

Obeject

Java Object類是所有類的父類,也就是說Java的所有類都繼承了Object,子類可以使用Object的所有方法。

Object類位於java.lang包中,編譯時會自動導入,我們創建一個類時,如果沒有明確一個父類,那麼它就會自動繼承Object,成爲Object的子類。

clone()

obj1.clone();

Object clone() 方法用於創建並返回一個對象的拷貝。返回值爲一個對象的拷貝

clone 方法是淺拷貝,對象內屬性引用的對象只會拷貝引用地址,而不會將引用的對象重新分配內存,相對應的深拷貝則會連引用的對象也重新創建。

由於Object本身沒有實現 Cloneable 接口,所以不重寫 clone 方法並且進行調用的話會發生 CloneNotSupportedException 異常。

另外不能在一個子類中訪問另一個子類的對象的protected方法,儘管這兩個子類繼承自同一個父類;此外,子類不能訪問父類的對象的protected方法,要通過自己類型的對象才能訪問

只能通過自身實例(自身的引用)訪問,不能通過父類實例(父類的引用)、其他子類實例(除非是該子類有重寫clone()方法)

子類使用繼承自父類的clone()方法時,返回的對象仍然是父類類型的對象

public class CloneObject implements Cloneable{

    String name;
    int likes;

    public static void main(String[] args) {

        CloneObject obj1 = new CloneObject();

        obj1.name = "zh1z3ven";
        obj1.likes = 123;

        System.out.println(obj1.name);
        System.out.println(obj1.likes);

        try {

            CloneObject obj2 = (CloneObject) obj1.clone();
            System.out.println(obj2.name);
            System.out.println(obj2.likes);

        }catch (Exception e){
            System.out.println(e);
        }
    }
}
//
zh1z3ven
123
zh1z3ven
123

equals()

object.equals(Object obj);

Object equals() 方法用於比較兩個對象是否相等。

equals() 方法比較兩個對象,是判斷兩個對象引用指向的是同一個對象,即比較 2 個對象的內存地址是否相等

返回值爲boolean類型,true or false

public class EqualsObject {

    public static void main(String[] args) {
        Object obj1 = new Object();
        Object obj2 = new Object();

        System.out.println(obj1.equals(obj2));

        //obj1被賦值給了obj3,此時內存地址,引用都相等,所以爲true
        Object obj3 = obj1;
        System.out.println(obj3.equals(obj1));
    }
}

getClass()

獲取對象的運行時對象的類。

class<?>是一個泛型,返回值爲該運行時對象的類。

import java.util.ArrayList;

public class GetclassObject {
    public static void main(String[] args) {

        Object obj1 = new Object();
        String obj2 = new String();
        ArrayList obj3 = new ArrayList();

        System.out.println(obj1.getClass());
        System.out.println(obj2.getClass());
        System.out.println(obj3.getClass());
    }
}

//結果
class java.lang.Object
class java.lang.String
class java.util.ArrayList

hashCode()

Object hashCode() 方法用於獲取對象的 hash 值。

object.hashCode()

返回對象哈希值,是一個整數,表示在哈希表中的位置。

import java.util.ArrayList;

public class HashcodeObject {
    public static void main(String[] args) {
        Object obj1 = new Object();
        String obj2 = new String();
        ArrayList obj3 = new ArrayList();

        System.out.println(obj1.hashCode());
        System.out.println(obj2.hashCode());
        System.out.println(obj3.hashCode());

        String obj4 = obj2;

        System.out.println();
        System.out.println(obj4.equals(obj2));
        System.out.println("obj4 hashcode:" + obj4.hashCode());
        System.out.println("obj2 hashcode:" + obj2.hashCode());
    }
}

//結果
1846274136
0
1

true
obj4 hashcode:0
obj2 hashcode:0

toString()

object.toString()

返回對象的字符串表示形式。

默認返回格式:對象的 class 名稱 + @ + hashCode 的十六進制字符串

數組元素值去toString則返回一個字符串的表示形式 , 因爲 Array 繼承了 Object 類,所以可以直接使用toString()方法

public class ToStringObject {
    public static void main(String[] args) {

        Object obj1 = new Object();
        Object obj2 = new Object();
        Object obj3 = new Object();

        System.out.println("obj1:" + obj1.toString());
        System.out.println("obj2:" + obj2.toString());
        System.out.println("obj3:" + obj3.toString());


        String array[] = {"agou", "zh1z3ven", "Keefe"};
        System.out.println(array.toString());
        System.out.println(array[1].toString());
    }
}

//結果
obj1:java.lang.Object@6e0be858
obj2:java.lang.Object@61bbe9ba
obj3:java.lang.Object@610455d6
[Ljava.lang.String;@511d50c0
zh1z3ven

String

Java 中字符串屬於對象,Java 提供了 String 類來創建和操作字符串。

String 類是不可改變的,所以你一旦創建了 String 對象,那它的值就無法改變了。如果需要修改則需要用StringBuilder或者StringBuffer

在代碼中遇到字符串常量時,這裏的值是 "zh1z3ven"",編譯器會使用該值創建一個 String 對象。

和其它對象一樣,可以使用關鍵字和構造方法來創建 String 對象。

創建字符串的幾種方式:

String str = "zh1z3ven";

String str2=new String("zh1z3ven");

//利用字符數組創建字符串
char[] helloArray = { 'z', 'h', '1', 'z', '3', 'v', 'e', 'n'};
String helloString = new String(helloArray);  

str.concat()

將指定的字符串添加到str後面

//字符串拼接
//1、str.concat(string2);
String str4 = "你的名字".concat(str1);
System.out.println(str4);

//2、使用+
String str5 = "agou " + str1;
System.out.println(str5);

str.format()

格式化字符串

//format()格式化字符串
double floatVar =  3.1;
int intVar = 123;
String strVar = "xiaoagou";
System.out.printf("浮點型變量爲" + "%f 整型變量爲" + "%d 字符串變量爲" + "%s ", floatVar, intVar, strVar);
System.out.println();

String fstr;
fstr = String.format("浮點型變量爲" + "%f 整型變量爲" + "%d 字符串變量爲" + "%s ", floatVar, intVar, strVar);
System.out.println(fstr);

str.getBytes()

將字符串編碼爲 byte 序列,參數爲getBytes(String charsetName) ,charseName爲字符串編碼的名稱如UTF-8。此處可以指定編碼集將字符串編碼爲byte序列

//getBytes() 將字符串編碼爲byte序列存儲在一個新的byte數組裏
        byte[] str8 = str1.getBytes();
        System.out.println(str8);
        byte[] str10 = str1.getBytes("UTF-8");
        byte[] str9 = str1.getBytes("Unicode");
        System.out.println(str9);
        System.out.println(str10);

        //循環遍歷bytes數組
        for (int i = 0; i < str10.length; i++) {
            System.out.println(str10[i]);
            
//result
[B@6ff3c5b5
[B@3764951d
[B@4b1210ee
122
104
49
122
51
118
101
110

str.toCharArray()

//toCharArray(),將字符串轉換爲新的字符數組
        char array1[] = str1.toCharArray();
        for (int i = 0; i < array1.length; i++) {
            System.out.println(array1[i]);
        }
        
z
h
1
z
3
v
e
n

str.subtring()

字符串分割,類似於切片,左閉右開。

//str.subtring(),返回str的子字符串
String str11 = str1.substring(4);
System.out.println(str11);
String str12 = str1.substring(2,5);
System.out.println(str12);

ArrayList

ArrayList 類是一個可以動態修改的數組,與普通數組的區別就是它是沒有固定大小的限制,我們可以添加或刪除元素。

ArrayList 繼承了 AbstractList ,並實現了List接口。

初始化:

ArrayList<E> objectName =new ArrayList<>(); 

  • E: 泛型數據類型,用於設置 objectName 的數據類型,只能爲引用數據類型
  • objectName: 對象名。

add()

添加一個元素到ArrayList

ArrayList<String> arrayList = new ArrayList<String>();
        arrayList.add("xiaoming");
        arrayList.add("xiaoning");
        arrayList.add("xiaoling");
        arrayList.add("xiaoping");
        System.out.println(arrayList);

get()

按下標訪問數組元素

//按下標獲取ArrayList中的元素   get()
ArrayList<String> arrayList = new ArrayList<String>();
        arrayList.add("xiaoming");
        arrayList.add("xiaoning");
        arrayList.add("xiaoling");
        arrayList.add("xiaoping");
        
System.out.println(arrayList.get(1));

set()

修改指定數據元素

//修改元素  set()
        arrayList.set(2,"agou");
        System.out.println("修改後爲:" + arrayList.get(2));

size()

獲取ArrayList長度

//獲取ArrayList長度 size()
        int len = arrayList.size();
        System.out.println("arrayList的長度爲:" + len);

remove()

刪除指定下標元素

//刪除元素remove()
        System.out.println("末尾添加一個測試刪除元素test");
        arrayList.add("test");
        System.out.println(arrayList);
        arrayList.remove(4);
        System.out.println("刪除後的結果爲:" + arrayList);

循環遍歷

//1、for循環遍歷ArrayList
        for (int i = 0; i < arrayList.size(); i++) {
            System.out.println(arrayList.get(i));
        }

        System.out.println("=================================================");

        //2、for-each循環遍歷ArrayList
        for (String i: arrayList
             ) {
            System.out.println(i);
        }

其他引用類型

ArrayList 中的元素實際上是對象,在以上實例中,數組列表元素都是字符串 String 類型。

如果我們要存儲其他類型,而 只能爲引用數據類型,這時我們就需要使用到基本類型的包裝類。

基本類型 引用類型
boolean Boolean
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Characte
//如果需要講基本類型放在ArrayList中,則需要指定基本類型的包裝類
        ArrayList<Integer> integers = new ArrayList<Integer>();
        integers.add(1);
        integers.add(2);
        integers.add(3);
        integers.add(4);
        integers.add(5);
        integers.add(6);
        integers.add(7);
        System.out.println(integers);

Scanner

接收方式有nextLinenexthashNext方法判斷下一個字符是否爲空(類似的還有hashNextDouble等等),如遇到空格即停止接收;hashNextLine判斷下一行是否爲空,即遇到換行停止接收。

public class Demo01 {
    public static void main(String[] args) {

        // 創建一個掃描器對象,用於接收鍵盤數據
        Scanner scanner = new Scanner(System.in);

        // alt + enter 顯示提示快捷鍵;mac爲option + enter

        System.out.println("使用next方式接受:");

        // 判斷用戶有沒有輸入字符串

        if (scanner.hasNext()){
            //使用next接受用戶輸入
            String str = scanner.nextLine();
            System.out.println("輸出的內容爲:"+str);
        }

        // 用完scanner後關閉,節省資源,凡是io流,用完後需要關閉,節省資源
        scanner.close();
    }
}

Arrays

操作數組的類

Arrays.toString()

public static void main(String[] args) {

        int[] a = {1, 2, 3, 4, 5, 6, 47, 365, 456746, 234, 234234, 785};

        System.out.println(a);      //打印值爲數組對象的hashcode

        System.out.println(Arrays.toString(a));     //打印正常數組

        printArray(a);

        System.out.println("===================數組排序===================");

        Arrays.sort(a);     //對數組進行升序排序

        System.out.println(Arrays.toString(a));
    }

    //打印數組
    public static void printArray(int[] a){
        System.out.print("[");
        for (int i = 0; i < a.length; i++) {
            if (i == a.length - 1){
                System.out.print(a[i]);
            }else {
                System.out.print(a[i] + ", ");
            }

        }
        System.out.println("]");
    }

File

File是文件和目錄路徑名的抽象表示

文件和目錄是可以通過File封裝成對象的

對於File而言,其封裝的並不是一個真正的文件,僅僅是一個路徑名而已。

File構造方法

File(String pathname) 通過將給定的路徑名字符串(絕對路徑+文件名)轉換爲抽象路徑名來創建新的File實例
File(String parent, String child) 從父路徑名字符串(文件所在目錄)和子路徑名字符串(文件名)創建新的File實例
File(File parent, String child) 從父抽象路徑名和子路徑名字符串創建新的File實例
public class FileDemo {
    public static void main(String[] args) {
        // File(String pathname) 
        File f1 = new File("/Users/b/Desktop/Typora-Images/test.txt");
        System.out.println(f1);

        // File(String parent, String child) 
        File f2 = new File("/Users/b/Desktop/Typora-Images/","test.txt");
        System.out.println(f2);

        // File(File parent, String child) 
        File f3 = new File("/Users/b/Desktop/Typora-Images/");
        File f4 = new File(f3,"test.txt");
        System.out.println(f4);
        
    }
}

File類創建功能

public boolean createNewFile()	當具有改名成的文件不存在時,創建該文件,返回true,如果存在返回false。若上一級目錄不存在的話,拋出io異常。
public boolean mkdir()	創建由此抽象路徑名命名的目錄
public boolean mkdirs()  創建由此抽象路徑名命名的目錄,包括任何必須但不存在的父目錄

File類的判斷和獲取功能

public boolean isDirecory() 判斷是否爲目錄
public boolean isFile()  判斷是否爲文件
public boolean exists()  判斷此File是否存在

public String getAbsolutePath()  返回此抽象路徑名的絕對路徑名字符串
public String getPath()  將此抽象路徑名轉換爲路徑名字符串
public String getName()  返回此抽象路徑名錶示的文件或名錄名稱

public String[] list()  返回此抽象路徑名錶示的目錄中的文件和目錄的名稱字符串數組
public File[] listFiles()  返回此抽象路徑名錶示的目錄中的文件和目錄的File對象數組
public class FileFuncDemo {
    public static void main(String[] args) throws IOException {

        File f1 = new File("/Users/b/Desktop/fonts-master 2");
        //isDirecory()
        System.out.println("isDirecory: " + f1.isDirectory());

        //isFile()
        System.out.println("isFile: " + f1.isFile());

        //exists()
        System.out.println("exists: " + f1.exists());

        //getAbsolutePath()
        System.out.println("getAbsolutePath: " + f1.getAbsolutePath());

        //getPath()
        System.out.println("getPath: " + f1.getPath());

        //getName()
        System.out.println("getName: " + f1.getName());

        //list()
        String[] list = f1.list();
        for (String str : list
             ) {
            System.out.println(str);
        }

        //listFiles()
        File[] list2 = f1.listFiles();
        for (File f : list2
             ) {
            System.out.println(f);
        }

    }
}
//
isDirecory: true
isFile: false
exists: true
getAbsolutePath: /Users/b/Desktop/fonts-master 2
getPath: /Users/b/Desktop/fonts-master 2
getName: fonts-master 2
README.rst
Meslo Dotted
FiraMono
DroidSansMonoSlashed
====================
/Users/b/Desktop/fonts-master 2/UbuntuMono
/Users/b/Desktop/fonts-master 2/Tinos
/Users/b/Desktop/fonts-master 2/Monofur

File類刪除功能

public boolean delete() 刪除由此抽象路徑名錶示的文件或名錄
public static void main(String[] args) throws IOException {

        File f1 = new File("/Users/b/Desktop/java.txt");
        System.out.println(f1.createNewFile());


        if (f1.exists()&f1.isFile()) {
            System.out.println(f1.delete());
        } else {
            System.out.println("此文件不存在");
        }

    }

遞歸遍歷目錄

import java.io.File;

public class FileBLDir {
    public static void main(String[] args) {

        File file = new File("/Users/b/Desktop/fonts-master 2/");

        FileBLDir f = new FileBLDir();
        f.fileSearch(file);
    }

    public void fileSearch(File file){
        File[] FDlist = file.listFiles();
        for (File f : FDlist
             ) {
            if (f.isFile()){
                System.out.println(f.getAbsolutePath());
            } else {
                fileSearch(f);
            }
        }

    }

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