code: public static String getName(int codePoint) {
          if (!isValidCodePoint(codePoint)) {
              throw new IllegalArgumentException();
          }
          String name = getNameImpl(codePoint);
          if (name != null)
              return name;
          if (getType(codePoint) == UNASSIGNED)
              return null;
          UnicodeBlock block = UnicodeBlock.of(codePoint);
          if (block != null)
              return block.toString().replace('_', ' ') + " "
                     + Integer.toHexString(codePoint).toUpperCase(Locale.ENGLISH);
          // should never come here
          return Integer.toHexString(codePoint).toUpperCase(Locale.ENGLISH);
      }
docs: Returns the Unicode name of the specified character
  {@code codePoint}, or null if the code point is
  {@link #UNASSIGNED unassigned}.
  <p>
  Note: if the specified character is not assigned a name by
  the <i>UnicodeData</i> file (part of the Unicode Character
  Database maintained by the Unicode Consortium), the returned
  name is the same as the result of expression.
  
  <blockquote>{@code
  Character.UnicodeBlock.of(codePoint).toString().replace('_', ' ')
  + " "
  + Integer.toHexString(codePoint).toUpperCase(Locale.ENGLISH);
  
  }</blockquote>
  
  @param  codePoint the character (Unicode code point)
  
  @return the Unicode name of the specified character, or null if
  the code point is unassigned.
  
  @exception IllegalArgumentException if the specified
  {@code codePoint} is not a valid Unicode
  code point.
  
  @since 1.7