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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java常见类

發布時間:2023/12/14 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java常见类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、包裝類

1.1 概述

概述:

  • 基本數據類型所對應的引用數據類型。
  • Object可統一所有數據,包裝類的默認值是null。
/**包裝類:byte short int long float double char booleanByte Short Integer Long Float Double Character Boolean*/ public static void main(String[] args) { Integer num1 = Integer.valueOf(100); // 反編譯的 -- Integer.valueOfInteger num2 = 100; System.out.println(num1 == num2); // 結果為false }

2.2 裝箱、拆箱

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

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

    • parseXXX()靜態方法(除了Character)。
    • valueOf()靜態方法。
  • 注意:需保證類型兼容,否則拋出NumberFormatException異常。

  • JDK 5.0之后,自動裝箱、拆箱。基本數據類型和包裝類自動轉換。

3.3 整數緩沖區

  • Java預先創建了256個常用的整數包裝類型對象。
  • 在實際應用當中,對已創建的對象進行復用。

面試題:分析以下輸出結果的原因。

public class TestInteger2 {public static void main(String[] args) {//面試題Integer integer1=new Integer(100);Integer integer2=new Integer(100);System.out.println(integer1==integer2); Integer integer3=Integer.valueOf(100);//自動裝箱Integer.valueOfInteger integer4=Integer.valueOf(100);System.out.println(integer3==integer4);//true Integer integer5=Integer.valueOf(200);//自動裝箱Integer integer6=Integer.valueOf(200);System.out.println(integer5==integer6);//false } }

二、String類

2.1 概述:

  • Java程序中的所有字符串文本(例如“abc”)都是此類的實例。

  • 字符串字面值是常量,創建之后不可改變。

  • 常用創建方式:

    • String str1 = “Hello”;
    • String str2 = new String(“World”);

2.2 常用方法:

方法名描述
public char charAt(int index)根據下標獲取字符
public boolean contains(String str)判斷當前字符串中是否包含str
public char[] toCharArray()將字符串轉換成數組。
public int indexOf(String str)查找str首次出現的下標,存在,則返回該下標;不存在,則返回-1
public int length()返回字符串的長度
public String trim()去掉字符串前后的空格
public String toUpperCase()將小寫轉成大寫
public boolean endsWith(String str)判斷字符串是否以str結尾
public String replace(char oldChar,char newChar)將舊字符串替換成新字符串
public String[] split(String str)根據str做拆分
public String subString(int beginIndex,int endIndex)在字符串中截取出一個子字符串

2.3 split():

打斷字符串 — 返回一個字符串數組

案例:將字符串打斷,轉換為對象,存入對象數組中(前端返回字符串數據,后端的加工)

1.創建對象類(便于訪問就不加訪問修飾符)

public class Student {String name;int age; @Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + "]";} }

2.操作

public class TestSplit {public static void main(String[] args) {// 字符串轉對象的思想(重點)String students = "name=張三豐,age=20;name=郭襄,age=10;name=華箏,age=6";String[] stustr = students.split(";"); // 分割每一條數據,返回字符串數組Student[] stus = new Student[stustr.length]; // 創建學生數組 // 打印分割的字符串數組 // for (String string : stustr) { // System.out.println(string); // } for (int i = 0; i < stustr.length; i++) {String s = stustr[i]; // 保存為字符串Student stu = new Student(); // 創建學生對象stu.name = s.split(",")[0].split("=")[1]; // 打斷后,個姓名賦值stu.age = Integer.parseInt(s.split(",")[1].split("=")[1]); // 打斷后,給年齡賦值stus[i] = stu; // 存到學生數組中}System.out.println(Arrays.toString(stus)); // 打印} }

2.4 可變字符串

  • 概念:可在內存中創建可變的緩沖空間,存儲頻繁改變的字符串。
  • Java中提供了兩個可變字符串類:
    • StringBuilder:可變長字符串,JDK5.0提供,運行效率快、線程不安全。
    • StringBuffer:可變長字符串,JDK1.0提供,運行效率慢、線程安全。
    • 這兩個類中方法和屬性完全一致。

常用方法:

方法名屬性
public StringBuilder append(String str)追加內容。
public StringBuilder insert(int dstOffset, CharSequence s)將指定 字符串插入此序列中。
public StringBuilder delete(int start, int end)移除此序列的子字符串中的字符。
public StringBuilder replace(int start, int end, String str)使用給定字符串替換此序列的子字符串中的字符。start開始位置、end結束位置。
public int length()返回長度(字符數)。

StringBuilder效率高于String。

三、正則表達式

正則表達式(Regular Expression)是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為"元字符")。

正則表達式使用單個字符串來描述、匹配一系列匹配某個句法規則的字符串。

四、大數值運算類

4.1 BigInteger

為什么使用:

? double是近似值存儲,和金錢相關的就不符合要求了,這是就需要使用BigInteger

特點:大,構造的時候要使用字符串構造

? 不能自動裝箱拆箱,意味著不能直接賦基本數據類型,必須要new

要調用方法來運算

add,substract multiply,divide

// 大數值運算 public class TestBig {public static void main(String[] args) {String str = "";for (int i = 1; i <= 100; i++) {str +=i;} BigInteger bi1 = new BigInteger(str);BigInteger bi2 = new BigInteger(str.substring(10)); // 大數值的運算 - 加減乘除System.out.println(bi1.add(bi2));System.out.println(bi1.subtract(bi2));System.out.println(bi1.multiply(bi2));System.out.println(bi1.divide(bi2));} }

4.2 BigDecemal

和BigInteger差不多

  • 位置:java.math包中。
  • 作用:精確計算浮點數。
  • 創建方式:BigDecimal bd=new BigDecimal(“1.0”)。
import java.math.BigDecimal; public class TestBigDecimal {public static void main(String[] args) {BigDecimal bd1 = new BigDecimal("0.09");BigDecimal bd2 = new BigDecimal("0.01");System.out.println(0.09 + 0.01);//0.09999999999999999System.out.println(bd1.add(bd2));//0.10} }

五、日期

5.1 Data類

  • Date表示特定的瞬間,精確到毫秒。
  • Date類中的大部分方法都已經被Calendar類中的方法所取代。
  • 時間單位
    • 1秒=1000毫秒
    • 1毫秒=1000微秒
    • 1微秒=1000納秒
Date date = new Date(); System.out.println(date.getTime()); // 運行結果: (1970-01-01 到現在的毫秒數)

5.2 SimpleDateFormat類

  • SimpleDateFormat是以與語言環境有關的方式來格式化和解析日期的類。
  • 進行格式化(日期 -> 文本)、解析(文本 -> 日期)。
字母日期或時間
y
M
d
H
m
s
S毫秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(sdf.format(System.currentTimeMillis())); // 2022-07-09 10:27:49

5.3 Calendar類

  • Calendar提供了獲取或設置各種日歷字段的方法。
  • protected Calendar() 構造方法為protected修飾,無法直接創建該對象。

常用方法:

方法說明
static Calendar getInstance()使用默認時區和區域獲取日歷
void set(int year,int month,int date,int hourofday,int minute,int second)設置日歷的年、月、日、時、分、秒。
int get(int field)返回給定日歷字段的值。字段比如年、月、日等
void setTime(Date date)用給定的Date設置此日歷的時間。Date-Calendar
Date getTime()返回一個Date表示此日歷的時間。Calendar-Date
void add(int field,int amount)按照日歷的規則,給指定字段添加或減少時間量
long getTimeInMillis()毫秒為單位返回該日歷的時間值
// CalendarCalendar c = Calendar.getInstance();System.out.println(c.getTime());// date.getTime()、System.currentTimeMillis()和c.getTime() System.out.println("今天是今年的第幾天:" + c.get(Calendar.DAY_OF_YEAR));System.out.println("今天是今年的第幾周:" + c.get(Calendar.WEEK_OF_YEAR));

六、Math類

6.1 Math

Math 類提供了一序列基本數學運算和幾何函數的方法。

Math類是final類,并且它的所有成員變量和成員方法都是靜態的。

math的常量:

public static final double E = 2.7182818284590452354; public static final double PI = 3.14159265358979323846;

math的方法:

Math內的所有方法均為靜態的。

方法描述
double sin(double a)角a(弧度)的正弦值
double cos(double a)角a(弧度)的余弦值
double pow(double a,double b)a的b的方法
double sqrt(double a)求平方根
int abs(int a)求絕對值
double ceil(double a)返回大于等于a的最小整數的double值
double floor(double a)返回小于等于a的最大整數的double值
int max(int a, int b)返回int型值a和b中的較大值
int min(int a, int b)返回int型值a和b中的較小值
int round(float a)四舍五入返回整數
double random()返回帶+的double值,該值大于等于0.0且小于1.0
// 部分列子 public class TestMath {public static void main(String[] args) {// Math類 -- 數學類System.out.println(Math.abs(Integer.MIN_VALUE)); // 絕對值 (最小值有問題 和int的范圍有關)System.out.println(Math.pow(2, 3));// 90是弧度 -- 度 = 弧度*π/180 System.out.println(Math.sin(90*Math.PI/180));System.out.println(Math.signum(0)); // 符號函數(了解)System.out.println(Math.round(1.2345));System.out.println(Math.random()); // (隨機的) 0-1之間的小數} }

6.2 靜態導入

想直接寫方法名或者變量名,則可以考慮使用靜態導入

語法:import static 包名.類名.*; //導入該類下的所有靜態方法和常量

// 靜態導入 import static java.lang.Math.random; public class TestStaticImport {public static void main(String[] args) {// 生成0-1之間的隨機數//使用靜態導入,可以直接使用導入的方法System.out.println(random()); } }

七、Random類

生成隨機數 (偽隨機)

偽隨機:

? 實際上這個隨機數的生成是由線性同余的算法確定,如果種子一樣,生成是數據是一樣的

// 無參構造 public Random() {this(seedUniquifier() ^ System.nanoTime()); } // 帶參構造 public Random(long seed) {if (getClass() == Random.class)this.seed = new AtomicLong(initialScramble(seed));else {// subclass might have overriden setSeedthis.seed = new AtomicLong();setSeed(seed);} } // 生成隨機數: public int nextInt(int bound) {if (bound <= 0)throw new IllegalArgumentException(BadBound);int r = next(31);//生成31位的隨機數int m = bound - 1;//100-1=99//01111 10000 if ((bound & m) == 0) // i.e., bound is a power of 2 r = (int)((bound * (long)r) >> 31);else {for (int u = r;u - (r = u % bound) + m < 0;u = next(31));}return r; }

結論:隨機數生成與隨機數種子相關,種子可以自己設置,也可以默認使用系統時間生成

八、Runtime類

Runtime代表Java程序的運行時環境,可以通過 getRuntime 方法獲取當前運行時。

? 應用程序不能自己創建Runtime對象,可以通過Runtime的靜態方法getRuntime()獲得Runtime對象。

Runtime類可以訪問jvm的相關信息,如處理器數量,內存信息等

public class TestRuntime {public static void main(String[] args) {Runtime rt = Runtime.getRuntime(); // // 核數,可以在操作系統中設置System.out.println("處理器數量:"+rt.availableProcessors());// 空閑的空間-已將拿到的沒有用完的空間 (剩余空間隨著對象的生成要減少)System.out.println("空閑內存:"+rt.freeMemory()); // 最大空間 (最大空間跟虛擬機參數有關)System.out.println("分配的最大內存:"+rt.maxMemory()); // 總空間 - 已經獲取的 (隨著對象的創建增加)System.out.println("已獲得的內存:"+rt.totalMemory()); } }

九、System類

System系統類,主要用于獲取系統的屬性數據和其他操作。

常用方法:

方法名描述
static void arraycopy(…)復制數組
static long currentTimeMillis()獲取當前系統時間,返回的是毫秒值
static void gc();建議JVM趕快啟動垃圾回收器回收垃圾
static void exit(int status)退出jvm,如果參數是0表示正常退出jvm,非0表示異常退出jvm。
// System.setOut(System.err);// 可以設置輸出類型 System.out.println("測試!"); // 輸出結果為黑色字體 System.err.println("測試!"); // 輸出結果為紅色字體 // 獲取當前系統時間 -- long System.out.println(System.currentTimeMillis()); // 獲取系統參數 Properties properties = System.getProperties(); for (Object key : properties.keySet()) {System.out.println(key+"-"+properties.getProperty(key.toString())); } 運行結果: java.specification.version-15 sun.cpu.isalist-amd64 sun.jnu.encoding-GBK java.class.path-E:\qf2201workspace\cdjava2206\cdjava2206-\bin java.vm.vendor-Oracle Corporation sun.arch.data.model-64 user.variant- java.vendor.url-https://java.oracle.com/ java.vm.specification.version-15 os.name-Windows 10 sun.java.launcher-SUN_STANDARD user.country-CN sun.boot.library.path-E:\java-c-sql\java\eclipse軟件\eclipse\plugins\org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_15.0.1.v20201027-0507\jre\bin sun.java.command-com.qf.cd2206.myday15_class2.classt.TestSystem jdk.debug-release sun.cpu.endian-little user.home-C:\Users\86138 user.language-zh java.specification.vendor-Oracle Corporation java.version.date-2020-10-20 java.home-E:\java-c-sql\java\eclipse軟件\eclipse\plugins\org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_15.0.1.v20201027-0507\jre file.separator-\ java.vm.compressedOopsMode-Zero based line.separator-java.vm.specification.vendor-Oracle Corporation java.specification.name-Java Platform API Specification user.script- sun.management.compiler-HotSpot 64-Bit Tiered Compilers java.runtime.version-15.0.1+9-18 user.name-86138 path.separator-; os.version-10.0 java.runtime.name-OpenJDK Runtime Environment file.encoding-GBK java.vm.name-OpenJDK 64-Bit Server VM java.vendor.url.bug-https://bugreport.java.com/bugreport/ java.io.tmpdir-C:\Users\86138\AppData\Local\Temp\ java.version-15.0.1 user.dir-E:\qf2201workspace\cdjava2206\cdjava2206- os.arch-amd64 java.vm.specification.name-Java Virtual Machine Specification sun.os.patch.level- java.library.path-E:\java-c-sql\java\eclipse軟件\eclipse\plugins\org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_15.0.1.v20201027-0507\jre\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;E:/java-c-sql/java/eclipse軟件/eclipse//plugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_15.0.1.v20201027-0507/jre/bin/server;E:/java-c-sql/java/eclipse軟件/eclipse//plugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_15.0.1.v20201027-0507/jre/bin;E:\HW\VMware\bin\;%CATALINA_HOME%\lib;%CATALINA_HOME%\bin;E:\JDKMAV\Java\jdk1.8.0_221\jre\bin;E:\JDKMAV\apache-maven-3.8.4-bin\apache-maven-3.8.4\bin;C:\Program Files (x86)\Common Files\Oracle\Java\javapath;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\windows\System32\OpenSSH\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;E:\互傳\EasyShare\x86\;E:\互傳\EasyShare\x64\;E:\node\;E:\Pycharm\Graphviz\bin\;E:\Redis\;C:\Users\86138\AppData\Local\Programs\Python\Python35\Scripts\;C:\Users\86138\AppData\Local\Programs\Python\Python35\;E:\JDKMAV\Java\jdk1.8.0_221\bin;E:\Python\Scripts\;E:\Python\;C:\Users\86138\AppData\Local\Microsoft\WindowsApps;E:\Pycharm\PyCharm Community Edition 2021.2.1\bin;;E:\JDKMAV\apache-maven-3.8.4-bin\apache-maven-3.8.4\bin;%CATALINA_HOME%\lib;%CATALINA_HOME%\bin;C:\Users\86138\AppData\Roaming\npm;GRAPHVIZ_DOT;E:\Pycharm\Graphviz\bin;;E:\java-c-sql\java\eclipse軟件\eclipse;;. java.vm.info-mixed mode java.vendor-Oracle Corporation java.vm.version-15.0.1+9-18 sun.io.unicode.encoding-UnicodeLittle java.class.version-59.0

十、 枚舉

枚舉(enum)全稱為 enumeration, 是 JDK 1.5 中引入的新特性。

10.1 語法:

public enum Color{//默認添加 public static final ColorRED,GREEN,BLUE; }

10.2 本質:

盡管枚舉看起來像是一種新的數據類型,實際上,枚舉就是一種受限制的類,并且具有自己的方法。創建自己的enum類時,這個類繼承自 java.lang.Enum。

public abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable{... }

枚舉的值是不會變的 – 封裝的思想

Grade.values()[0] = Grade.SENIOR; System.out.println(Grade.values()[0]); // LOWER

創建一個枚舉:

public enum Grade { // 默認繼承了Enum, 因為java是單繼承的,所以枚舉不能再繼承了,只能實現接口LOWER,MIDDLE,SENIOR; // //默認添加 public static final Grade }

反編譯:

public final class Grade extends Enum {public static final Grade LOWER;public static final Grade MIDDLE;public static final Grade SENIOR;private static final Grade ENUM$VALUES[];// 是一個私有的構造 - 所以枚舉不能實例化對象private Grade(String s, int i){super(s, i);}public static Grade[] values(){Grade agrade[];int i;Grade agrade1[];System.arraycopy(agrade = ENUM$VALUES, 0, agrade1 = new Grade[i = agrade.length], 0, i);return agrade1;} //把一個字符串轉為對應的枚舉類型public static Grade valueOf(String s){return (Grade)Enum.valueOf(com/qf/cd2206/myday15_class2/enu/Grade, s);}static //初始化枚舉對象的{LOWER = new Grade("LOWER", 0);MIDDLE = new Grade("MIDDLE", 1);SENIOR = new Grade("SENIOR", 2);ENUM$VALUES = (new Grade[] {LOWER, MIDDLE, SENIOR});} }

枚舉的初始化過程
1、在靜態代碼塊中new 自己的對象,構造函數使用自身的私有構造
2、枚舉類會自動生成values方法,這個方法返回枚舉類中所有元素的數組的拷貝。

10.3 特點:

  • 枚舉就是一個受限制的類,默認繼承Enum
  • 枚舉的第一行必須定義該枚舉類型的對象
  • 枚舉類型對象默認添加: public static final 類型
  • 枚舉沒有繼承明確類(自定義枚舉類默認繼承Enum,Enum默認繼承Object)
  • 枚舉類不能被繼承
  • 枚舉里可以有構造方法、成員方法、靜態方法、抽象方法
  • 枚舉可以實現接口
  • 枚舉里沒有定義方法,可以在最后一個對象后面加逗號、分號或什么都不加

10.4 優勢:

  • 增強代碼可讀性

  • 枚舉型可直接與數據庫交互

  • switch語句優勢

  • 編譯優勢

(枚舉類編譯時,沒有把常量值編譯到代碼中,即使常量值發生改變,也不會影響引用常量的類 )

  • 將常量組織起來,統一管理
  • 去除equals兩者判斷 由于常量值地址唯一,使用枚舉可以直接通過“==”進行兩個值之間的對比,性能會有所提高

10.5 方法:

方法名解釋
Enum.valueOf(Class enumType, String name)根據字符串找到該枚舉類中的對象
public static void values()獲取該枚舉類對象數組
public static void valueOf(String args0)根據字符串獲取該枚舉類中的對象
public final String name()獲取該枚舉對象名字
public final Class getDeclaringClass()獲取枚舉對象的枚舉類型相對應的Class對象
public final int hashCode()獲取該枚舉對象的hash值
public final int compareTo(E o)兩個枚舉對象進行比較
public final boolean equals(Object other)比較兩個枚舉對象是否相同

根據字符串獲得枚舉

Grade sen = Grade.valueOf("SENIOR"); System.out.println(sen); // SENIOR

10.6 案例分析 – 狀態碼

// 這個枚舉的名字叫數據結果--編碼--描述 public enum DataResult { SUCCESS(0,"成功"),ERR1(1,"page not found"),ERR2(2,"server internal error"); Integer code; // 錯誤編碼String msg; // 錯誤信息 private DataResult(Integer code, String msg) {this.code = code;this.msg = msg;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;} } // 這個枚舉的名字叫數據結果--編碼--描述 public enum DataResult { SUCCESS(0,"成功"),ERR1(1,"page not found"),ERR2(2,"server internal error"); Integer code; // 錯誤編碼String msg; // 錯誤信息 private DataResult(Integer code, String msg) {this.code = code;this.msg = msg;}public Integer getCode() {return code;}public void setCode(Integer code) {this.code = code;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;} } DataResult dr = DataResult.SUCCESS; System.out.println(dr.name()); // SUCCESS System.out.println(dr.msg); // 成功 應用,返回狀態碼

總結

以上是生活随笔為你收集整理的Java常见类的全部內容,希望文章能夠幫你解決所遇到的問題。

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