code: public static JapaneseDate of(JapaneseEra era, int yearOfEra, int month, int dayOfMonth) {
          Jdk8Methods.requireNonNull(era, "era");
          if (yearOfEra < 1) {
              throw new DateTimeException("Invalid YearOfEra: " + yearOfEra);
          }
          LocalDate eraStartDate = era.startDate();
          LocalDate eraEndDate = era.endDate();
          int yearOffset = eraStartDate.getYear() - 1;
          LocalDate date = LocalDate.of(yearOfEra + yearOffset, month, dayOfMonth);
          if (date.isBefore(eraStartDate) || date.isAfter(eraEndDate)) {
              throw new DateTimeException("Requested date is outside bounds of era " + era);
          }
          return new JapaneseDate(era, yearOfEra, date);
      }
docs: Obtains a {@code JapaneseDate} representing a date in the Japanese calendar
  system from the era, year-of-era, month-of-year and day-of-month fields.
  <p>
  This returns a {@code JapaneseDate} with the specified fields.
  The day must be valid for the year and month, otherwise an exception will be thrown.
  <p>
  The Japanese month and day-of-month are the same as those in the
  ISO calendar system. They are not reset when the era changes.
  For example:
  <pre>
  6th Jan Showa 64 = ISO 1989-01-06
  7th Jan Showa 64 = ISO 1989-01-07
  8th Jan Heisei 1 = ISO 1989-01-08
  9th Jan Heisei 1 = ISO 1989-01-09
  </pre>
  
  @param era  the Japanese era, not null
  @param yearOfEra  the Japanese year-of-era
  @param month  the Japanese month-of-year, from 1 to 12
  @param dayOfMonth  the Japanese day-of-month, from 1 to 31
  @return the date in Japanese calendar system, not null
  @throws DateTimeException if the value of any field is out of range,
  or if the day-of-month is invalid for the month-year