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()
將字符串編碼爲 byt
e 序列,參數爲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
接收方式有nextLine
和next
,hashNext
方法判斷下一個字符是否爲空(類似的還有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);
}
}
}
}