[英]How does this java code execute code?
我的編程課中有一個項目,我沒有測試用例。 我查看測試驅動程序並找到:
private static boolean testSquareArch()
{
boolean pass = true;
int test = 1;
int cnt;
Square sq;
Class cl;
System.out.println("Square architecture tests...");
sq = new Square(true, true, true, true, 0, 0);
cl = sq.getClass();
cnt = cl.getFields().length;
pass &= test(cnt == 5, test++); //FAILING THIS TEST
這是做什么的以及如何檢查我的代碼?
我也在這里,這又做什么?
// Count and test number of of PACKAGE fields
cnt = cl.getDeclaredFields().length
- countModifiers(cl.getDeclaredFields(), Modifier.PRIVATE)
- countModifiers(cl.getDeclaredFields(), Modifier.PROTECTED)
- countModifiers(cl.getDeclaredFields(), Modifier.PUBLIC);
pass &= test(cnt == 5, test++); // Test 8
我沒有通過這些測試用例,只是想知道原因。 謝謝
如果您詢問&=
賦值運算符,只有當右側參數也為真時,它才會使變量保持為真(如果它已經為假,則它將保持為假)。 它的工作方式與+=
, a &= b
與a = a & b
,運算符&
是布爾結合(AND)。
pass &= test(cnt == 5, test++);
是簡寫
if( ! test( cnt == 5, test ) )
pass = false;
test++;
我假設它是單元測試代碼的一部分,並斷言cnt == 5,還計算測試次數和總結果(通過或失敗)。
使用Junit,您不必手動處理測試次數或最終結果,您可以編寫
assertEquals("count is correct", 5, cnt);
這也將產生有用的輸出,以幫助確定失敗的確切內容(例如錯誤計數的值)。
它似乎是在檢查您在班級中聲明了多少個字段,以及其中有多少是私人可見性。
如果你想知道&=
,這是JLS 15.22.2的引用。 布爾邏輯運算符&,^和| 。
對於&,如果兩個操作數值都為真,則結果值為true; 否則,結果是錯誤的。
運營商&
和|
對於布爾人來說,是&&
( 15.23 )和||
鮮為人知的表兄弟 ( 15.24 )。 后兩者是“有條件”的運營商; 它們是短路的,只有在實際需要時才評估右側。
&&
運算符類似於&
(§15.22.2),但僅當其左側操作數的值為true
時才計算其右側操作數。
&=
是的化合物分配版本&
。 見JLS 15.26.2。 復合賦值運算符 。
形式E1 op = E2的復合賦值表達式等效於E1 =(T)((E1)op(E2)),其中T是E1的類型,除了E1僅被評估一次。
換句話說,這些是等價的(假設boolean b
):
b &= bool_expr;
b = b & bool_expr;
if (!bool_expr) b = false;
這也可能是你的問題( java.lang.Class#getDeclaredFields ):
返回
Field
對象的數組,這些對象反映由此Class
對象表示的類或接口聲明的所有字段。 這包括公共,受保護,默認(包)訪問和私有字段, 但不包括繼承的字段 。
如果您還要計算繼承的字段,則計數可能不正確。
在Java中,變量和方法的名稱空間不會發生沖突。 所以看起來驅動程序既有變量又有一個名為“test”的方法。
如果沒有test()方法和您自己的源代碼,很難說出了什么問題,但看起來您的Square類中的字段數量是錯誤的。 (應該有五個。)
是的,似乎需要更多的字段來完成聲明,這應該修復命名空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.