Java之Object類和常用的API

来源:https://www.cnblogs.com/wadmwz/archive/2018/07/11/9292611.html
-Advertisement-
Play Games

Object類和常用的API 學習過程中的筆記,涉及到Objetc中的equals方法和toString方法,日期類Date,日曆類Calendar,日期格式化類SimpleDateFormat以及基本數據類型和封裝類的拆箱和裝箱,還有String與基本數據類型的轉換.有錯誤還望諒解 Object類 ...


Object類和常用的API

學習過程中的筆記,涉及到Objetc中的equals方法和toString方法,日期類Date,日曆類Calendar,日期格式化類SimpleDateFormat以及基本數據類型和封裝類的拆箱和裝箱,還有String與基本數據類型的轉換.有錯誤還望諒解

Object類

概述

java.lang.Object 類是Java語言中的根類,即所有類的父類。它中描述的所有方法子類都可以使用。在對象實例化的時候,最終找的父類就是Object。如果一個類沒有特別指定父類, 那麼預設則繼承自Object類。Object類當中包含的方法有11個,常用的有兩個:

  • public String toString():返回該對象的字元串表示.
  • public boolean equals(Object obj):指示其他對象是否與此對象相等.

toString方法

toString方法返回該對象的字元串表示,其實該字元串內容就是對象的類型+@+記憶體地址值。

由於toString方法返回的結果是記憶體地址,而在開發中,經常需要按照對象的屬性得到相應的字元串表現形式,因此也需要重寫它。

重寫toString方法
@Override
public String toString() {
    return "Person{" +
            "name='" + name + '\'' +
            ", age=" + age +
            '}';
}

我們在使用輸出語句輸出對象名的時候預設調用toString()方法.

equlas()方法

調用成員方法equals並指定參數為另一個對象,則可以判斷這兩個對象是否是相同的。這裡的“相同”有預設和自定義兩種方式。

預設地址比較

如果沒有覆蓋重寫equals方法,那麼Object類中預設進行== 運算符的對象地址比較,只要不是同一個對象,結果必然為false。

對象內容比較

如果希望進行對象的內容比較,即所有或指定的部分成員變數相同就判定兩個對象相同,則可以覆蓋重寫equals方法。

重寫equals()方法
@Override
    public boolean equals(Object o) {

        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Person person = (Person) o;
        return age == person.age &&
                Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {

        return Objects.hash(name, age);
    }

這段代碼充分考慮了對象為空、類型一致等問題,但方法內容並不唯一。

Objects類

在JDK7添加了一個Objects工具類,它提供了一些方法來操作對象,它由一些靜態的實用方法組成,這些方法是null-save(空指針安全的)或null-tolerant(容忍空指針的),用於計算對象的hashcode、返回對象的字元串表示形式、比較兩個對象。在比較兩個對象的時候,Object的equals方法容易拋出空指針異常,而Objects類中的equals方法就優化了這個問題。
源碼如下:

public static boolean equals(Object a, Object b) {
    return (a == b) || (a != null && a.equals(b));
}

日期時間類

Date類只需要註意三個方法:

  • Date() 分配一個 Date對象,並初始化它,以便它代表它被分配的時間,測量到最近的毫秒。 new Date();來創建當前時間
  • Date(long date) 分配一個 Date對象,並將其初始化為表示自稱為“時代”的標準基準時間以後的指定毫秒數,即1970年1月1日00:00:00 GMT。中國是東八區,所以時間要加八個小時
  • long getTime() 返回自1970年1月1日以來,由此 Date對象表示的00:00:00 GMT的毫秒 數 。 獲取時間的毫秒數.

SimpleDormatDate類也註意三個方法:

  • SimpleDateFormat(String pattern) 使用給定模式 SimpleDateFormat並使用預設的 FORMAT語言環境的預設日期格式符號。模式一般為("yyyy年MM月dd日 HH:mm:ss")
  • String format(Date date) 將日期格式化成日期/時間字元串。 將日期對象轉化為構造方法中固定模式的字元串.
  • Date parse(String source) 從給定字元串的開始解析文本以生成日期。 將String類型轉化為構造方法中固定模式的Date類型.

註意的是模式中的格式 : y代表年,M代表月,d代表天,H代表時,m代表分,s代表秒,S代表毫秒,嚴格區分大小寫.

Calendar類

日曆類是一個抽象類,使用如下:

// 計算某年某月有多少天,可以用來判斷瑞年,設置月份的時候註意點
// 使用方法獲取對象
Calendar calendar = Calendar.getInstance();
// 設置時間
Scanner in = new Scanner(System.in);
System.out.println("請輸入計算的時間的後一天(yyyy-MM-dd):");
String date = in.nextLine();
in.close();
String[] arr = date.split("-");
int year = Integer.valueOf(arr[0]);
int month = Integer.valueOf(arr[1]);
int day = Integer.valueOf(arr[2]);
calendar.set(year,month,day);
// 計算後一天
calendar.add(Calendar.DAY_OF_MONTH,-1);
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.MONTH));
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
// 獲取
System.out.println("美國一周從周日開始,您輸入的該天為周" + calendar.get(Calendar.DAY_OF_WEEK) + "在中國也就是周" + (calendar.get(Calendar.DAY_OF_WEEK) - 1));

註意的是美國的星期從周日開始,美國的月份從0月開始.常用的方法使get和set,還有getInstance.

System類

常用的方法有兩個:

  • static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 將指定源數組中的數組從指定位置複製到目標數組的指定位置。

    src - 源數組。srcPos - 源數組中的起始位置。 dest - 目標數組。 destPos - 目的地數據中的起始位置。 length - 要複製的數組元素的數量。

  • static long currentTimeMillis() 返回當前時間(以毫秒為單位)。

    這個方法一般用於程式的優化

    // 現有一個字元數組{'i','t','c','a','s','a'},請使用System類中的arraycopy()方法在控制台輸出“itcast”。
    // (提示:將[1]號數組元素複製到最後位置並覆蓋原有元素。)
    // 創建字元數組
    char[] charArr = {'i','t','c','a','s','a'};
    // 使用arraycopy方法
    System.arraycopy(charArr,1,charArr,charArr.length - 1, 1);
    System.out.println(charArr);

StringBuilder類

常用的方法:

  • StringBuilder() 構造一個沒有字元的字元串構建器,初始容量為16個字元。
  • StringBuilder(String str) 構造一個初始化為指定字元串內容的字元串構建器。
  • StringBuilder append(....) 將任意數據類型到序列中。返回當前對象.

    // 分析以下需求,並用代碼實現:
    // 1.定義數字字元串數組{"010","3223","666","7890987","123123"};
    // 2.判斷該數字字元串數組中的數字字元串是否是對稱(第一個數字和最後一個數字相等,第二個數字和倒數第二個數字是相等的,依次類推)的,並逐個輸出;
    // 3.如:010 是對稱的,3223 是對稱的,123123 不是對稱的;
    // 4.最終列印該數組中對稱字元串的個數。
    // 定義個數
    int sum = 0;
    // 定義數字字元串數組
    String[] strArr = {"010","3223","666","7890987","123123"};
    for (int i = 0; i < strArr.length; i++) {
    StringBuilder sb = new StringBuilder(strArr[i]);
    // 反轉自己
    sb.reverse();
    System.out.println(sb + ":" +strArr[i]);
    if(sb.toString().equals(strArr[i])){
    sum ++;
    System.out.println(strArr[i] + "是對稱的.");
    }else{
    System.out.println(strArr[i] + "是不對稱的.");
    }
    }
    System.out.println("該數組中對稱字元串的個數為:" + sum);

裝箱和拆箱

基本數據類型 引用數據類型 常用的屬性 常用的方法
byte Byte static byte MAX_VALUE : Byte類型的最大值
static byte MIN_VALUE : Byte類型的最小值
static byte parseByte(String s) 將字元串參數解析為帶符號的十進位 byte 。
static String toString(byte b) 返回一個新的 String對象,代表指定的 byte 。
short Short static short MAX_VALUE:short類型的最大值
static short MIN_VALUE:short類型的最小值
static short parseShort(String s) 將字元串參數解析為帶符號的十進位 short 。
static String toString(short s) 將字元串參數解析為帶符號的十進位 short 。
int Integer static int MAX_VALUE:int類型的最大值
static int MIN_VALUE:int類型的最小值
static int parseInt(String s):將字元串參數解析為帶符號的十進位整數。
static String toString(int i):返回一個 String指定整數的 String對象。
long Long static long MAX_VALUE:long類型的最大值
static long MIN_VALUE:long類型的最小值
static long parseLong(String s):將字元串參數解析為帶符號的十進位 long 。
static String toString(long i):返回 String表示指定對象 long 。
float Float static float MAX_VALUE:long類型的最大值
static float MIN_VALUE:long類型的最小值
static float parseFloat(String s) 返回一個新 float初始化為指定的代表的值 String ,如通過執行 valueOf類的方法 Float 。
static String toString(float f) 返回 float參數的字元串 float形式。
double Double static double MAX_VALUE:double類型的最大值
static double MIN_VALUE:double類型的最小值
static double parseDouble(String s) 返回一個新 double初始化為指定的代表的值 String ,如通過執行 valueOf類的方法 Double 。
static String toString(double d) 返回 double參數的字元串 double形式。
char Charcter static char MIN_VALUE:該欄位的常數值是 char '\u0000' 。
static char MAX_VALUE:該欄位的常數值是 char類型的 '\uFFFF' 。
可以使用String類中的方法char[] toCharArray() 將此字元串轉換為新的字元數組。-> 不屬於本章內容
static String toString(char c) 返回一個 String對象,表示指定的 char 。
boolean Boolean static Boolean FALSE : Boolean對象對應於原始值 false 。
static Boolean TRUE : Boolean對象對應於原始值 true 。
static boolean parseBoolean(String s) 將字元串參數解析為布爾值。如果s為true,true不區分大小寫時,返回為true,其餘全部返回false.
static String toString(boolean b) 返回一個 String指定布爾值的 String對象。

基本數據類型和引用數據類型,基本數據類型是不能調用方法的,而引用數據類型可以創建對象調用方法.
基本數據類型和包裝類型之間存在自動裝箱和拆箱.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 相信看過 每天學點SpringCloud(一):簡單服務提供者消費者調用的同學都發現了,在最後消費者調用提供者的時候把提供者的地址硬編碼在了代碼中,這樣的方式肯定是不行的,今天,我們就是要Eureka來解決這個問題 創建Eureka服務 1.我們在原先項目的基礎上再新建一個項目cloud-demo- ...
  • 微服務 將整體功能按著模塊劃分成多個獨立的單元,這些單元可以獨立部署,它們之前通過輕量級的web api方式進行通訊,對於微服務框架來說,最流行的就是springcloud和Service Fabric,前者是java開發,後者是.net的產品,今天主要介紹一下springcloud! 參考文章:h ...
  • 系統介紹: 1.系統採用主流的 SSM 框架 jsp JSTL bootstrap html5 (PC瀏覽器使用) 2.springmvc +spring4.3.7+ mybaits3.3 SSM 普通java web(非maven, 附贈pom.xml文件) 資料庫:mysql 3.開發工具:my ...
  • 基於.net core 的微服務,網上很多介紹都是千篇一律基於類似webapi,通過http請求形式進行訪問,但這並不符合大家使用習慣.如何像形如[ GetService<IOrderService>().SaveOrder(orderInfo)]的方式, 調用遠程的服務,如果你正在為此苦惱, 本文 ...
  • 大型網站架構從來都不是一個預先定義的架構,而是一個演進式的架構。很少有一個網站從建站開始,就能夠因具備大型網站的所有屬性而一成不變的,從最簡單的LAMP架構,再到基於IOE的大型集中式應用架構,再演變成時下的分散式應用架構,隨著網站用戶規模的擴大,架構也在不斷演進。從實體機到虛擬機再到當前流行的Do... ...
  • 最近開始學習SpringCloud,在此把我學習的過程記錄起來,跟大家分享一下,一起學習。想學習SpringCloud的同學趕快上車吧。 本次學習使用得SpringBoot版本為2.0.3.RELEASE,SpringCloud版本為Finchley.RELEASE 創建父Maven工程 首先我們創 ...
  • 在我的理解中,面向對象就是一種萬物皆對象的編程思想,就是把現實世界中所有的事物都當做對象來看待,而每一個對象可以看成是一個事物的實例,面向對象是以對象為中心,以消息為驅動,所以程式=對象+消息; 面向對象有三大特征:封裝 繼承 多態 封裝:將屬性和行為抽象成一個類,將其屬性私有化,行為公開化,提高了 ...
  • 搭建WEB項目過程中,哪些點需要註意: 1、技術選型: 前端:freemarker、vue 後端:spring boot、spring mvc 2、如何包裝返回統一結構結果數據? 首先要弄清楚為什麼要包裝統一結構結果數據,這是因為當任意的ajax請求超時或者越權操作時,系統能返回統一的錯誤信息給到前 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...