開發過程中遇到的一些知識點
這些知識點都是開發過程中遇到的並且瞭解的,也許不是太詳細,記錄下來留作筆記,感興趣的朋友可以再深入的查詢下。
一:SLF4J的應用(整合了log4j)
SLF4J全稱是Simple Logging Facade For Jave,即簡單的日誌門面。SLF4J並不是具體的日誌框架,而是作為一個簡單的門面服務於各類日誌框架,如java.util.logging,logback和log4j。
SLF4J提供了統一的記錄日誌介面,對不同的日誌系統的具體實現進行了抽象化,只要按照其提供的方法記錄即可,最終的日誌格式,記錄級別,輸出方式等通過繫結的具體日誌系統來實現。
語法:private static final logger Logger=loggerFactory.getLogger(類名.class)
Logger.info("字串{}",變數) SLF4J支援{}作為佔位符
二:程式入口
什麼是程式入口?如果你自己寫了main方法,那麼main方法就是程式入口。但是一個完整的java程式是沒有main方法的。所以當你的專案中沒有main方法時,啟動tomcat時,執行tomcat中的main方法作為入口,然後等請求過來時,tomcat接受請求,直接從專案檔案中把那個沒有主函式的應用接進來,執行其中的方法。相當於只有一個main方法,其他都是等請求過來的時候,根據請求呼叫的相應方法。
三:判斷兩時間先後的方法
1.Date a;Date a1; 可以直接進行比較
if(a.before(a1)){如果a<a1,如何}else{如a>a1,如何}
Date a=new Date();Date a1=new Date();
if(a.before(a1)) {
System.out.println("輸出a<a1");
}else {
System.out.println("輸出a>a1");
}
2.運用Date.getTime();返回該時間到1970年之間的毫秒數
Date date =weldList.get(0).getCreateDate(); Date date1 =weldList.get(1).getCreateDate(); if (date.getTime() > date1.getTime()) { System.out.println("dt1 在dt2前"); } else if(date.getTime() < date1.getTime()) { System.out.println("dt1在dt2後"); }
3.運用Date與String型別間的轉換,轉化為字串後在做比較
Date a=new Date();
Date a1=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("YYYY-MM-dd HH:mm:SS");
String aa=sdf.format(a);
String aa1=sdf.format(a1);
if(aa.compareTo(aa1)<0) {
System.out.println("aa<aa1,如何");
}else {
System.out.println("aa>aa1,如何");
}
字串轉化為時間
String b="2018-9-30 10:42:256";
SimpleDateFormat sdf=new SimpleDateFormat("YYYY-MM-dd HH:mm:SS");
Date a=sdf.parse(b);
System.out.println(a);
輸出資料:
Sun Dec 31 10:42:00 CST 2017
四:時間日曆的操作
1.如何根據一個時間獲取另一個時間
Date a=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("YYYY-MM-dd HH:mm:SS");
Calendar c=Calendar.getInstance();//用來操作日曆時間欄位的抽象類
c.setTime(a);
c.add(c.YEAR, -1);
Date b=c.getTime();//時間型別時間
String b1=sdf.format(b);//字串型別時間
System.out.println("輸出a:"+a);
System.out.println("輸出b1:"+b1);
輸出資料:輸出a:Tue Nov 13 10:52:06 CST 2018 輸出b1:2017-11-13 10:52:971
通過這種方式 可以對年月日時分秒進行時間修改操作
2.運用Calendar計算時間
計算2017年8月的天數
Calendar c=Calendar.getInstance();//用來操作日曆時間欄位的抽象類
int year=2017;
int month=8;
c.clear();//對日曆時間值進行初始化
c.set(c.YEAR, year);//設定日曆年份
c.set(c.MONTH, month-1);//設定日曆月份,預設一月為0月
int day=c.getActualMaximum(c.DAY_OF_MONTH);
System.out.println("輸出:"+day);
輸出天數:31
計算2018年9月19號是該年或該月的第幾個星期
int year=2018;
int month=9;
int day=19;
c.clear();//對日曆時間值進行初始化
c.set(c.YEAR, year);//設定日曆年份
c.set(c.MONTH, month-1);//設定日曆月份,預設一月為0月
c.set(c.DAY_OF_MONTH,19);//設定日曆天數
int num=c.get(c.WEEK_OF_YEAR);
System.out.println("設定時間是該年的第幾個星期:"+num);
int num1=c.get(c.WEEK_OF_MONTH);
System.out.println("設定時間是該月的第幾個星期:"+num1);
輸出資料:設定時間是該年的第幾個星期:38
設定時間是該月的第幾個星期:4
五:java基礎筆記
1.List,set 實現了collection 介面的子介面,map是另一個集合的介面。
List中的元素 有序 可重複 可為空;
set中的元素 無序 不重複 只能有一個空元素(可用於去重複)
map中的元素 無序 鍵不重複值可重複 可有一個空鍵多個空值
List中包含 ArrayList LinkedList
set中包含 HashSet LinkedHashSet TreeSet SortedSet等
map中包含 HashMap TreeMap WeakHashMap LinkedHashMap 等
2.String 字串常量 是不可變的,當對String進行改變時,等同於生成了一個新的String物件,然後指向新的String物件,所以如果需要經常的去修改字串內容時,不要用String,因為當記憶體中無用引用過多時,JVM的GC(垃圾處理機制)就會啟動導致速度變慢。
StringBuffer 字串常量(執行緒安全)是對字元本身進行操作,當字元拼接時String快於StringBuffer;當字串拼接時StringBuffer快於String
用法:StringBuffer a=new StringBuffer ();
a.append();這個會將拼接的字元直接放在末尾
a.insert(1,2);1的位置是拼接字元的位置 2是需要拼接的字元
StringBuilder 字串常量(非執行緒安全)是5.0新增的 用於單執行緒 方法與StringBuffer相同 但是速度更快
3.Arrays類的使用
3.1 fill(填充陣列)
int []arr=new int[5];
Arrays.fill(arr, 2);
給陣列內所有值賦值為2
int []arr=new int[5];
Arrays.fill(arr,1,3,8);
給第一位到第三位賦值為8 輸出結果[0,8,8,0,0] 不包含第三位 (陣列位數是 0 1 2 3 4)
3.2 sort(陣列元素排序) 從小到大
Arrays.sort(陣列);正常排序
Arrays.sort(陣列,1,3);陣列中的第一位到第三位進行排序
3.3 equals(比較陣列元素是否相等)
int []arr= {1,2,3};
int []arr1={1,2,3};
Arrays.equals(arr, arr1);//返回ture 它們比的是陣列內的元素
arr.equals(arr1);//返回false 因為它們比較的是兩個物件的地址
Arrays.equals重寫了equals方法
4.正則表示式
定義一個正則表達書 var a=正則;
a.test(字串);如果字串的內容滿足正則規則,則返回true,否則返回false
字串.match(正則):在字串中搜索符合規則的內容,成功則返回內容,格式位陣列。失敗則返回null
再JS中運用時,不能用“ ”,要寫在/ / 之間