我必须使用反射。
在我的ATM课程中,我有两个变量:
private int userBalance = 100;
private int moneyInMachine = 100000;
我想提取无限金额。
这是ATM的撤销功能:
private void widthdrawAmount(int n) {
if (this.userBalance - n < 0 || this.moneyInMachine - n < 0) {
// You can not pull money out.
}
this.updateScreen();
}
我想知道是否有人知道如何把这个布道声明弄错。
答案 0 :(得分:3)
试试这个:
Field userBalance = myAtm.getClass().getDeclaredField("userBalance");
userBalance.setAccessible(true);
userBalance.set(myAtm, Integer.MAX_VALUE);
Field moneyInMachine = myAtm.getClass().getDeclaredField("moneyInMachine");
moneyInMachine.setAccessible(true);
moneyInMachine.set(myAtm, Integer.MAX_VALUE);
答案 1 :(得分:1)
您只能更改字段的值,而不能更改代码的语句。
此代码:
public static class ATM {
private int userBalance = 100;
private int moneyInMachine = 100000;
public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
ATM a = new ATM();
Field balanceField = ATM.class.getDeclaredField("userBalance");
balanceField.setAccessible(true);
balanceField.set(a, 123456);
System.out.println(a.userBalance);
}
}
打印
123456
这意味着您可以使用反射更改偶数私有变量的值。