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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

零基础学习java------day11------常用API

發(fā)布時間:2023/12/2 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 零基础学习java------day11------常用API 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

API概述

API(application Programming Interface, 應用程序編程接口),是一些預先定義的函數(shù)。目的是提供應用程序與開發(fā)人員基于某軟件或硬件得以訪問一組例程的能力,而又無需訪問源碼,或理解內(nèi)部工作機制的細節(jié)

比如我需要在一個程序里面嵌入語音識別交互功能,那么這個功能如果讓我們自己從零開始實現(xiàn),肯定是不現(xiàn)實的,所以市場上面就出現(xiàn)了提供這個語音識別功能的公司,這些公司會提供給應用程序編程的接口,大家把這些類稱為Xxx Voice API. 我們只需要調(diào)用相應的方法就可以實現(xiàn)我們想做的事情,底層實現(xiàn)不需要我們關注。本章涉及的java API指的就是JDK中提供的各種功能的java類

一? ?Object

1. 構造方法:

  public Object()

2. 成員方法

2.1? 方法介紹

  public int hashCode()? ?返回對象的hashCode值(默認地址值根據(jù)特定算法運算得到的一個整數(shù)值),可重寫(源碼不可見,此方法是用native修飾,用native修飾的方法一般都是用其他語言實現(xiàn)(C),效率高)

  public final Class getClass()? ?返回字節(jié)碼對象(Class對象),里面包含了類中的所有信息,不能被重寫(此方法使用final修飾)

  public String toString():? 返回對象的字符串形式(默認是全類名+地址值),可重寫

  public boolean equals(Object obj):? ?判斷兩個對象是否是同一個對象,默認用==實現(xiàn),可重寫

1. hashCode

  一般用hashCode判斷兩個對象是不是同一個對象,如果hashCode不相等,則肯定不是一個對象,如果hashCode相等,則一定是同一個對象

public class ObjectClass {public static void main(String[] args) {Person p = new Person();Person p1 = new Person();System.out.println(p.hashCode()); //804564176System.out.println(p1.hashCode()); // 1421795058 } } class Person{String name; }

可見對象p和對象p1不是同一個對象(注釋為得到的hashCode值)

?

2. getClass:

其余代碼同上

Class clazz = p.getClass(); // 獲取p的字節(jié)碼對象 Person類的字節(jié)碼對象 System.out.println(clazz); // class com._51doit.javase.day11.Person System.out.println(clazz.getSimpleName()); // Person System.out.println(clazz.getName()); // com._51doit.javase.day11.Person System.out.println(clazz.getPackage()); // package com._51doit.javase.day11

3. toString:

System.out.println(p.toString()); //com._51doit.javase.day11.Person@2ff4acd0 全類名+@+hashcode值的16進制(hashcode值是10進制) System.out.println(p); //com._51doit.javase.day11.Person@2ff4acd0

println()內(nèi)部實現(xiàn)是toString,toString源碼如下,由此可理解打印的結果

4. equals

格式:對象1.equals(對象2)

?(1)equals和? ==??

  equals:判斷兩個對象是否是同一個對象(默認是==實現(xiàn)的,可重寫)

  ==:連接基本數(shù)據(jù)類型(比較的是值)

    連接引用數(shù)據(jù)類型(比較的是地址值)

?(2)equals和hashCode的用法

  一般我們在比較對象是否是同一個對象的時候,是同時使用hashCode和equals

?  

a. 先用hashCode 作比較:
  如果hashCode 不同: 一定不是同一個對象
  如果hashCode 相同: 不一定,繼續(xù)比較equals:(?這樣比較的原因:hashCode方法的實現(xiàn)是C語言,效率高)
    equals:
      true 說明是同一個對象
      false: 不是同一個對象

?

b. 為了保證equals 和hashCode 結果的一致性
  我們在重寫equals 方法的同時,也要重寫hashCode,約定俗稱(即當equals定義相等的條件改變時,hashCode也要改變)

自動重寫:右鍵-->source-->generate hashCode and equals

?

?練習??

?定義一個Teacher類,并創(chuàng)建2個對象,如果兩個對象的屬性值相同,就認定為同一個對象,打印對象:System.out.println(t),打印的格式為(姓名:張三,年齡:18,工資:20000)

public class Exer1 {public static void main(String[] args) {Teacher t1 = new Teacher();Teacher t2 = new Teacher();System.out.println(t1);if(t1.hashCode() == t2.hashCode()) {if(t1.equals(t2)) {System.out.println("true");}else {System.out.println("false");}}else {System.out.println("false");}} }class Teacher{String name="張三";int age = 18;double salary = 20000;public String toString() {return "姓名:"+name+",年齡:"+age+",工資:"+salary;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());long temp;temp = Double.doubleToLongBits(salary);result = prime * result + (int) (temp ^ (temp >>> 32));return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Teacher other = (Teacher) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;if (Double.doubleToLongBits(salary) != Double.doubleToLongBits(other.salary))return false;return true;}} View Code

?

二 Scanner

scanner表示鍵盤錄入,但若輸入的數(shù)據(jù)類型與表達式不同則會報錯,以int為例

Scanner sc = new Scanner(System.in); int a = sc.nextInt(); // 此處a若輸入一個非int值時就會報錯

解決方法

//加個條件判斷 Scanner sc= new Scanner(System.in); if(sc.hasNextInt()){int a = sc.nextInt(); }

?

三. String

1. String類概述:

  字符串是由多個字符組成的一串數(shù)據(jù)(字符序列,字符串可以看成是字符數(shù)組)

2. 構造方法

  (1)public String()

  (2)public String(byte[ ] bytes)

  (3)public String(byte[ ] bytes, int offset, int length)

  (4)public String(byte[ ] value)

  (5)public String(char[ ] value, int offset, int count)

  (6)public String(String original)

案例

public class StringDemo {public static void main(String[] args) {} }

方法體中添內(nèi)容

a 構造方法1

String str = new String(); System.out.println(str);
// 打印結果為空,所以第一個構造方法對應空字符串

其構造方法源碼如下

b 構造方法2(byte數(shù)組轉(zhuǎn)為字符串)

byte[] bs = new byte[] {97,98,99}; String str1 = new String(bs); System.out.println(str1); // 運行的結果為abc

此處構建字符串是用數(shù)組中編碼所代表的字符來構建字符串,編碼97在ascii碼中代表a

?c 構造方法3(byte類型轉(zhuǎn)換的字符串進行切片)

String str2 = new String(bs,1,2);//offset=1,length=2表示從數(shù)組索引為1的編碼開始取2位 System.out.println(str2); // 運行結果:bc

d 構造方法4(char類型數(shù)組轉(zhuǎn)為字符串)

char[] chs = new char[] {'','', '','','','','',''};//右邊可以省略new char String str3 = new String(chs);
System.out.println(str3);
// 運行結果:哈哈大笑哭笑不得

e 構造方法5(帶偏移量以及count的char數(shù)組轉(zhuǎn)為字符串)

System.out.println(new String(chs,3,3)); // 運行結果:笑哭笑

f 構造方法6(字符串轉(zhuǎn)字符串,即賦值)

String str4 = new String("你好,世界");System.out.println(str4);

相當于將“你好,世界”賦值給了str4

?

3 此種賦值方式(str4)與直接賦值(str=“你好,世界”)有什么區(qū)別?

?  存放位置不一樣,直接賦值的str存放在常量池,而str4的形式是創(chuàng)建了一個新對象,其存放位置為堆。

?案例

public class StringDemo2 {public static void main(String[] args) {String str = "你好,世界"; // 存放在常量池(jdk1.6位置為方法區(qū),1.7為堆內(nèi)存中,1.8以后放在一個元空間)String str1 = new String("你好,世界");System.out.println(str == str1);} } // 運行結果:false

若另外創(chuàng)建一個內(nèi)容相同的常量字符串str2,其地址值是否和ste一樣?答案:一樣

String str2 = "你好,世界"; System.out.println(str == str2); //運行結果:true

?

?注意字符串中的equals比較的是字符串內(nèi)容是否相等

System.out.println(str.equals(str1)); 運行結果是true

同理,equals重寫了,相應的hashCode方法也被重寫了,str和str1的hashCode值也相等

System.out.println(str.hashCode() == str1.hashCode()); // 運行結果:true

?

?4. String內(nèi)存分配

?(1)直接賦值:存放在常量池中,先在常量池中找該字符是否存在,如果存在,直接用這個字符串,如果沒有,則創(chuàng)建一個新的,相同的內(nèi)容,只有一份

?(2)new:存放在堆內(nèi)存中,new幾個就開辟幾塊空間,也就是幾個地址值

?

5. 面試題

第4行代碼中的s存在那一塊?

1 public class StringDemo3 { 2 public static void main(String[] args) { 3 String s = "hello"; // 常量池 4 s += "world"; // s = s+ world 堆內(nèi)存 5 } 6 }

為了弄清第4行代碼是怎么運行的,找到這個文件的.class,進行反編譯(將計算機能看懂的文件轉(zhuǎn)換成人能看懂的內(nèi)容),用XJAD軟件打開即可

在eclipse上找.java文件的.class文件的流程

特定.java文件上右鍵--->show In----->System Explorer,即可得到.java文件所在的目錄,如下

在地址欄那一塊點擊src上一層的javase,即可出現(xiàn)如下界面

這個時候點擊bin文件夾,即可找到相應的.class文件

利用xjad進行反編譯可得:

由19行可知,s存在堆內(nèi)存中

?

5. String的判斷功能

String

  (1)boolean equals(Object obj):比較字符串的內(nèi)容是否一樣

  (2)boolean equalsIgnoreCase(String str):忽略大小寫比較字符串的內(nèi)容

  (3)boolean contains(String str):某個字符串是否包含另一內(nèi)容

  (4)boolean startsWith(String str):是否以。。。開頭

  (5)boolean endsWith(String str):是否以。。。結尾

  (6)boolean isEmpty():判斷字符串是否為空

案例

public class StringDemo4 {public static void main(String[] args) {String str = "abc";String str1 = "abc";System.out.println(str.equals(str1)); // true,equals判斷的是字符串的內(nèi)容是否相同System.out.println("abc".equalsIgnoreCase("ABc")); // trueSystem.out.println("abcdefgh".contains("def")); //trueSystem.out.println("Abcsd".startsWith("Ab")); //trueSystem.out.println("Abcsd".endsWith("sd")); // trueSystem.out.println("abc".isEmpty()); // false } }

練習

模擬登陸,給三次機會,并提示還有幾次機會

public class Login {public static void main(String[] args) {String name = "老王";String pwd = "123456";Scanner sc = new Scanner(System.in);for(int i=0;i<3;i++) {// 請輸入您的姓名System.out.println("請輸入您的姓名");String userName = sc.nextLine();// 請輸入您的密碼System.out.println("請輸入您的密碼");String userPwd = sc.nextLine();if(userName.equals(name) && userPwd.equals(pwd)) {System.out.println("登陸成功");break;}else {if(i<2) {System.out.println("用戶名或密碼錯誤,您還有"+(2-i)+"次機會");}else {System.out.println("今日機會已用完");}}}} }

?

6. 字符串的獲取功能

(1)int length():? 獲取字符串的長度

(2)char charAt(int index)? : 返回index對應的字符

(3)int indexOf(int ch):? 返回ch對應的字符,第一次出現(xiàn)的索引值

(4)int intdexOf(String str): 返回str第一次出現(xiàn)的索引值

(5)int indexOf(int ch, int fromIndex)

(6)int indexOf(String str, int fromIndex)

(7)String substring(int start): 字符串的截取從start到最后

(8)String substring(int start, int end):? 包含start,不包含end

?

轉(zhuǎn)載于:https://www.cnblogs.com/jj1106/p/11349199.html

總結

以上是生活随笔為你收集整理的零基础学习java------day11------常用API的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。