1. 程式人生 > 其它 >直連模式

直連模式

Object類

  • 超類、基類,所有類的直接或間接父類,位於繼承樹的最頂層。

  • 任何類,如沒有書寫extends顯示繼承某個類,都預設直接繼承0bject類,否則為間接繼承。

  • 0bject類中所定義的方法,是所有物件都具備的方法。

  • 0bject型別可以儲存任何物件。

    • 作為引數,可接受任何物件。

    • 作為返回值,可返回任何物件。

getClass()方法

public final Class<?> getClass(){}

返回引用中儲存的實際物件型別

應用:通常用於判斷兩個引用中實際儲存的物件型別是否一致

hashCode()方法

public int hashcode(){}

返回該物件的雜湊碼值。

雜湊值根據物件的地址字串數字使用hash演算法計算出來的int型別的數值。

一般情況下相同物件返回相同雜湊碼。

toString()方法

public String toString(){}

返回該物件的字串表示(表現形式)

可以根據程式需求覆蓋該方法,如:展示物件各個屬性值

equals()方法

public boolean equals(Object obj){}

預設實現(this == obj),比較兩個物件地址是否相同

可進行覆蓋,比較兩個物件的內容是否相同

equals()方法覆蓋步驟

  • 比較兩個引用是否指向同一個物件。

  • 判斷obj是否為null。

  • 判斷兩個引用指向的實際物件型別是否一致。

  • 強制型別轉換。

  • 依次比較各個屬性值是否相同。

finalize()方法
  • 當物件被判定為垃圾物件時,由JVM自動呼叫此方法,用以標記垃圾物件,進入回收佇列。

  • 垃圾物件:沒有有效引用指向此物件時,為垃圾物件。

  • 垃圾回收:由GC銷燬垃圾物件, 釋放資料儲存空間。

  • 自動回收機制: JVM的記憶體耗盡,一次性回收所有垃圾物件。

  • 手動回收機制:使用System. gc();通知JVM執行垃圾回收。

包裝類

  • 基本資料型別所對應的引用資料型別。

  • 0bject可統一所有資料,包裝類的預設值是null。

包裝類對應基本型別

型別轉換與裝箱、拆箱

基本資料型別與包裝類之間的轉換

型別轉換:裝箱,基本型別換成引用型別的過程

Integer integer1 = new Integer(num1);
Integer integer2 = Integer.valueOf(num1);

型別轉換:拆箱,引用型別裝換成基本型別

Integer integer3 = new Integer(100);
int num2 = integer3.intValue();

JDK1.5之後,提供自動裝箱和拆箱

Integer integer4 =age;
int age2 = integer4;

八種包裝類提供不同型別間的轉換方式

  • Number父類中提供的6個共性方法

  • parseXXX()靜態方法

  • valueOf()靜態方法

注意:需保證型別相容,否則丟擲NumberFormatException異常。

整數緩衝區

Java預先建立了256個常用的整數包裝型別物件。(-128~127)

在實際應用中,對已建立的物件進行復用

String類

  • 字串是常量,建立之後不可改變

  • 字串字元面值儲存在字串池中,可以共享

public static void main(String[] args) {
  String name = "hello";//"hello" 常量儲存在字串池中
  name = "zhangsan";//"張三"賦值給name變數,給字串負值時,並沒有修改資料,而是重新開闢一個空間
  String name2 = "zhangsan";
}

  • String s = "Hello";產生一個物件,字串池中儲存

  • String s = new String("Hello");//產生兩個物件,堆、池各儲存一個

//演示字串的另一種建立方式
String str = new String("java");
String str2 = new String("java");
System.out.println(str==str2);
System.out.println(str.equals(str2));

String類的常用方法
  1. length()方法; 返回字串的長度

  2. charAt(int index)方法; 返回某個位置的字元

  3. contains(String str); 判斷是否包含某個字串

  4. toCharArray(); 返回字串對應的陣列

  5. index0f(); 返回子字串首次出現的位置

  6. lastIndex0f(); 返回字串最後一-次出現的位置

  7. trim(); 去掉字串前後的空格

  8. toUpperCase();// 把小寫轉成大寫 toLowerCas(); 把大寫轉成小寫

  9. endWith(str) ; 判斷是否以str結尾, startwith(str) ; 判斷是否以str開頭

  10. replace( char old,char new); 用新的字元或字串替換舊的字元或字串

  11. split(); 對字串進行拆分

//補充兩個方法equals(),compareTo():比較大小
String s1 = "hello";
String s2 = "Hello";
System.out.println(s1.equalsIgnoreCase(s2));//忽略大小寫的比較

String s3 = "abc";
String s4 = "xyz";
System.out.println(s3.compareTo(s4));//從第一個字元開始比較兩字元的Ascii碼值

String s5 = "abc";
String s6 = "abcxyz";
System.out.println(s5.compareTo(s6));//比較Ascii碼值無果後,比較字串長度

首字母大寫方法

for (int i = 0; i < arr.length; i++) {
  char first = arr[i].charAt(0);
  char upperFirst = Character.toUpperCase(first);
  String news = upperFirst + arr[i].substring(1);
  System.out.println(news);
}
可變字串StringBUffer和StringBuilder

StringBUffer:可變長字串,JDK1.0提供,執行效率慢、執行緒安全

StringBuilder:可變長字串,JDK1.5提供,執行效率快、執行緒不安全

和String的區別

(1)效率比String高

(2)比String節省記憶體

StringBuffer和 StringBuilder的方法的使用

//StringBuffer sb = new StringBuffer();
StringBuilder sb = new StringBuilder();
//1. append();追加
sb.append("java世界第一");
System.out.println(sb.toString());
sb.append("java真相");
System.out.println(sb.toString());
sb.append("java牛逼");
System.out.println(sb.toString());
//2. insert();新增
sb.insert(0,"我在最前面");
System.out.println(sb.toString());
//3. delete();刪除
sb.delete(0,5);
System.out.println(sb.toString());
//4. replace();替換
sb.replace(0,4,"php");
System.out.println(sb.toString());
//倒轉
sb.reverse();
System.out.println(sb.toString());
//清空
sb.delete(0,sb.length());
System.out.println(sb.toString());
System.out.println(sb.length());

BigDecimal類

  • 很多實際應用中需要精確運算,而double或float是近似值儲存,不在符合要求,需要藉助BIgDecimal

  • 位置: java. math包中。

  • 作用:精確計算浮點數。

  • 建立方式: BigDecimal bd=new BigDecimal( “1.0”);

  • 方法:

//減法bd1.subtract(bd2);
//加法bd1.add(bd2);
//乘法bd1.multiply(bd2);
//除法
//保留三位小數,四捨五入
bd1.divide(new BigDecimal("0.9"),3,BigDecimal.ROUND_HALF_UP);
BigDecimal divide1 = new BigDecimal("1.4")
.subtract(new BigDecimal("0.5"))
.divide(new BigDecimal("0.9"));
  • 除法: divide (BigDecimal bd, int scal, Roundi ngMode mode)

  • 引數scal :指定精確到小數點後幾位。

  • 引數mode:

    • 指定小數部分的取捨模式,通常採用四捨五入的模式

    • 取值為BigDecimal.ROUND_HALF_UP

保留三位小數,四捨五入 BigDecimal divide = bd1.divide(new BigDecimal("0.9"),3,BigDecimal.ROUND_HALF_UP);

Date類

  • Date表示特定的瞬間,精確到毫秒。Date類中的大部分方法都已經被Calendar類中的方法所取代。

  • 時間單位

    • 1秒=1000毫秒

    • 1毫秒=1000微秒

    • 1微秒=1000納秒

  • 方法

    1. after()

      1. before()

      2. compareTo(): 比較時間前後

      3. equals():比較是否相等

Calendar類

Calendar提供了獲取或設定各種日曆欄位的方法。.

構造方法

protected Calendar() :由於修飾符是protected,所以無法直接建立該物件。

其他方法

補充方法
//獲取當前時間的某一欄位的最大值或最小值
int max = instance1.getActualMaximum(Calendar.DAY_OF_MONTH);
int min = instance1.getActualMinimum(Calendar.DAY_OF_MONTH);

SimpleDateFormat類

  • SimpleDateFormat是一個以與語言環境有關的方式來格式化和解析日期的具體類。

  • 進行格式化(日期 -> 文字)、解析(文字 -> 日期)。

  • 常用的時間模式字母

字母 日期或時間 示例
y 2019
M 年中月份 08
d 月中天數 10
H 一天中小時數(0-23) 22
m 分鐘 16
s 59
S 毫秒 367
public static void main(String[] args) throws Exception {
//1. 建立SimpleDateFormat物件 Y 年 M 月
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH-mm-ss");
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
//2. 建立Date物件
Date date = new Date();
//格式化date(把日期轉成字串)
String str = sdf.format(date);
System.out.println(str);
//解析 (把字串轉成日期)
Date date1 = sdf.parse("1990/05/02");
System.out.println(date1);
}

System類

System系統類,主要用於獲取系統的屬性資料和其他操作,構造方法私有的。

public static void main(String[] args) {
//1. arraycopy:陣列複製
//Object src:源陣列
//int srcPos:從哪個位置開始複製 0
//Object dest:目標陣列
//int destPos:目標陣列的位置
//int length:複製的長度
int[] arr = {21,43,54,12,65,2,66,41};
int[] dest = new int[8];
System.arraycopy(arr, 0, dest, 0, 8);
for (int i = 0; i < dest.length; i++) {
System.out.println(dest[i]);
}
//Arrays.copyOf();
//2. 獲取毫秒數
System.out.println(System.currentTimeMillis());
long start = System.currentTimeMillis();
for (int i = 0; i < 999999999; i++) {
for (int j = 0; j < 999999999; j++) {
int result = i+j;
}
}
long end = System.currentTimeMillis();
System.out.println("用時:"+(end-start));
//3. 回收垃圾
//System.go();告訴垃圾回收器回收
//4. 退出JVM
System.exit(0);
System.out.println("程式結束了。。。");
}