1. 程式人生 >實用技巧 >其它 >java學習筆記6(上)

java學習筆記6(上)


1.String和StringBuffer之間如何轉換:

//String---->StringBuffer
//方式1:StringBuffer的有參構造方法
public StringBuffer(String str)
//方式2:StringBuffer的無參構造方法+append(追加){}
public StringBuffer()
public StringBuffer append(String str)  
  
//StringBuffer----->String
  //方式1:String類的有參構造方法
public String(StringBuffer buffer)
//方式2:StringBuffer的功能:toString
public String toString()  

2.int和String之間進行互相轉換?

//int--->String
int i = 100 ;
String s = "" ;
String reuslt = s +i ; //"100"
//Integer(int i) 
Integer ii = new Integer(i) ;
//成員方法public String toString() 
String result2 = ii.toString() ;
//方式3:Integer的靜態功能public static String toString(int i)
​
//String---->int
//String---long
//String----double
//Integer的paseInt()

3.Character類

是基本的資料型別char型別的包裝類型別,包含char的值.
構造方法:Character(char value)引數裡面也可以為int--char:將一個字元內容構造成包裝類型別.
成員方法:  判斷功能:
 public static boolean isDigit(char ch):判斷當前ch字元是否為數字
 public static boolean isLowerCase(char ch):判斷當前ch字元是否為小寫字母字元
 public static boolean isUpperCase(char ch)確定指定的字元是否為大寫字元

4.date類

表示 日期格式:精確到瞬秒.
構造方法: public Date():無參構造方法,獲取當前系統時間的日期格式  預設使用當前系統時間
public Date(long date):將long型別-構造成Date物件:long指定時間毫秒值(與1970年1月1日)
成員方法:
public long getTime():將Date日期格式---轉換成long型別返回自1970年1月1日以來的Date毫秒數.
注意:咋開發中:前後端互動:前端提交的日期資料----String型別.
資料庫中儲存的的時間:Date格式:
   String日期文字格式如何和Date格式之間相互轉換:
   DateFormat是日期/時間格式化子類的抽象類,它以語言無關的方式格式化和分析日期或時間.是一個抽象類.抽象類不能例項化,他提供了更具體的子類SimpleDateFormat進行操作.
   java.util.Date物件---SimpleDateFormat-----
   String日期文字格式.
   格式化格式:
   public final Stringformat(Date date)
   yyyy:表示年   2009
   MM:月      07/11
   dd:月中的天   01
   HH:小時數    14  (24小時制)
   mm:分鐘數    02
   ss:描述     03
   構造方法:publicSimpleDateFormat(String patten):引數為描述日期和時間格式的一種模式;
   將String--------SimpleDateFormat------Date 解析

5.Calendar抽象類

表示的特定一組時間:諸如YEAR,MONTH,DAY-OF_MONTH等
如何例項化:
  如果一個類定義為抽象類,那麼目的是不讓這個類例項化.
  它肯定會有靜態功能,返回值它本省.
靜態功能:
  public static Calendar getInstance()
成員變數---常量
  public static final int YEAR :年
  public static final int MONTH:月:角標是從0開始計算, 計算出來+1 public     static final int DATE:月中的日期 和DAY_OF_MONTH同義詞
成員方法:
  public int get(intfield):獲取當前的日曆欄位你
  public abstract voidadd(int field,intamount):設定時間偏移量,針對當前日曆欄位,減去或者新增指定amount.
  舉例:鍵盤錄入一個年份,判斷這個年份的二月份有多少天?

   package com.jhq5.test1.work02;
​
import java.util.Calendar;
import java.util.Scanner;
​
public class CalendarTest {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        //提示錄入月查詢的年份的2月;
        System.out.println("請輸入你要查詢的年份的2月:");
        int year=sc.nextInt();
        //建立日曆物件
        Calendar c = Calendar.getInstance();
        //設定當前日曆物件
        c.set(year,2,1);
        //設定偏移量
        c.add(c.DATE,-1);
        System.out.println(year+"年的2月份有"+c.get(Calendar.DATE)+"天");
    }
}
2.當前日曆為2021-2-1,計算5年後的10天前?
package com.jhq5.test1.work3;
​
import java.util.Calendar;
​
public class CalendarTest {
    public static void main(String[] args) {
        //建立日曆物件;
        Calendar c = Calendar.getInstance();
        //獲取當前系統的日期;
        c.set(2021,01,01) ;
        //5年前
        c.add(Calendar.YEAR,5);
       int year = c.get(Calendar.YEAR);
        int month=c.get(Calendar.MONTH);
        //10天前
        c.add(Calendar.DATE,-10);
       int day=c.get(Calendar.DATE);
        System.out.println("5年後的10天前是"+year+"年"+month+"月"+day+" 日");
    }
}

6.System類

不能例項化,裡面提供一些標準的輸入流,
靜態欄位(常量)
 public static final  InputSteam in ;
 public static final  PrintStream out ;
靜態功能:
 public static void gc() //手動開啟垃圾回收器
 public static void exit(int status)//:引數為0,正常終止JVM
 public static void arraycopy(Object src,int srcPos,Object dest,int      destPos, int length)//複製陣列
 public static long currentTimeMillis()//:計算當前系統時間毫秒值
System的gc()方法的作用:
  呼叫gc()方法,其實質呼叫Object類的finalize()方法,需要被子類覆蓋,將沒有更多引用的物件進行垃圾回收,以釋放
當前所佔用的記憶體空間!

7.面試題:

final,finalize()的區別:
  前者關鍵字,後者方法.
  final,狀態修飾符,修飾類,不能被繼承;修飾方法,不能重寫;修飾變數,是一個常量.
  finalize(),當垃圾回收器開啟的時候,會呼叫子類的finalize()方法,來回收沒有更多引用    的物件.
   一般情況:不需要手動開啟回收器,自動回收.

8.Random類

是偽隨機數生成器
構造方法:
  Random():建立隨機數生成器,通過它呼叫功能獲取的隨機是不同的  (使用無參構造居多)
  Random(long seed):建立隨機數生成器,通過它呼叫功能,產生隨機數值相同的
 成員方法:
    public int nextInt():獲取隨機數int類型範圍
    public int nextInt(int n):獲取0-n之間隨機數,不包括n  (重點)
​

9.Math類

數學的運算工具類;(功能都是靜態)
 public static double abs(double/int a):求絕對值
 public static double ceil(double a):向上取整
 public static double floor(double a):向下取整
 public static double max(double a,double b):獲取最大值
 public static double min(double a,double b):獲取最小值
 public static double random():[0,1) :獲取0,1隨機數,不包含1
 public static long round(double a):四捨五入
 public static double sqrt(double a):開正方根
 public static double pow(double a,double b):a的b次冪

10.BigDecimal類

對小數進行精確計算的
  public BigDecimal(String val) :將數字字元構造成BigDecimal物件
 功能
   public BigDecimal add(BigDecimal augend)求和
   public BigDecimal subtract(BigDecimal subtrahend)相減
   public BigDecimal multiply(BigDecimal multiplicand):乘
   public BigDecimal divide(BigDecimal divisor)除
除的時候,還可以保留小數的精確位數
   public BigDecimal divide(BigDecimal divisor,int scale, RoundingMode   roundingMode)
  引數1:指定的除數
  引數2:保留的有效位數
  引數3:指定舍入模式: ROUND_HALF_UP 四捨五入

11.選擇排序

思想:使用0角標對應的元素依次和後面角標對應的元素進行比較,小的往前放,第一次比較完畢,最小值出現在最小索引處,依次比較,比較的次數:陣列長度-1;
程式碼:
public class ArrayDemo {
​
    public static void main(String[] args) {
        //給定一個數組
        int[] arr = {24,68,87,57,13} ;
​
        System.out.println("排序前:");
        //自己的功能
        printArray(arr) ;
         System.out.println("排序後:");
         selectSort(arr);
          printArray(arr) ;
     private static void selectSort(int[] arr) {
        for (int x = 0; x < arr.length - 1; x++) {//比較次數
            for (int y = x + 1; y < arr.length; y++) {//遍歷後面的元素
                //判斷
                if (arr[y] < arr[x]) {
                    int temp = arr[x];
                    arr[x] = arr[y];
                    arr[y] = temp;
                }
            }
        }
    }
​
    public static void printArray(int[] arr){
        System.out.print("[") ;
        for(int x = 0 ; x < arr.length ; x++){
            if(x == arr.length-1){
                System.out.println(arr[x] +"]") ;
            }else{
                System.out.print(arr[x]+", ");
            }
        }
    }
}

12.String和StringBuffer的區別:

StringBuffer:可變的字元序列,執行緒安全的類
    StringBuffer:字串緩衝區中儲存的字元序列,最終使用的時候---->String
    1)String(StringBuffer buffer)
    2)String toString() ;
String:不支援可變,特點:常量,一旦被賦值,其值不能被更改
    StringBuffer(String str)
    StringBuffer()+append(String str)

13.集合和陣列的區別:

長度的區別:
    集合:長度是可變的
    陣列:長度是固定的
儲存資料型別的區別:
    集合:只能儲存引用資料型別
    陣列:既可以儲存基本資料型別,也可以儲存引用資料型別
儲存元素的區別:
    集合:可以儲存任何引用型別的元素,沒有泛型
    陣列:儲存的這些型別(基本/引用),同一種類型的元素

14.集合去遍歷字串資料,toArray()方式的操作步驟:

//建立集合物件
Collection c = new ArrayList() ;
//給集合中新增字串資料
c.add("hello") ;
c.add("world") ;
c.add("JavaEE") ;
c.add("Android") ;
//將集合轉換成物件陣列Object[]
Object[] objs = c.toArray() ;//相當於每一個Object obj = new String() ;
//遍歷物件陣列
for(int x = 0 ; x < objs.length; x ++){
   //直接輸出objs[x] 
   //獲取字串資料的同時,獲取字串長度 length()
   String s = (String)objs[x] ;
   System.out.println(s +"---"+s.length()) ;
}

15.Collection集合的高階功能

  boolean addAll(Collection c):新增一個集合中的所有元素
  boolean containsAll(Collection c):包含一個集合的所有元素 (思考:包含一個算包含,還是所有元素)
  boolean removeAll(Collection c):刪除一個算刪除還是刪除所有算刪除?   結論:刪除一個集合中包含另一個集合中的某個元素,就算刪除,返回true.
  面試題:
  boolean retainAll(Collection c): 求集合中的交集元素,boolean的表示式意思是什麼?
  A集合對B集合求交集,boolean 什麼情況true/什麼情況下false
  將交集的元素儲存A集合中,boolean表達的意思:將儲存在A集合中的元素是否和之前的元素髮生變化
  如果前後發生變化,則返回true;沒有變化,則返回false!

16.Iterator:介面

Iterator<E> iterator():迭代器:集合專有遍歷方式
 Iterator:介面
 boolean hasNext() 判斷是否有下一個可以迭代的元素 (判斷功能)
 Object next():獲取下一個可以迭代的元素      (獲取功能)

17.增強for迴圈:

 作用:替代迭代器的Iterator,簡化書寫方式
  格式:  
  for(泛型資料型別 變數名 : 集合物件名稱){  //增強for迴圈 遍歷陣列非常少,主要用在集合中
      輸出變數名;
    }
   前提條件:集合物件不能為null,否則就出現空指標異常
   目的:替代迭代器!

18.List 集合

是Collection的子介面,有Collection大部分功能,也有自己的功能.
特點:
  有序:儲存和取出一致;
  元素可以重複;
特有的功能:
  void add(int index, Object element):在指定位置處新增一個新的元素
  Object remove(int index):刪除指定位置處的元素
  E set(int index, Object element):修改指定位置處的元素內容
  Object get(int index):獲取指定位置處的元素
  ListIterator<E> listIterator():列表迭代器
  舉例:
   使用List儲存多個字串,有重複的元素,如何去重!
   (1)新建集合思想:
  
 public class ListTest2 {
​
    public static void main(String[] args) {
​
        //建立List集合物件
        List<String> list = new ArrayList<>() ;
​
        list.add("hello") ;
        list.add("world") ;
        list.add("javaee") ;
        list.add("hello") ;
        list.add("world") ;
        list.add("world") ;
        list.add("hello") ;
        list.add("javaee") ;
        list.add("android") ;
        list.add("android") ;
        list.add("php") ;
        list.add("php") ;
        //建立一個新的集合
        List<String> newList = new ArrayList<>() ;
        //遍歷舊集合獲取每一個元素:增強for
        for(String s:list){
            //在新集合中判斷是否包含這個元素,如果不包含,才給新集合中新增
            if(!newList.contains(s)){
                newList.add(s) ;
            }
        }
        //遍歷新集合
        for(String s:newList){
            System.out.println(s);
        }
    }
​
}
   (2)利用選擇排序思想:
  
  public class ListTest3 {
    public static void main(String[] args) {
        //建立List集合物件
        List<String> list = new ArrayList<>() ;
​
        list.add("hello") ;
        list.add("world") ;
        list.add("javaee") ;
        list.add("hello") ;
        list.add("world") ;
        list.add("world") ;
        list.add("hello") ;
        list.add("javaee") ;
        list.add("android") ;
        list.add("android") ;
        list.add("php") ;
        list.add("php") ;
        //選擇排序的核心程式碼
        for(int x = 0 ; x < list.size()-1; x++){
            for(int y = x+1 ; y < list.size() ; y ++){
                //業務思想:如果前面的元素和後面元素一致,將後面的重複元素刪除掉
                if(list.get(y).equals(list.get(x))){
                    //將後面的元素刪除
                    list.remove(y) ;
                    y -- ;
                }
            }
        }
        //遍歷當前這個集合
        for(String s :list){
            System.out.println(s);
        }
    }
}

19.ListIterator介面

 ListIterator<E> listIterator():列表迭代器
  ListIterator介面:
      ArrayList內部類ListItr,(父類:ArrayList的內部類Itr)實現它裡面的方法
      boolean hasNext() :判斷當前列表中是否下一個可以遍歷的元素
      Object next():獲取下一個元素
      boolean hasPrevious():判斷當前列表中是否有時上一個可以遍歷的元素
      Object previous():獲取上一個元素
      前提條件:必須有正向遍歷,才能使用反寫遍歷;

20.泛型

 1.1泛型的好處:
      1)提高程式安全性
      2)解決警告線
      3)使用集合的迭代器避免強轉型別強轉型別轉換
 1.2將泛型定義在介面上
   1)介面的子實現類已經明確了型別
   2)介面的子實現類不明確裡面儲存的型別
 1.3 泛型定義在方法上的格式:許可權修飾符 <T> 返回值型別 方法名(T 引數名){...}
  固定格式  T--->Type 任何型別 
 1.4  public class ObjectTool<T> {泛型定義在類上
 1.5泛型的萬用字元(瞭解)
  <?>:代表Object或者任意的Java型別(jdk提供/自定義的)
  <? extends E>:向下限定,E這個型別以及 它的子類
  <? super E> :向上限定 E這個類以及它的父類