JDK 10 새로운 특성의 로 컬 변수 유형 var 에 대한 깊 은 이해
자 바 는 대상 을 향 한 특성 으로 세상 에 현저하게 나타 나 왕성 한 발전 을 이 루 었 다.언어의 발전 과정 에서 자바 언어 를 더욱 간결 하고 편리 하 게 사용 할 수 있 도록 JDK 도 끊임없이 개선 하고 있다.
오늘 본 고 는 JDK 10 에 도 입 된 로 컬 변수 유형 var 를 소개 할 것 이다.
왜 우 리 는 var 가 필요 합 니까?
형식 추정 은 많은 프로 그래 밍 언어 가 가지 고 있 는 특성 으로 컴 파일 러 는 우리 가 구체 적 인 변수 유형 을 지정 하지 않 은 상황 에서 이 변수의 실제 유형 을 추정 할 수 있다.
형식 추정 의 등장 은 프로그래머 의 코드 를 더욱 유연 하 게 하고 유지 와 작성 에 유리 합 니 다.사실 우 리 는 줄곧 유형 추정 까지 사용 해 왔 다.
JDK 8 에 도 입 된 lambda 표현 식 은 유형 추정 에 매우 유용 한 예 입 니 다.
int maxWeight = blocks.stream().filter(b -> b.getColor() == BLUE).mapToInt(Block::getWeight)
.max();
위의 예 에서 Blocks 는 Stream스 레 드 탱크 의 예 를 다시 봅 니 다.
ExecutorService executorService= Executors.newSingleThreadExecutor();
Runnable runnable=new Runnable() {
@Override
public void run() {
log.info("inside runnable");
}
};
executorService.submit(runnable);
많은 경우 에 우 리 는 변수의 이름 에서 이 변수 가 도대체 어떤 유형 인지 알 게 되 었 다.그러면 위의 예 는 var 로 고 쳐 쓰 면 이렇게 할 수 있다.
var executorService= Executors.newSingleThreadExecutor();
var runnable=new Runnable() {
@Override
public void run() {
log.info("inside runnable");
}
};
executorService.submit(runnable);
코드 가 더욱 간결 하고 프로그래머 가 쓰기 에 도 편리 하 다.만약 위의 예 가 당신 이 var 를 사용 하 는 흥 미 를 제기 하지 못 한다 면,아래 의 예 는 당신 이 var 를 기꺼이 사용 할 것 입 니 다.
만약 우리 에 게 매우 긴 유형 이 있다 면:
ItIsAVeryLongNameJavaClass itIsAVeryLongNameJavaClass= new ItIsAVeryLongNameJavaClass();
쓰기 에 매우 번 거 롭 지 않 습 니까?코드 도 매우 지루 합 니 다.이때 우 리 는 그것 을 간략화 할 수 있 습 니 다.
var itIsAVeryLongNameJavaClass= new ItIsAVeryLongNameJavaClass();
var 는 어디 에 사용 합 니까?우선 var 는 로 컬 변 수 를 대표 하기 때문에 로 컬 변수 만 var 를 사용 할 수 있 습 니 다.
그 다음 var 는 정의 할 때 초기 화 되 어야 합 니 다.
var a; //Invalid Declaration - - Cannot use 'var' on variable without initializer
var a = 100; //Valid Declaration
var 는 for loop 에 사용 할 수 있 습 니 다:
for ( var element : elementList){
//do something for element
}
혹은 이런:
for ( var i = 0 ; i < elementList.size(); i++ ){
System.out.println( elementList.get(i) );
}
var 는 어디 에 쓰 면 안 돼 요.var 는 로 컬 변수 형식 이기 때문에 클래스 변수의 정의 에 사용 할 수 없습니다.방법 변수 에 사용 할 수 없습니다.구조 함수 에 사용 할 수 없습니다.방법 으로 되 돌아 갈 수 없습니다.catch 변수 정의 에 사용 할 수 없습니다.
public class VarIncorrectUsage {
//var user; //Not allowed as class fields
//public VarIncorrectUsage(var param){ //Not allowed as parameter
//}
/*try{
} catch(var exception){ //Not allowed as catch formal
}*/
/*public var returnMethod(){ //Not allowed in method return type
return null;
}*/
/*public Integer parameterMethod( var input ){ //Not allowed in method parameters
return null;
}*/
}
var 는 JVM 에서 그 유형 을 추측 할 수 없 거나 여러 가지 유형 이 있 을 수 있 는 상황 에서 사용 할 수 없습니다.
var ints = {1, 2, 3};
var lambda = a -> a;
var methodReference = String::concat;
위의 예 에서 배열 이 초기 화 되 었 습 니 다.lambda 표현 식 과 방법 인용 은 모두 var 를 사용 할 수 없습니다.기타 var 의 특징
var 는 키워드 가 아니 기 때문에 var 를 사용 하여 변수 이름 을 만 들 수 있 습 니 다.
var var = 2; //Valid Declaration
int var = 2; //Also valid Declaration
var 는 JDK 10 이 도입 한 개념 이기 때문에 아래로 호 환 되 는 것 이 아니다.낮은 버 전의 컴 파일 러 로 var 를 컴 파일 할 수 없습니다.var 는 성능 에 영향 을 주지 않 습 니 다.var 는 코드 컴 파일 러 에서 진행 하 는 유형 으로 추정 되 기 때문에 성능 에 영향 을 주지 않 습 니 다.
본문의 예[https://github.com/ddean2009/
learn-java-base-9-to-20]( https://github.com/ddean2009/ ...
총결산
var 는 JDK 10 에 도 입 된 새로운 특성 이 니 마음 에 드 셨 으 면 좋 겠 습 니 다.
JDK 10 의 새로운 기능 에 관 한 로 컬 변수 유형 var 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 JDK 10 의 새로운 기능 에 관 한 로 컬 변수 유형 var 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 지원 을 바 랍 니 다!