수색…


소개

이 주제에서는 Java SE 7의 Java 프로그래밍 언어에 추가 된 새로운 기능에 대해 간략히 설명합니다. JDBC 및 JVM (Java Virtual Machine)과 같은 다른 분야에서는 많은 기능이 새로 추가되었습니다. 이 주제에서.

비고

Java SE 7의 향상된 기능

새로운 Java SE 7 프로그래밍 언어 기능

  • 2 진 리터럴 : 정수형 (byte, short, int 및 long)은 이진수 시스템을 사용하여 표현할 수도 있습니다. 2 진 리터럴을 지정하려면 접두사 0b 또는 0B를 번호에 추가하십시오.
  • switch 문에 있는 문자열 : switch 문을 표현하는 String 객체를 사용할 수 있습니다.
  • try-with-resources 문 : try-with-resources 문은 하나 이상의 리소스를 선언하는 try 문입니다. 리소스는 프로그램이 끝난 후에 닫아야하는 객체입니다. try-with-resources 문은 각 리소스가 문 끝에서 닫히도록합니다. java.io.Closeable을 구현하는 모든 객체를 포함하는 java.lang.AutoCloseable을 구현하는 객체는 모두 리소스로 사용할 수 있습니다.
  • 개선 된 유형 검사를 통해 여러 예외 유형 검색 및 예외 재발생 : 단일 catch 블록은 두 가지 이상의 예외 유형을 처리 할 수 ​​있습니다. 이 기능은 코드 중복을 줄이고 지나치게 광범위한 예외를 잡으려는 유혹을 줄입니다.
  • 숫자 리터럴 의 밑줄 : 숫자 리터럴의 숫자 사이에 임의의 수의 밑줄 문자 (_)를 사용할 수 있습니다. 이 기능을 사용하면 예를 들어 숫자 리터럴에서 숫자 그룹을 분리 할 수 ​​있으므로 코드의 가독성을 높일 수 있습니다.
  • 일반 인스턴스 생성에 대한 유형 유추 : 컴파일러가 컨텍스트에서 형식 인수를 유추 할 수있는 경우 일반 클래스의 생성자를 호출하는 데 필요한 형식 인수를 빈 형식 매개 변수 집합 (<>)으로 바꿀 수 있습니다. 이 괄호 쌍은 비공식적으로 다이아몬드라고 불립니다.
  • 수정 가능하지 않은 형식 매개 변수를 Varargs 메서드와 함께 사용할 때의 컴파일러 경고 및 오류 개선

이진 리터럴

// An 8-bit 'byte' value:
byte aByte = (byte)0b00100001;

// A 16-bit 'short' value:
short aShort = (short)0b1010000101000101;

// Some 32-bit 'int' values:
int anInt1 = 0b10100001010001011010000101000101;
int anInt2 = 0b101;
int anInt3 = 0B101; // The B can be upper or lower case.

// A 64-bit 'long' value. Note the "L" suffix:
long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;

리소스 사용 시도 문

이 예제는 파일에서 첫 번째 행을 읽습니다. BufferedReader 의 인스턴스를 사용하여 파일에서 데이터를 읽습니다. BufferedReader 는 프로그램이 끝난 후에 닫아야하는 리소스입니다.

static String readFirstLineFromFile(String path) throws IOException {
  try (BufferedReader br = new BufferedReader(new FileReader(path))) {
    return br.readLine();
  }
}

이 예제에서 try-with-resources 문에 선언 된 리소스는 BufferedReader 입니다. 선언문은 try 키워드 바로 뒤에 괄호 안에 표시됩니다. Java SE 7 이후의 클래스 BufferedReaderjava.lang.AutoCloseable 인터페이스 java.lang.AutoCloseable 구현합니다. BufferedReader 인스턴스는 try-with-resource 문으로 선언 되었기 때문에 try 문이 정상적으로 완료되는지 또는 갑자기 종료되는지에 관계없이 ( IOException throw하는 BufferedReader.readLine 메서드의 결과로서) 닫혀집니다.

숫자 리터럴의 밑줄

다음 예제에서는 숫자 리터럴에서 밑줄을 사용할 수있는 다른 방법을 보여줍니다.

long creditCardNumber = 1234_5678_9012_3456L;
long socialSecurityNumber = 999_99_9999L;
float pi = 3.14_15F;
long hexBytes = 0xFF_EC_DE_5E;
long hexWords = 0xCAFE_BABE;
long maxLong = 0x7fff_ffff_ffff_ffffL;
byte nybbles = 0b0010_0101;
long bytes = 0b11010010_01101001_10010100_10010010;

숫자 사이에만 밑줄을 넣을 수 있습니다. 다음 위치에 밑줄을 넣을 수 없습니다.

  • 번호의 시작 또는 끝에
  • 부동 소수점 리터럴의 소수점에 인접
  • F 또는 L 접미사를 사용하기 전에
  • 자릿수가 예상되는 위치

일반 인스턴스 생성을위한 유형 유추

당신이 사용할 수있는

Map<String, List<String>> myMap = new HashMap<>();

대신에

Map<String, List<String>> myMap = new HashMap<String, List<String>>();

그러나, 당신은 사용할 수 없습니다.

List<String> list = new ArrayList<>();
list.add("A");

  // The following statement should fail since addAll expects
  // Collection<? extends String>

list.addAll(new ArrayList<>());

컴파일 할 수 없으므로 다이아몬드는 종종 메서드 호출에서 작동합니다. 그러나 다이아몬드를 주로 변수 선언에 사용하는 것이 좋습니다.

스위치 명령문의 문자열

public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) {
     String typeOfDay;
     switch (dayOfWeekArg) {
         case "Monday":
             typeOfDay = "Start of work week";
             break;
         case "Tuesday":
         case "Wednesday":
         case "Thursday":
             typeOfDay = "Midweek";
             break;
         case "Friday":
             typeOfDay = "End of work week";
             break;
         case "Saturday":
         case "Sunday":
             typeOfDay = "Weekend";
             break;
         default:
             throw new IllegalArgumentException("Invalid day of the week: " + dayOfWeekArg);
     }
     return typeOfDay;
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow