The above code is wrong at best and dangerous at worst. There are reasons why the Date and Calendar classes exist. Managing leap years is one of them.
The above code should only see production in cases where you really understand what you are doing and need to achieve performance by this means. Your best bet is as follows:
public Date subtractYear() {
final Calendar c = new Calendar();
c.set(year, month, day); // set your class's "current" date
c.add(Calendar.YEAR, -1); // remove 1 year
return c.getTime(); // get the Date object back from the Calendar
}
As an additional comment, using try-catch blocks for handling normal program flow is typically a bad way to handle things which you are expecting on a normal basis. The generation of exception stack traces is a costly operation.