Suppose I have the following class:
public class SomeClass {
    private final int num;
    public SomeClass(int num) {
        this.num = num;
    }
    public int getNum() {
        return num;
    }
}
When I execute this code to set the num field, everything is fine:
SomeClass obj = new SomeClass(0);
final Field field = SomeClass.class.getDeclaredField("num");
field.setAccessible(true);
Field modField = Field.class.getDeclaredField("modifiers");
modField.setAccessible(true);
modField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(obj, 1);
System.out.println(obj.getNum()); // Prints 1 instead of the initial value 0.
However, when I remove the constructor from SomeClass, this doesn't work anymore and the println statement prints 0.
Can anyone explain this behavior?
 
     
    