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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

java反射机制和junit的使用

發布時間:2025/3/20 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java反射机制和junit的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 反射的原理

JAVA反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意方法和屬性;這種動態獲取信息以及動態調用對象方法的功能稱為java語言的反射機制。

  • 應用在一些通用性比較高的代碼中

  • 后面學到的框架,大多數都是使用反射來實現的

  • 在框架開發中,都是基于配置文件開發

  • 在配置文件中配置了類,可以通過反射得到類中的所有內容,可以讓類中的某個方法來執行

  • 類中的所有內容:屬性、沒有參數的構造方法、有參數的構造方法、普通方法

畫圖分析反射的原理

  • 首先需要把java文件保存到本地硬盤 .java

  • 編譯java文件,成.class文件

  • 使用jvm,把class文件通過類加載加載到內存中

  • 萬事萬物都是對象,class文件在內存中使用Class類表示

  • 當使用反射時候,首先需要獲取到Class類,得到了這個類之后,就可以得到class文件里面的所有內容,包含屬性、構造方法和普通方法。

    2. 使用反射操作類里面的無參構造方法

    public class Student {private String name;private int age; ?public Student() {super();} ?public Student(String name, int age) {super();this.name = name;this.age = age;} ?public String getName() {return name;} ?public void setName(String name) {this.name = name;} ?public int getAge() {return age;} ?public void setAge(int age) {this.age = age;} ?public void show() {System.out.println("show");} ?public void method(int x, int y) {System.out.println(x + "method" + y);} }

    測試類:

    @Testpublic void test1() throws Exception {// 得到ClassClass clazz = Class.forName("com.yfy.Student");// 獲取無參構造方法Student s = (Student) clazz.newInstance();s.setName("張三");s.setAge(20);System.out.println(s.getName() + "--" + s.getAge());}

    3. 使用反射操作有參數的構造方法

    @Testpublic void test2() throws Exception {// 得到ClassClass clazz = Class.forName("com.yfy.Student");// 使用有參數的構造方法// c1.getConstructors();//獲取所有的構造方法// 傳遞是有參數的構造方法里面參數類型,類型使用class形式傳遞Constructor con = clazz.getConstructor(String.class, int.class);// 通過有參數的構造方法創建Student實例Student s = (Student) con.newInstance("李四", 18);System.out.println(s.getName() + "--" + s.getAge());}

    4. 使用反射操作屬性

    @Testpublic void test3() throws Exception {// 得到ClassClass clazz = Class.forName("com.yfy.Student");// 獲取Student類中的字段,包括私有Field field = clazz.getDeclaredField("name");// 對私有字段的訪問取消權限檢查。暴力訪問。field.setAccessible(true);Student s = (Student) clazz.newInstance();// 給s對象的name屬性賦值field.set(s, "王五");//得到該字段在s對象中的屬性值System.out.println(field.get(s));}

    5. 使用反射操作普通方法

    @Testpublic void test4() throws Exception {// 得到ClassClass clazz = Class.forName("com.yfy.Student");// 獲取帶參數的構造方法Constructor con = clazz.getConstructor(String.class, int.class);Student s = (Student) con.newInstance("李四", 18);//獲取類中的帶參方法Method method=clazz.getMethod("method", int.class,int.class);//調用帶參方法method.invoke(s, 3,7);//獲取類中的無參方法Method method1=clazz.getMethod("show");//調用無參方法method1.invoke(s);}
    • getDeclaredMethod(方法名稱,方法里面參數的類型):得到任意一個方法,包括私有

    • getDeclaredMethods():得到所有方法,包括私有。

    • setAccessible(true):對私有方法取消權限檢查。

    6. junit的使用

    JUnit 是一個 Java 編程語言的單元測試框架。JUnit 在測試驅動的開發方面有很重要的發展,是起源于 JUnit 的一個統稱為 xUnit 的單元測試框架之一。

    junit注解

  • @Test:這個注釋說明依附在 JUnit 的 public void 方法可以作為一個測試案例。

  • @Before:有些測試在運行前需要創造幾個相似的對象。在 public void 方法加該注釋是因為該方法需要在 test 方法前運行。

  • @After:如果你將外部資源在 Before 方法中分配,那么你需要在測試運行后釋放他們。在 public void 方法加該注釋是因為該方法需要在 test 方法后運行。

  • @BeforeClass:在 public void 方法加該注釋是因為該方法需要在類中所有方法前運行。

  • @AfterClass:它將會使方法在所有測試結束后執行。這個可以用來進行清理活動。

  • @Ignore:這個注釋是用來忽略有關不需要執行的測試的。

  • 執行過程

    • beforeClass(): 方法首先執行,并且只執行一次。

    • afterClass():方法最后執行,并且只執行一次。

    • before():方法針對每一個測試用例執行,但是是在執行測試用例之前。

    • after():方法針對每一個測試用例執行,但是是在執行測試用例之后。

    • 在 before() 方法和 after() 方法之間,執行每一個測試用例。

    斷言

    unit所有的斷言都包含在 Assert 類中。

    這個類提供了很多有用的斷言方法來編寫測試用例。只有失敗的斷言才會被記錄。Assert 類中的一些有用的方法列式如下:

    方法描述
    assertEquals(boolean expected, boolean actual)檢查兩個變量或者等式是否平衡
    assertTrue(boolean expected, boolean actual)檢查條件為真
    assertFalse(boolean condition)檢查條件為假
    assertNotNull(Object object)檢查對象不為空
    assertNull(Object object)檢查對象為空
    assertSame(boolean condition)檢查兩個相關對象是否指向同一個對象
    assertNotSame(boolean condition)檢查兩個相關對象是否不指向同一個對象
    assertArrayEquals(expectedArray, resultArray)檢查兩個數組是否相等

    總結

    以上是生活随笔為你收集整理的java反射机制和junit的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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