日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java----java工具包

發布時間:2024/10/12 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java----java工具包 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • System:
  • Runtime:
  • Random:
  • Scanner:
  • Arrays:
  • MessageFormat:
  • Math:
  • 日期:
  • Comparable:
  • cloneable接口:
  • 數字處理:
  • MD5加密:
  • lambda表達式:
  • RandomAccessFile:
  • Properties:
  • StringUtils:

  

?System:

System.out.println(System.currentTimeMillis());//從1970年開始,打印時間戳格式的時間 System.exit(0);//0表示正常對出

?

?Runtime:

Runtime rt = Runtime.getRuntime(); System.out.println("處理器數量:"+rt.availableProcessors()); System.out.println("JVM總內存數:"+rt.totalMemory()); System.out.println("JVM空閑內存數:"+rt.freeMemory()); System.out.println("JVM可用最大內存數:"+rt.maxMemory());try {rt.exec("notepad"); //調用其他的應用程序 } catch (IOException e) {e.printStackTrace(); }

  

?

?Random:

生成隨機數

import java.util.Random; public class Demo {public static void main(String[] args){Random r = new Random();//如果給一個固定的數字,則生成的隨機數不變System.out.print(r.nextInt(50)); //不包含50} }

  

?Scanner:

鍵盤輸入

//類似 python 中的 input import java.util.Scanner;; public class Demo {public static void main(String[] args) {Scanner input = new Scanner(System.in);System.out.println("輸入一個整數")int x = input.nextInt(); //input.next() 輸入一個字符串System.out.println(x); //0 } }

  

?Arrays:  

二分法查找

import java.util.Arrays; public class Demo {public static void main(String[] args){int[] num = {1,2,3,4};int index = Arrays.binarySearch(num, 4); //使用這個方法之前必須手動對數據進行排序。否則可能返回(-2):表示為找到System.out.println(index);} }

原樣返回一個數組

import java.util.Arrays; public class Demo {public static void main(String[] args){int[] num = {1,2,3,4};System.out.println(Arrays.toString(num));} }

快速排序

comparable:可以實現自定義排序

import java.util.Arrays; public class Demo {public static void main(String[] args){int[] num = {1,5,2,3,4};Arrays.sort(num);System.out.println(Arrays.toString(num));} }

數組的copy

import java.util.Arrays; public class Demo {public static void main(String[] args){int[] num = {1,5,2,3,4};int[] num1 = Arrays.copyOf(num, 8); //實現方式為System.arraycopySystem.out.println(Arrays.toString(num1)); //[1, 5, 2, 3, 4, 0, 0, 0]num = Arrays.copyOf(num, 3);System.out.println(Arrays.toString(num)); //[1, 5, 2]} }

使用System.arraycopy 進行數組的復制

import java.util.Arrays; public class Demo {public static void main(String[] args){int[] num1 = {1,2,3};int[] num2 = new int[num1.length];System.arraycopy(num1, 0, num2, 0, num1.length);System.out.print(Arrays.toString(num2));} }

判斷兩個數組是否相等

import java.util.Arrays; public class Demo {public static void main(String[] args){int[] num1 = {1,2,3};int[] num2 = {2,3};System.out.println(Arrays.equals(num1, num2));} }

填充數組

import java.util.Arrays; public class Demo {public static void main(String[] args){int[] num1 = {1,2,3};Arrays.fill(num1, 0);System.out.println(Arrays.toString(num1));} }

  

?MessageFormat:

格式化文本

import java.text.MessageFormat; public class Demo {public static void main(String[] args) {String s = "歡迎{0}";s =MessageFormat.format(s, "小明");System.out.println(s); } }

?String.format

public class T {public static void main(String[] args) {test();}public static void test(){String s = "xx%s";String str = String.format(s, "sdf");System.out.println(str);} }

  

?Math:

import static java.lang.Math.floor; //靜態導入 public class Demo {public static void main(String[] args) {System.out.println(Math.abs(-1)); //去絕對值System.out.println(Math.random());//取(0,1)的double數System.out.println(Math.round((Math.random()*100)));//將一個double數取整System.out.println(Math.sqrt(2));//取根號2;System.out.println(Math.round(1.5));//2System.out.println(floor(1.5));//1.0} }

 

?日期:

SimpleDateFormat 使用

?

import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; public class Demo {public static void main(String[] args) {DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss SSS");String s = df.format(new Date());//String s = df.format(343423);System.out.println(s);} }

?

calendar使用

import java.util.Calendar; public class Demo {public static void main(String[] args) {Calendar c = Calendar.getInstance();int year = c.get(Calendar.YEAR);int day = c.get(Calendar.DAY_OF_MONTH);int day1 = c.get(Calendar.DAY_OF_YEAR);System.out.println(year+","+day+","+day1);} }

Date 使用

import java.util.Date; public class Demo {public static void main(String[] args) {Date d = new Date();System.out.println(d); //Thu Apr 11 14:07:40 CST 2019} }

  

?Comparable:

使用Comparable接口實現對象之間排序

package com.zy; import java.util.Arrays; public class Demo {public static void main(String[] args) {Dog[] dog = {new Dog("花花",40),new Dog("天天",20)};Arrays.sort(dog);System.out.println(Arrays.toString(dog));} }class Dog implements Comparable<Dog>{private String name;private int age;public Dog(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return "Dog [name=" + name + ", age=" + age + "]";}@Overridepublic int compareTo(Dog o) {// TODO Auto-generated method stubreturn this.age-o.age;} }

如果對源碼不修改的話使用:Comparator接口

package com.zy; import java.util.Arrays; import java.util.Comparator; public class Demo {public static void main(String[] args) {Dog[] dog = {new Dog("花花",40),new Dog("天天",20)};Arrays.sort(dog,new DogComparator());System.out.println(Arrays.toString(dog));} }class Dog{private String name;private int age;public Dog(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return "Dog [name=" + name + ", age=" + age + "]";}public int getAge() {return age;} }class DogComparator implements Comparator<Dog>{@Overridepublic int compare(Dog o1, Dog o2) {return o1.getAge()-o2.getAge();}}

  

?cloneable接口:

對象的克隆

import java.util.Arrays; import java.util.Comparator; public class Demo {public static void main(String[] args) {Dog dog1 = new Dog("花花",10);try {Dog dog2 = (Dog) dog1.clone();System.out.println(dog1);System.out.println(dog2);} catch (CloneNotSupportedException e) {// TODO Auto-generated catch blocke.printStackTrace();}} }class Dog implements Cloneable{private String name;private int age;public Dog(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return "Dog [name=" + name + ", age=" + age + "]";}@Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();} }

  

?數字處理:

import java.math.BigDecimal; import java.math.BigInteger; import java.util.Arrays; public class Demo {public static void main(String[] args) {//大整數運算String v1 = "8242343242343";String v2 = "3242432424342";BigInteger b1 = new BigInteger(v1);BigInteger b2 = new BigInteger(v2);System.out.println(b1.add(b2));System.out.println(b1.subtract(b2)); //減法System.out.println(b1.multiply(b2));System.out.println(b1.divide(b2)); //取余(/)System.out.println(b1.remainder(b2)); //取模(%)System.out.println(Arrays.toString(b1.divideAndRemainder(b2))); //返回一個數組//小數運算String v3 = "713.123213123";String v4 = "2";BigDecimal b3 = new BigDecimal(v3); BigDecimal b4 = new BigDecimal(v4);System.out.println(b3.add(b4));System.out.println(b3.subtract(b4)); //減法System.out.println(b3.multiply(b4));System.out.println(b3.divide(b4)); //取余(/)可能會報錯。原因除不盡} }

數字格式化

import java.text.DecimalFormat; public class Demo {public static void main(String[] args) {double x = 423.64634324;//測試結果 #和0 的結果一樣System.out.println(new DecimalFormat("0").format(x)); //424; 取整數(四舍五入)System.out.println(new DecimalFormat("0.00").format(x)); //42364.63;保留兩位有效數字(四舍五入)System.out.println(new DecimalFormat("0.00%").format(x)); //42364.63%System.out.println(new DecimalFormat("#").format(x)); //424;保留全部整數,和0效果一樣System.out.println(new DecimalFormat("#.##").format(x)); //42364.63System.out.println(new DecimalFormat("#.##%").format(x)); //42364.63%//區別System.out.println(new DecimalFormat("000000").format(x)); //000424System.out.println(new DecimalFormat("######").format(x)); //424long t = 2324324;System.out.println(new DecimalFormat("000,000").format(t)); //2,324,324System.out.println(new DecimalFormat("###,###").format(t)); //2,324,324} }

  

?MD5加密:

需要配合Base64使用,加密成Base64字符串格式

import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Base64; public class Demo {public static void main(String[] args) {try {MessageDigest md = MessageDigest.getInstance("MD5");String password = "qwert";byte[] bytes = md.digest(password.getBytes()); //md5加密后變成了數組的格式String str = Base64.getEncoder().encodeToString(bytes);//通過Base64加密成字符串System.out.println(str); //o4S2Rj/CFqX47LZnD4ZFag==} catch (NoSuchAlgorithmException e) {e.printStackTrace();}} }

生成哈希值

public class T {public static void main(String[] args) {try {MessageDigest md = MessageDigest.getInstance("MD5");md.update("sss".getBytes());// digest()最后確定返回md5 hash值,返回值為8位字符串。因為md5 hash值是16位的hex值,實際上就是8位的字符// BigInteger函數則將8位的字符串轉換成16位hex值,用字符串來表示;得到字符串形式的hash值//一個byte是八位二進制,也就是2位十六進制字符(2的8次方等于16的2次方)String s = new BigInteger(1, md.digest()).toString(16);System.out.println(s);} catch (NoSuchAlgorithmException e) {e.printStackTrace();}} }

maven中依賴的一個jar包(具體不太清楚了)

DigestUtils.md5DigestAsHex("1111".getBytes())

?jar包:?http://maven.ibiblio.org/maven2/commons-codec/commons-codec/1.6/

System.out.println(DigestUtils.md5Hex("111".getBytes()))

  

?lambda表達式:

lambda表達式的實現:說明了java承認函數式編程

如果需求是定義了一個接口,需要創建該接口的實現類,重寫接口的方法,而lambda可以簡化了這種寫法

lambda 不會生成class文件

接口只能有一個(抽象方法)-->函數式接口

1.8之后默認方法可以加,靜態方法可以添加

public class Demo {public static void main(String[] args) { //無參使用Test t = ()->{System.out.println("嗨");};t.eat();//有參使用 String x 中String可以省略Test2 t2 = (String x)->{System.out.println("我是"+x);};t2.eat("小名");//待返回值Test3 t3 = ()->{System.out.println("Test3");return 10;};t3.eat();//可以簡寫,如果只有一句代碼,就是返回值的話;直接簡寫即可,不能加return,如果加return必須加上{}Test3 t4 = ()->10;System.out.println(t4.eat());} } interface Test{public void eat();//只能有一個接口 } interface Test2{public void eat(String x);//只能有一個接口 } interface Test3{public int eat();//只能有一個接口 }

?

四大基礎函數接口

函數接口,你可以理解為對一段行為的抽象,簡單點說可以在方法就是將一段行為作為參數進行傳遞,這個行為呢,可以是一段代碼,也可以是一個方法,那你可以想象在java8之前要將一段方法作為參數傳遞只能通過匿名內部類來實現,而且代碼很難看,也很長,函數接口就是對匿名內部類的優化。
??雖然類庫中的基本函數接口特別多,但其實總體可以分成四類,就好像阿拉伯數字是無限多的,但總共就10個基本數字一樣,理解了這4個,其他的就都明白了。

?

?

1、Customer接口

Consumer?接口翻譯過來就是消費者,顧名思義,該接口對應的方法類型為接收一個參數,沒有返回值,可以通俗的理解成將這個參數'消費掉了',一般來說使用Consumer接口往往伴隨著一些期望狀態的改變或者事件的發生,例如最典型的forEach就是使用的Consumer接口,雖然沒有任何的返回值,但是卻向控制臺輸出了語句。

示例1:

import java.util.ArrayList; import java.util.List;public class Test {public static void main(String[] args) {List<String> list = new ArrayList<String>();list.add("7");list.add("2");list.add("3");//list.forEach((String s)->{System.out.println(s);});list.forEach(s->System.out.println(s));//簡寫list.forEach(System.out::println); //另一個中寫法,‘::’表示調用方法,此時的調用println方法,將s傳進去} }

示例2

?

public static void main(String[] args) {Consumer<String> printString = s -> System.out.println(s);printString.accept("helloWorld!");//控制臺輸出 helloWorld!}

?

2、Function接口

Function<T,R>

Funtion接口是對接受一個T類型參數,返回R類型的結果的方法的抽象,通過調用apply方法執行內容。

示例1;

public class Test {public static void main(String[] args) {functiontest();} public static void functiontest(){String x = strToUpper("dfs", s->s.toUpperCase()); //{s.toUpperCase();}不能這樣寫System.out.println(x);}public static String strToUpper(String str,Function<String, String> f){return f.apply(str);} }

示例2

?

public class Operation{/* 下面這個方法接受一個int類型參數a,返回a+1,符合我上面說的接受一個參數,返回一個值所以呢這個方法就符合Function接口的定義,那要怎么用呢,繼續看例子 */ public static final int addOne(int a){return a+1; }/* 該方法第二個參數接受一個function類型的行為,然后調用apply,對a執行這段行為 */ public static int oper(int a, Function<Integer,Integer> action){return action.apply(a); }/* 下面調用這個oper方法,將addOne方法作為參數傳遞 */ pulic static void main(String[] args){int x = 1;int y = oper(x,x -> addOne(x));//這里可以換成方法引用的寫法 int y = oper(x,Operation::addOne)System.out.printf("x= %d, y = %d", x, y); // 打印結果 x=1, y=2/* 當然你也可以使用lambda表達式來表示這段行為,只要保證一個參數,一個返回值就能匹配 */y = oper(x, x -> x + 3 ); // y = 4y = oper(x, x -> x * 3 ); // y = 3 } }

?

Supplier接口

Supplier?接口翻譯過來就是提供者,和上面的消費者相反,該接口對應的方法類型為不接受參數,但是提供一個返回值,通俗的理解為這種接口是無私的奉獻者,不僅不要參數,還返回一個值,使用get()方法獲得這個返回值

示例1:

import java.util.ArrayList; import java.util.List; import java.util.function.Supplier;public class Test {public static void main(String[] args) {suppliertest();} public static void suppliertest(){List li = getNum(10, ()->(int)(Math.random()*100));li.forEach(System.out::println);}public static List<Integer> getNum(int num,Supplier<Integer> sup){List<Integer> list = new ArrayList<>();for(int i=0;i<num;i++){list.add(sup.get()); //表示執行了10次sup.get()方法 等于(int)(Math.random()*100)}return list;} }

?示例2

?

Supplier<String> getInstance = () -> "HelloWorld!";System.out.println(getInstance.get());// 控偶值臺輸出 HelloWorld

?

Predicate接口

predicate<T,Boolean> 謂語接口,顧名思義,中文中的‘是’與‘不是’是中文語法的謂語,同樣的該接口對應的方法為接收一個參數,返回一個Boolean類型值,多用于判斷與過濾,當然你可以把他理解成特殊的Funcation<T,R>,但是為了便于區分語義,還是單獨的劃了一個接口,使用test()方法執行這段行為

示例1:

import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.Predicate;public class Test {public static void main(String[] args) {predicatetest();} public static void predicatetest(){//List<String> list = new ArrayList<>();//list.add("dd");//list.add("ddd");//list.add("ff");List<String> list = Arrays.asList("dd","ddd","ff");List<String> result = filter(list, (s)->s.contains("d"));System.out.println(result);}public static List<String> filter(List<String> list,Predicate<String> p){List<String> result = new ArrayList<>();for(String s:list){if(p.test(s)){ //測試是否符合要求; 需要有參數sresult.add(s);}}return result;} }

示例2

?

public static void main(String[] args) {Predicate<Integer> predOdd = integer -> integer % 2 == 1;System.out.println(predOdd.test(5));//控制臺輸出 true}  

關于lambda的限制

Java8中的lambda表達式,并不是完全閉包,lambda表達式對值封閉,不對變量封閉。簡單點來說就是局部變量在lambda表達式中如果要使用,必須是聲明final類型或者是隱式的final例如

int num = 123; Consumer<Integer> print = () -> System.out.println(num);

就是可以的,雖然num沒有被聲明為final,但從整體來看,他和final類型的變量的表現是一致的,可如果是這樣的代碼

int num = 123; num ++; Consumer<Integer> print = () -> System.out.println(num);

則無法通過編譯器,這就是對值封閉(也就是棧上的變量封閉)
如果上文中的num是實例變量或者是靜態變量就沒有這個限制。
看到這里,自然而然就會有疑問為什么會這樣?或者說為什么要這么設計。理由有很多,例如函數的不變性,線程安全等等等,這里我給一個簡單的說明

    • 為什么局部變量會有限制而靜態變量和全局變量就沒有限制,因為局部變量是保存在棧上的,而眾所周知,棧上的變量都隱式的表現了它們僅限于它們所在的線程,而靜態變量與實例變量是保存在靜態區與堆中的,而這兩塊區域是線程共享的,所以訪問并沒有問題。
    • 現在我們假設如果lambda表達式可以局部變量的情況,實例變量存儲在堆中,局部變量存儲在棧上,而lambda表達式是在另外一個線程中使用的,那么在訪問局部變量的時候,因為線程不共享,因此lambda可能會在分配該變量的線程將這個變量收回之后,去訪問該變量。所以說,Java在訪問自由局部變量時,實際上是在訪問它的副本,而不是訪問原始變量。如果局部變量僅僅賦值一次那就沒有什么區別了。
    • 嚴格保證這種限制會讓你的代碼變得無比安全,如果你學習或了解過一些經典的函數式語言的話,就會知道不變性的重要性,這也是為什么stream流可以十分方便的改成并行流的重要原因之一。

?

?

Stream接口? (1.8 之后的新特性)

import java.util.stream.Stream;public class Test {public static void main(String[] args) {Stream<String> stream = Stream.of("good","good","study","day","day","up");//foreach//stream.forEach((s)->System.out.println(s)); //結束操作,不返任何東西//filter 過濾//stream.filter(s->s.length()>3).forEach(System.out::println);//中間操作;filter返回一個stream;//distinct//stream.distinct().forEach(System.out::println); //去重,中間操作//map,實現了Function接口,Function接口是需要傳遞一個函數;每一個元素都需要執行這個函數;然后生成一個新的集合//stream.map((s)->s.toUpperCase()).forEach(System.out::println);//reduce,steam中的兩個元素進行操作//Optional<String> op = stream.reduce((s1,s2)->s1.length()>s2.length()?s1:s2);//Optional<String> op = stream.reduce((s1,s2)->s1+s2);//System.out.println(op.get());//collect 將stream轉化成數組;//List<String> list = stream.collect(Collectors.toList());//list.forEach(System.out::println);//flatMap可以合并多和流;//Stream<List<Integer>> ss = Stream.of(Arrays.asList(1,2,3),Arrays.asList(4,5));//ss.flatMap(list->list.stream()).forEach(System.out::println);} }

@FunctionalInterface函數式接口注解

1、該注解只能標記在”有且僅有一個抽象方法”的接口上。

2、JDK8接口中的靜態方法和默認方法,都不算是抽象方法。

3、接口默認繼承Java.lang.Object,所以如果接口顯示聲明覆蓋了Object中方法,那么也不算抽象方法。

4、該注解不是必須的,如果一個接口符合”函數式接口”定義,那么加不加該注解都沒有影響。加上該注解能夠更好地讓編譯器進行檢查。如果編寫的不是函數式接口,但是加上了@FunctionInterface,那么編譯器會報錯。

// 正確的函數式接口 @FunctionalInterface public interface TestInterface { // 抽象方法 public void sub(); // java.lang.Object中的方法不是抽象方法 public boolean equals(Object var1); // default不是抽象方法 public default void defaultMethod(){ } // static不是抽象方法 public static void staticMethod(){ } }

  

?RandomAccessFile:

只可以對文件進行操作,當模式為r,文件不存在會報錯,當模式為rw,文件不存在會自動創建文件,文件存在不會覆蓋原文件;

對文件進行寫入操作是,必須有r模式,只有先有讀的權限,才能有寫的權限(rw)

示例:復制文件

import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile;public class Demo {public static void main(String[] args) throws IOException{run();}public static void run(){try {RandomAccessFile rf = new RandomAccessFile("C:\\Users\\zhengyan\\Desktop\\test1\\all.jpg", "r");RandomAccessFile wf = new RandomAccessFile("C:\\Users\\zhengyan\\Desktop\\test1\\new_all.jpg", "rw");byte bytes[] = new byte[1024];int len=-1;while((len=rf.read(bytes))!=-1){wf.write(bytes,0,len);}System.out.println("復制成功");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} }

  

?Properties:

使用環境:當代碼已經上傳的服務器后,如果需要對參數進行修改,而不需要對源代碼重新編譯,就會利用到配置文件,對配置文件進行修改,是不需要對源代碼重新編譯的

源代碼--->編譯(.class文件)--->打包上傳到服務器  

1、創建config.properties配置文件

username=admin password=123

2、代碼

import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Properties;public class Demo {private static String username;private static String password;public static void main(String[] args) throws IOException{readConfig();System.out.println(Demo.username);System.out.println(Demo.password);writeConfig("小明", "123456");//對配置文件寫入操作readConfig();System.out.println(Demo.username);System.out.println(Demo.password);}public static void readConfig(){Properties p = new Properties();try {//InputStream inStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("com\\zy\\config.properties"); //是有問題的InputStream inStream = new FileInputStream("src\\com\\zy\\config.properties");p.load(inStream);username = p.getProperty("username");password = p.getProperty("password");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public static void writeConfig(String username,String password){Properties p = new Properties();p.put("username", username);p.put("password", password);try {OutputStream out = new FileOutputStream("src\\com\\zy\\config.properties");p.store(out, "updata config"); //updata config是描述信息out.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} }

  

?StringUtils:

需要引入這個jar包

isBlank:“? ?”:false

isEmpty:“? ” :true

<dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId> </dependency>

  

轉載于:https://www.cnblogs.com/yanxiaoge/p/10650926.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的java----java工具包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。