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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

第三周学习笔记

發布時間:2024/4/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第三周学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 2022.1.15
    • 其他
  • 2022.1.16
    • 問題
    • 集合
    • Map
    • 其他
  • 2022.1.20
    • 問題
    • 集合
      • Map
    • 其他
  • 2022.1.21
    • 問題
    • 集合
      • Map
  • 2022.1.23
    • 思考題
    • 查閱時一些有趣的信息
    • 其他
    • 查閱時一些有趣的信息
    • 其他

2022.1.15

其他

  • public class PokeDemo {public static void main(String[] args ){try {Pokemon a1 = PokemonManage.getPokemon("Surf");a1.eat();a1.skill();}catch (Exception e){e.printStackTrace();}}}
  • 注意下,這種寫法下會導致a1在{}作用域外無法使用

  • 所以針對異常處理的話,我個人感覺他不是用來在主函數里進行對象創建的時候用的,而是檢驗算法中正確性用的

  • 論正確的如何在創建對象的過程中完成對錯誤的鑒定

    Pokemon pokemon = null;try{if(a.equals("Surf")){pokemon= new Pachirisu();}else if(a.equals("Cut")){pokemon= new Lapras();}else if (a.equals("Cut Surf")){pokemon= new Furret();}else if(a.equals("Cut,Surf")){pokemon = new Furret();}else {throw new Exception("Please input again , because your operation is out of order");}return pokemon;}catch (Exception e){e.printStackTrace();return null;}}
  • 如何在格式字符串輸出的時候里面包含雙引號,可以按下面的操作

    throw new Exception("Please input again and make sure that your operation is in the range of " +"\"Cut\" and \"Surf\" and \"Cut Surf\"");
  • 請說說 Java 中抽象類和接口的不同之處

  • 我自己通過查資料,早期的接口其實沒有default這種方法,也就是說,它全部都是抽象方法,每一個都需要實現對象去實現,而抽象類不是,抽象類可以自己先定義一些方法,然后選擇讓子類去實現那些抽象方法,并重寫父類中定義的方法,只要符合規范就好,當然,自從接口有了default的方法以后,這個差別就沒有了感覺
  • 然后就是抽象類和子類是單繼承的關系,也就是說子類只能有一個父類,但是接口不一樣,一個類可以實現多個接口.
  • 抽象類中可以定義私有方法,但是接口不行
  • 接口的變量默認被什么修飾符修飾? 方法呢?

  • 接口的變量默認被修飾為public static final類型,方法默認被public修飾符修飾

    public class two implements three {enum test{a,b,c,d,e,max}//three.a=89;@Overridepublic void test() {System.out.println("hello ");}public static void main(String[] args){//three.a=99;System.out.println(three.a);} }
  • 接口中只能有 public 公有方法 這句話正確咩?

  • 我其實有點不太理解這句話,因為接口里還可以有屬性(狗頭)
  • 如果說的是能不能有private修飾的方法的話,我的答案是不能,因為接口設計出來就是讓類實現方法用的,如果執著定義私有方法,不如直接用抽象類來的舒服
  • 父類如果實現了一個接口的話,子類就會默認繼承父類實現的接口,即便接口里被父類實現的方法存在默認方法

    public interface three {int a=9999;void test();public default void testTwo(){System.out.println("this is a test");} } public class two implements three {enum test{a,b,c,d,e,max}//three.a=89;@Overridepublic void test() {System.out.println("hello ");}public static void main(String[] args){//three.a=99;System.out.println(three.a);three Three = new two();} } public class four extends two{public static void main(String[] args){four test = new four();test.test();} }
  • 2022.1.16

    問題

  • HashSet<Cat> set = new HashSet<Cat>(); for(Cat cat : set){if(cat.getName().equals("fanfa")){set.remove(cat);}}

    什么情況下上述代碼存在問題?set里存在元素

  • 如果要是該語句正確,需要在找到以后直接break,否則報錯,這個主要因為集合在設計時為了保證數據的互異性對數據的讀取進行了限制(更深層的源碼實現我還沒看,所以更具體的東西我也不懂)
  • 集合

  • 鏈表.get(i)方法得到的是一個鏈表元素,相當于從屬于鏈表這個父類,所以如果我們需要調用鏈表元素中的特有方法的話,必須對鏈表元素進行強制類型轉化如下

    for (int i = 0; i < noticeList.size(); i++){System.out.println(i+1+":"+((Notice)(noticeList.get(i))).getTitle());}
  • 然后注意下,可以通過i+1加上字符串的形式寫出類似于自動填寫序號的作用

  • 注意下noticeList.size()不要忘了后面的括號

  • public class NoticeTest {public static void main(String[] args) {Notice notice1 = new Notice(1, "own", "one", new Date());Notice notice2 = new Notice(2, "own", "two", new Date());Notice notice3 = new Notice(3, "own", "three", new Date());ArrayList noticeList = new ArrayList();noticeList.add(notice1);noticeList.add(notice2);noticeList.add(notice3);System.out.println("the content of Notice :");for (int i = 0; i < noticeList.size(); i++){System.out.println(i+1+":"+((Notice)(noticeList.get(i))).getTitle());}System.out.println("--------------------------------------------");Notice notice4 = new Notice(4, "own", "four",new Date());noticeList.add(1,notice4);System.out.println("the content of Notice :");for (int i = 0; i < noticeList.size(); i++){System.out.println(i+1+":"+((Notice)(noticeList.get(i))).getTitle());}System.out.println("-------------------------------------------");noticeList.remove(2);System.out.println("the content of Notice :");for (int i = 0; i < noticeList.size(); i++){System.out.println(i+1+":"+((Notice)(noticeList.get(i))).getTitle());}System.out.println("----------------------------------------------");notice4.setTitle("hello");noticeList.set(1,notice4);for(int i=0;i<noticeList.size();i++){System.out.println(i+1+":"+((Notice)(noticeList.get(i))).getTitle());}} }

    注意下set方法的使用,并不是直接修改,而是通過修改元素然后修改的鏈表

  • Set

  • 有關于如何向集合中添加元素并且輸出

    package Eetjihe;import java.util.HashSet; import java.util.Iterator;public class one {public static void main(String[] args) {HashSet set = new HashSet();set.add("red");set.add("green");set.add("yellow");set.add("blue");Iterator it = set.iterator();while (it.hasNext()) {System.out.println(it.next()+" ");}} }
  • 注意,Set類的實例沒有直接可以調用元素的方法,所以需要利用迭代器進行操作

  • 注意迭代器操作的時候不要寫成這個樣子

    while (it.hasNext()) {System.out.println(it+" ");}

    這是一個死循環,因為it不能自己到下一個元素,并且此時輸出來的應該是it的地址

  • 向集合中插入元素,編譯器是不會報錯的,且集合內不會出現重復元素

  • 如何將自定義類加入到hashset中去

    package Eetjihe;public class Cat {private String name;private int month;private String species;public Cat(String name, int month, String species){this.month=month;this.species=species;this.name=name;}public int getMonth() {return month;}public String getSpecies() {return species;}public String getName() {return name;}public void setMonth(int month) {this.month = month;}public void setName(String name) {this.name = name;}public void setSpecies(String species) {this.species = species;}@Overridepublic String toString() {return "Cat{" +"name='" + name + '\'' +", month=" + month +", species='" + species + '\'' +'}';} } package Eetjihe;import java.util.HashSet; import java.util.Iterator; import java.util.Set;public class catTest {public static void main(String[] args){Cat huahua = new Cat("huahua",12,"English");Cat fanfan = new Cat("fafan",1,"Chinese");Set set = new HashSet();set.add(huahua);set.add(fanfan);Iterator it = set.iterator();while(it.hasNext()){System.out.println(it.next()+" ");}} }

    還有注意下,輸出語句還可以寫成這樣

    for (int i=0;i<set.size();i++){System.out.println(it.next());}
  • 為了防止set在添加自定義類時添加了重復數據,我們需要重設hashCode方法和equals方法,因為hashCode我直接按照系統默認來的,等數據結構解決了在回來處理這個問題,暫時先跳過,equals方法按照下面的來寫

    @Overridepublic boolean equals(Object obj) {if(this==obj) {return true;}if(obj.getClass()== Cat.class){Cat cat = (Cat) obj;return cat.getName().equals(this.name) && cat.getMonth()==(this.month) && cat.getSpecies().equals(this.species);}return false;}
  • 在上面,obj首先是由對象向上轉型得到的,然后getClass()方法得到的是class文件信息,每一個實例對象都歸屬于一個class文件信息,我只是粗略的了解下,這里包含二進制文件的一些內容,但也不是很深,我選擇先跳過,因為當前我覺得還沒必要理解那么深入就可以解決問題了

  • 注意下類名.class也是一種獲取class文件信息的方法
  • 然后處理下第一個if的問題:這個理解起來其實挺簡單的,就是直接比較地址,如果地址相同的話,那么二者必然相同,這沒啥好說的

  • 第二個if是先判斷兩者的class文件是否相同,如果相同就將obj進行強制轉化成所需類型.然后進行上面的比較就好

  • 然后為什么傳入obj類型:因為任何類型都可以強制轉化成Object類型,如果不用Object類型的話,用一個具體的類的話,如果我們用了個不同于這個具體類的對象的話,程序會不知道怎么處理,然后直接給你來個報錯

  • 如何通過變量名查找和通過類中變量查找

    it=set.iterator();if(set.contains(huahua)){System.out.println(huahua);}else{System.out.println("沒有信息");}boolean flag=false;while(it.hasNext()){Cat cat = (Cat) it.next();if(cat.getName().equals("huahua")){flag=true;}}if(flag){System.out.println("find it");}else{System.out.println("No");}
  • 注意下Iterator 的實例對象每一次都要重新賦值,因為每一次遍歷完成以后,其實例對象應該都在最后了,不會自動返回和自動更新
  • 泛型的使用

  • Set<Cat> set = new HashSet<Cat>(); Iterator<Cat> it = set.iterator();
  • 上面的寫法保證了自動轉化時都是我們需要的類型,不需要進行強制類型轉化

  • 如何刪除集合中的元素

  • 刪除單個元素

    for (Cat cat : set){if(cat.getName().equals("huahua")){set.remove(cat);break;} }
  • 刪除多個元素

    HashSet<Cat> set1= new HashSet<Cat>();for (Cat cat : set){if(cat.getMonth()<=10){set1.add(cat);}}set.removeAll(set1);
  • Map

  • 創建HashMap

    HashMap<String,String> map = new HashMap<String,String>();
  • 添加HashMap數據

    Scanner input = new Scanner(System.in);HashMap<String,String> map = new HashMap<String,String>();for(int cnt=0;cnt<3;cnt++) {String key = input.next();String value = input.next();map.put(key,value);}
  • 用迭代器輸出key和value

    Iterator<String> it = map.values().iterator();System.out.println("value is ");while(it.hasNext()) {System.out.println(it.next());}it= map.keySet().iterator();System.out.println("key is ");while(it.hasNext()) {System.out.println(it.next());}Set<Map.Entry<String,String>> entrySet=map.entrySet();System.out.println("key-value");for(Map.Entry<String,String> entry : entrySet){System.out.println(entry.getKey()+"-"+entry.getValue());}
  • 其他

  • 如果你數據沒有輸完然后用了ctrl+D,會強制終止程序繼續運行,并且還會給你報錯,我得到的報錯信息是下面這樣的

    Exception in thread "main" java.util.NoSuchElementExceptionat java.base/java.util.Scanner.throwFor(Scanner.java:937)at java.base/java.util.Scanner.next(Scanner.java:1478)at zidian.one.main(one.java:12)
  • 2022.1.20

    問題

    集合

    Map

  • 如何通過key來進行查找

    Set<String> keySet= map.keySet();String a = input.next();for(String key : keySet){if(key.equals(a)){System.out.println("find it and the key is "+key+" the value is " + map.get(key));}}
  • 如果插入的key值是有重復的,那么以后面的為準,前面的key值會被刷新

  • 其他

    2022.1.21

    問題

    集合

    Map

  • 如何先HashMap中添加入我們自定義的類

    while(i<3){String id = input.next();if(GoodMap.containsKey(id)){continue;}String name = input.next();double value = input.nextDouble();Goods good = new Goods(id,name,value);GoodMap.put(id,good);i++;}
  • 2022.1.23

    思考題

  • List list = new ArrayList(); 能添加各種類型的數據嗎?

  • 理論上可以添加數據,就像下面這樣

    package thinkingOne;import java.util.ArrayList; import java.util.List; import java.util.Scanner;public class testOne {public static void main(String[] args) {List list = new ArrayList();list.add(new Integer((3332432)));list.add("afhfhad");for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i).toString());}} }
  • 不過有時也會出現運行時錯誤,比如下面這種

    public class testOne {public static void main(String[] args) {List list = new ArrayList();list.add(new Integer(3141));list.add("afhfhad");for (int i = 0; i < list.size(); i++) {String str =(String) list.get(i);System.out.println(str);}} }
  • 所以需要泛型來對list中的變量進行約束

  • 如果容器中的數據類型不確定,那么在使用前,應該先進行類型判斷再使用,從而避免運行時異常。

    if (list.get(i) instanceof String){String str = (String) list.get(i); }
  • List list = new Array()會報錯嗎?為什么?

  • 會報錯

    public class testOne {public static void main(String[] args) {List<Object> list =new Array<Integer>();list.add(1);} }
  • 因為List和Array間,前者表示列表,后者表示數組,二者其實不同

  • 如果改成

    public class testOne {public static void main(String[] args){List<Object> list = new ArrayList<Integer>();} }

    好像也一樣報錯,就兩種不會報錯

    List<Object> list = new ArrayList<>(); List<Object> list = new ArrayList();

    不過添加Integer的元素時,會顯示無法向Object轉型

  • 什么時候用?、extends、super?

  • 我沒看太懂這個問題,我對這個的理解就是什么時候用extend和super,所以下面寫一下

  • 用exetend就是寫我想寫一個類,并且這個類和某一個類具有明顯的繼承關系時,我就會用extend,以此表示這個類是某個類的子類,以減少一些代碼量

  • 用super(),我用這個就常用的就是訪問父類的構造方法,當然它還可以用來訪問父類的一些變量,和一些方法,下面用代碼展示下

    package thinkingOne;public class testOne {public static void main(String[] args){dog1 testOne = new dog1(1,2);testOne.fun2();} } class dog{private int a,b;public dog(int a,int b) {this.a = a;this.b = b;}String name = "I am the one";void fun1(){System.out.println("hello");} }class dog1 extends dog{public dog1(int a,int b){super(a,b);}public void fun1(){System.out.println(name);}public void fun2(){super.fun1();fun1();}}
  • 然后再寫上面的時候發現了我幾個問題吧

  • private修飾符不能通過super.變量名進行訪問,protected可以

  • 然后不能直接在class里寫super.父類方法名,比如這樣

    super.fun1();

    要這么寫

    public void fun2() {super.fun1();}

    其中修飾符你隨意就好

  • List<?>和List的區別?

    • List<?>,即通配符類型,其引用變量,同樣可以接受任何對應List的參數化類型,包括List,但不能添加任何元素,保證了安全性和表述性。但不具有表述性,從中取出的元素時Object類型,要通過手動轉換才能得到原本的類型。
    • List,即實際類型參數為Object的參數化類型,其引用變量可以接受List,可以添加元素,但不能接受除了其本身外的任何參數化類型(泛型的子類型化原則)
  • 查閱時一些有趣的信息

  • 泛型信息可以在運行時被擦除,泛型在編譯期有效,在運行期被刪除,也就是說所有泛型參數類型在編譯后都會被清除掉。歸根結底不管泛型被參數具體化成什么類型,其class都是RawType.class,比如List.class,而不是List.class或List.class
  • 其他

  • ed可以

    3. 然后不能直接在class里寫super.父類方法名,比如這樣```javasuper.fun1();```要這么寫```javapublic void fun2() {super.fun1();}```其中修飾符你隨意就好
  • List<?>和List的區別?

    • List<?>,即通配符類型,其引用變量,同樣可以接受任何對應List的參數化類型,包括List,但不能添加任何元素,保證了安全性和表述性。但不具有表述性,從中取出的元素時Object類型,要通過手動轉換才能得到原本的類型。
    • List,即實際類型參數為Object的參數化類型,其引用變量可以接受List,可以添加元素,但不能接受除了其本身外的任何參數化類型(泛型的子類型化原則)
  • 查閱時一些有趣的信息

  • 泛型信息可以在運行時被擦除,泛型在編譯期有效,在運行期被刪除,也就是說所有泛型參數類型在編譯后都會被清除掉。歸根結底不管泛型被參數具體化成什么類型,其class都是RawType.class,比如List.class,而不是List.class或List.class
  • 其他

  • 總結

    以上是生活随笔為你收集整理的第三周学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

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