java常用類
Object類
基類,超類,所有類的直接或間接父類
object類定義的方法是所有物件都具有的方法
object型別可以存盤任何物件
- 作為引數,可以接受任何物件
- 作為回傳值,可以回傳任何物件
getClass()
回傳參考中存盤的實際物件型別
public class Student {
public static void main(String[] args) {
Student student = new Student();
System.out.println(student.getClass());
System.out.println(student.getClass().getName());
System.out.println(student.getClass().getSimpleName());
}
}
/* out:
class com.xxx.Student
com.xxx.Student
Student
hashCode()
回傳該物件的哈希碼值(int)
哈希值:根據物件的地址或字串或數字使用hash演算法計算出來的int型別的數值,
一般情況下相同物件回傳相同哈希碼
Student student = new Student();
System.out.println(student.hashCode());
Student student1 = new Student();
System.out.println(student.hashCode()==student1.hashCode());
/*
1435804085
false
toString()
回傳物件的字串表現形式
可以進行重寫,自己來覺得展示的字串形式
Student student = new Student();
System.out.println(student.toString());
//com.xxx.Student@5594a1b5
equals()
比較兩個物件地址是否相同
也可以重寫,自己覺得比較方式
Student student = new Student();
Student student1 = new Student();
System.out.println(student.equals(student1));
//false
finalize()
當物件被判定為垃圾物件時,由JVM自動呼叫此方法,用來標記,進入回收佇列
垃圾物件:沒有有效參考指向此物件,
垃圾回收:釋放資料存盤空間
自動回識訓制:JVM記憶體耗盡,一次性回收所有垃圾物件
手動回識訓制:使用System.gc();通知JVM回收
垃圾回收時呼叫finalize(),本身為空需要重寫
public static void main(String[] args) {
Student student = new Student();
//后兩者為垃圾
new Student();
new Student();
System.gc();
}
@Override
protected void finalize() throws Throwable {
System.out.println("一個垃圾被回收了");
}
/*一個垃圾被回收了
一個垃圾被回收了
包裝類
為解決基本資料型別沒有相應方法,設計了基本資料型別對應的參考資料型別,這就是包裝類
包裝類默認值:null
基本資料型別 | 包裝資料型別 |
---|---|
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
char | Character |
包裝類的方法可以自行查閱java的官方檔案
型別轉換和裝箱、拆箱
裝箱:基本型別轉換成參考型別
拆箱:參考型別轉換為基本型別
Number類
Number類是六個包裝類以及一些其他類的子類
基本型別轉參考型別
int a = 2;
Integer integer = new Integer(a);
Integer integer1 = Integer.valueOf(2);
自動裝箱(jdk1.5之后)
int a = 2;
Integer integer = a;
參考型別轉基本型別
int b = integer.intValue();
自動拆箱(jdk1.5之后)
int a = 2;
Integer integer = a;
Integer integer1 = integer;
parseXXX()靜態方法
基本型別轉字串
int n1=100;
String s1 = n1+"";
//或者
String s2 = Integer.toString(n1);
//十六進制
String s2 = Integer.toString(n1,16);
字串轉基本型別
字串轉int:Integer.parseInt(String)
字串轉其他:包裝類.praseXXX(String)
boolean字串轉基本型別,除了"true"是true全是false
Integer緩沖區
//因為左邊創建變數在堆疊,堆疊存放堆里地址,兩者地址不同不相等
Integer integer1 = new Integer(100);
Integer integer2 = new Integer(100);
System.out.println(integer1==integer2);
//自動裝箱,自動裝箱本質是呼叫Integer.ValueOf方法,可以直接看一下Integer.ValueOf方法,因為該方法中有判斷條件為:如果值大于等于-128,小于等于127直接回傳緩沖區(堆中)物件值,否則new一個新的Integer回傳,綜上所以后兩者結果不同
integer1 =100;
integer2 =100;
System.out.println(integer1==integer2);
integer1 =200;
integer2 =200;
System.out.println(integer1==integer2);
//地址相等了
Integer integer3 = new Integer(100);
Integer integer4 = integer3;
System.out.println(integer3==integer4);
/*
false
true
false
true
String類
String的一些特性
字串是常量,創建之后不可改變:
什么意思呢?當我們修改字串時并不是把舊的字串的值改成了新的值,而是在字串池開辟新空間存盤新增,并且把堆疊中的宣告地址指向新的值,舊的值成了“垃圾”,
與此同時,當我們再次什么一個新的字串變數,并且把他賦值為和剛才已有變數相同的值,那么直接指向已有變數值的字串池空間,不再開辟新的空間存值
使用new創建字串時又有所不同,他是在堆中創建了的空間存盤物件然后堆中空間又指向(可能說指向不對但可以這樣理解)字串池(相同值依舊指向同一個字串池空間),總的來說創建了兩個物件分別在方法區和堆中
String s = "name";
String s1 = "name";
System.out.println(s==s1);
//true
String s = "name";
String s1 = new String("name");
System.out.println(s==s1);
//equals比較的是資料
System.out.println(s.equals(s1));
//false
//true
字串字面值(右邊)存盤在字串池(在方法區中(方法區邏輯上獨立,物理上屬于堆))中,可以共享
java常用方法
這些方法應該不用我一行行的演示吧
可變字串
由于上面描述的String的不可變性質,我們需要通過其他的類來解決這個特性帶來的一些問題(效率低等)
StringBuffer類:可變長字串在String的基礎上加上了緩沖區,運行效率慢、執行緒安全
StringBuilder:可變長字串,運行效率快、執行緒不安全
兩者相對于String,效率更高,更加節省記憶體
StringBuffer sb = new StringBuffer();
//追加
sb.append("hello");
System.out.println(sb.toString());
sb.append("world");
System.out.println(sb.toString());
//添加
sb.insert(0,"最前面");
System.out.println(sb.toString());
//replace();左閉右開
sb.replace(0,3,"hello");
System.out.println(sb.toString());
//delete()
sb.delete(0,5);
System.out.println(sb.toString());
//其他方法如翻轉清空自己搜索
/*
hello
helloworld
最前面helloworld
hellohelloworld
helloworld
//StringBuider和StringBuffer相同,單執行緒用前者,否則后者
BigDecimal
關于double存在精度丟失(存盤的實際上是近似值)
double d1 = 1.0;
double d2 = 0.9;
double d3 = d1-d2;
System.out.println(d3);
//0.09999999999999998
需要精確計算或是小數比較時用BigDecimal類,可以精確計算浮點數
BigDecimal bigDecimal = new BigDecimal("1.0");
BigDecimal bigDecimal1 = new BigDecimal("0.9");
//減法
System.out.println(bigDecimal.subtract(bigDecimal1));
//加法
bigDecimal.add(bigDecimal1);
// 乘法
bigDecimal.multiply(bigDecimal1);
// 除法
bigDecimal.divide(bigDecimal1);
bigDecimal.subtract(bigDecimal1).divide(bigDecimal1);
//+保留幾位,四舍五入
bigDecimal.subtract(bigDecimal1).divide(bigDecimal1,1,BigDecimal.ROUND_HALF_EVEN);
//0.1
Data
很多方法已經過時或者被Calendar類替代
不想多說自己看檔案
Date date = new Date();
System.out.println(date.toString());
//Thu May 18 19:41:35 CST 2023
Calendar
Calendar calendar = Calendar.getInstance();
System.out.println(calendar.getTime().toLocaleString());
//2023年5月18日 下午7:46:33
//年
int year = Calendar.get(Calendar.YEAR);
//月,比實際小1
calendar.get(Calendar.MONTH);
// 日
calendar.get(Calendar.DAY_OF_MONTH);
// 小時
calendar.get(Calendar.HOUR_OF_DAY);//HOUR12小時,HOUR_OF_DAY24小時
// 分鐘
calendar.get(Calendar.MINUTE);
// 秒
calendar.get(Calendar.SECOND);
其他自己查檔案
SimpleDataFormat
與語言環境有關的方式來格式化和決議日期的具體類
實作日期-->文本或者文本-->日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
Date date = new Date();
//格式化
String string = sdf.format(date);
System.out.println(string);
//決議
SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
Date date2 = sdf1.parse("1990-05-01");
System.out.println(date2);
/*2023年05月18日20:09:03
Tue May 01 00:00:00 CDT 1990
System類
構造方法私有,方法是靜態的
int[] arr={20,18,15,8,45,90,1,65};
int[] dest=new int[8];
//源陣列-開始復制位置下標-目標陣列-目標陣列的位置-復制長度
System.arraycopy(arr,0,dest,0,arr.length);
for(int i=0;i<dest.length;i++){
System.out.println(dest[i]);
}
/*
20
18
15
8
45
90
1
65
currentTimeMillis():現在到1970毫秒數
后兩者用過不多說
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/552822.html
標籤:其他
下一篇:返回列表