final, static

2014. 11. 10. 01:58Basic/etc

반응형

1. final 제한자

final은" 마지막 값이다. 변경 될수 없다"는 의미로

클래스 앞에 붙으면 더 이상 상속될수 없다.

메서드 앞에 붙으면 더 이상 오버라이딩 될 수 없다.

변수(멤버, 지역, static) 앞에 붙으면 더 이상 값을 변경할 수 없다.(상수가 됨)

2. static final / final static (final과 static은 순서와 상관없다)

final 변수는 그 값을 절대 바꿀 수 없다. 그럼 static과 final이 함께 붙어있으면?

보통 pulbic 접근제어자와 함께 사용되어 어떤 코드에서든지 접근 가능한 상수를 만들때 public static final 변수를 사용한다.

다음 클래스의 MAX_GRADE변수는 객체를 생성하지 않아도 어떤 코드에서도 School.MAX_GRADE 형태로 호출이 가능하다


  1. public class School{
  2.     public static final int MAX_GRADE = 6// 정적변수의 이름은 대문자와 "_"를 보통 사용한다.
  3. }
  4. public class MainTest{
  5.     public static void main(String[] args){
  6.         System.out.println(School.MAX_GRADE);
  7.     }
  8. }

3. final로 지정된 static 변수 초기화 방법

  1. public class School{
  2.     public static final int MAX_GRADE = 6;
  3. }
  4.  
  5. public class School{
  6.     public static final int MAX_GRADE;
  7.     // 정적변수도 선언만하고 초기화 하지 않으면 이 클래스의 생성자가 호출되어야지만
  8.     // 객체변수와 마찬가지로 타입에 따라 디폴드값인 0, 0.0, false, null로 초기화된다.
  9. }
  10.  
  11. 그럼 다름과 같은 형태의 정적변수를 초기화 하는 방법은?
  12.  
  13. public class Data{
  14.     pulbic static final int[] GRADE = {1,2,3,4,5,6};
  15.     public static final int[] OTHRE_NUM = ? // 0~99 까지의 100개의 배열값 이라면?
  16.     public static final double RANDOM_VALUE = ?; // 정해지지 않은 형태의 상수값 이라면?
  17. }
  18.  
  19. 자바언어에는 static블럭 이라는 클래스 로딩시점에 실행되는 코드 블럭이 있다. 사용방법은 다음과 같다.
  20.  
  21. public class Data{
  22.     public static final int[] OTHRE_NUM = ? // 0~99 까지의 100개의 배열값 이라면?
  23.     static{
  24. OTHRE_NUM = new int[100];        
  25. for(int i=0; i<100; i++){
  26.             OTHER_NUM[i] = i;
  27.         }    
  28.     }
  29. }
  30.  
  31. public class Data{
  32.     public static final double RANDOM_VALUE = ?;  
  33.     static{
  34.         RANDOM_VALUE = Math.random();
  35.         // Math클래스의 정적random메서드는 0.000... ~ 0.9999... 사이의 랜덤값을 반환한다.
  36.     }
반응형

'Basic > etc' 카테고리의 다른 글

[Android] Service 사용법  (0) 2014.12.27
클래스와 객체  (0) 2014.11.10
객체의 생성, 생성자  (0) 2014.11.10
싱글톤 패턴  (0) 2014.11.10
extends 와 implements의 차이?  (0) 2014.11.09