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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java学习笔记2022.2.11

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

on java 8 摘錄(反射)

  • 面向?qū)ο缶幊痰囊粋€基本目標(biāo)就是,讓編寫的代碼只操縱基類(本例中為Shape)的引用

  • Shape接口中的方法draw()是可以動態(tài)綁定的,因此客戶程序員可以通過泛化的Shape引用來調(diào)用具體的draw()方法。在所有子類中,draw()都被重寫,并且因為它是一個動態(tài)綁定的方法,即使通過泛化的Shape引用來調(diào)用它,也會產(chǎn)生正確的行為。這就是多態(tài)。

  • abstract class Shape {void draw() {System.out.println(this + ".draw()");}@Override public abstract String toString(); }class Circle extends Shape {@Override public String toString() {return "Circle";} }class Square extends Shape {@Override public String toString() {return "Square";} }class Triangle extends Shape {@Override public String toString() {return "Triangle";} } public class Shapes {public static void main(String[] args) {Stream.of(new Circle(), new Square(), new Triangle()).forEach(Shape::draw);} }
  • 這就是反射的意思:在運行時,確定對象的類型。

  • 當(dāng)程序第一次引用該類的靜態(tài)成員時,就會觸發(fā)這個類的加載。構(gòu)造器是類的一個靜態(tài)方法,盡管沒有明確使用static關(guān)鍵字。因此,使用new操作符創(chuàng)建類的新對象也算作對該類靜態(tài)成員的引用,構(gòu)造器的初次使用會導(dǎo)致該類的加載。

    一旦該類型的Class對象加載到內(nèi)存中,它就會用于創(chuàng)建該類型的所有對象。

    // reflection/SweetShop.java // 檢查類加載器的工作方式class Cookie { static { System.out.println("Loading Cookie"); } }class Gum { static { System.out.println("Loading Gum"); } }class Candy { static { System.out.println("Loading Candy"); } }public class SweetShop { public static void main(String[] args) {System.out.println("inside main");new Candy();System.out.println("After creating Candy");try {Class.forName("Gum");} catch(ClassNotFoundException e) {System.out.println("Couldn't find Gum");}System.out.println("After Class.forName(\"Gum\")");new Cookie();System.out.println("After creating Cookie"); } } /* 輸出: inside main Loading Candy After creating Candy Loading Gum After Class.forName("Gum") Loading Cookie After creating Cookie */

    我相信最開始肯定也有人和我一樣沒看懂為什么這個可以證明,其實是這樣的,我們通過觀察,可以發(fā)現(xiàn)上面類的順序是Cookie,Gum,Candy這樣的順序下來的,而在下面我最先創(chuàng)建的是Candy,然后Gum,最后Cookie,然后又因為靜態(tài)方法是類第一次被加載時會出現(xiàn),那么按照常理,如果它們是提前編譯好的,而不是在動態(tài)加載的話,它們的輸出應(yīng)該是亂的,或者就是按照編寫順序下來的,我說亂是因為提前全部加載的話,靜態(tài)代碼塊一定會一起出現(xiàn),但是會根據(jù)編譯器決定哪個加載的塊,這樣就會導(dǎo)致順序出問題;綜上,既然它是按照主程序的順序下來,那么肯定就只能是動態(tài)加載了.

    newInstance()在Java 8中還是正常的,但在更高版本中已被棄用,Java推薦使用Constructor.newInstance()來代替。示例中我們使用了@SuppressWarnings("deprecation")來抑制那些更高版本的棄用警告。

    這個可以這么寫

    Class up = c.getSuperclass(); Object obj = null; try {// 對應(yīng)類要有public的無參構(gòu)造器:obj = up.getConstructor().newInstance(); } catch(Exception e) {throw new RuntimeException("Cannot instantiate"); }

    on java 8 摘錄(反射)(沒看懂的東西)

  • 事實上,Class對象被用來創(chuàng)建類的所有“常規(guī)”對象。
  • 這句話我沒太看懂,什么叫做常規(guī)對象?

    我們對forName()的調(diào)用只是為了它的副作用:如果類Gum尚未加載,則加載它。在加載過程中,會執(zhí)行Gum的靜態(tài)代碼塊。

    19.2 Class對象

  • Class對象有點像靜態(tài)對象的感覺,它們只被加載一次,后面都是對它的引用

  • 有關(guān)于Class.forName(),這個寫的挺詳細(xì)的https://www.geeksforgeeks.org/class-forname-method-in-java-with-examples/,然后類名.getclass(),兩個調(diào)用的方式不一樣.

  • 我魔改了on java 程序

    package test; class Cookie {static { System.out.println("Loading Cookie"); } }class Gum {static { System.out.println("Loading Gum"); } }class Candy {static { System.out.println("Loading Candy"); } }public class SweetShop {public static void main(String[] args) {System.out.println("inside main");new Candy();try {Class.forName("Candy");}catch (ClassNotFoundException e){e.printStackTrace();}System.out.println("After creating Candy");try {Class.forName("test.Gum");}catch (ClassNotFoundException e){e.printStackTrace();}System.out.println("After Class.forName(\"Gum\")");new Cookie();System.out.println("After creating Cookie");} }
  • 其他

  • toString()方法存在是因為我們需要類的字符串信息,如果沒有這個方法的話,你的實例對象傳出去的是它的地址
  • 類的靜態(tài)成員只會被加載一次,靜態(tài)代碼塊也是一樣
  • 在idea中注意下,找類的話不是用的絕對地址而是相對地址.針對我上面給出的那個代碼
  • 看了反射,最大的感覺就是它可以無視具體的類編程,主要框架適用就好
  • 總結(jié)

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

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