java學習筆記6(上)
阿新 • 來源:網路 • 發佈:2023-01-29
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這個類以及它的父類
