Notice
Recent Posts
Recent Comments
Link
hyeongwoo's blog
[Java] final 본문
자바에서 final키워드는 변수 앞에 붙거나 메소드의 반환형 앞에 붙는다.
자바에서 final 키워드가 변수앞에 붙으면 그 변수는 한번 초기화되면 다시는 변경할 수 없는
상수가 된다.
메소드내 지역변수 앞에 final이 붙으면 최초 초기화후 변경이 불가하다.
final int a=2; //상수
또한 멤버 변수에도 final이 붙을수 있는데 이때도 최초에 초기화후 변경이 불가하다
하지만 인스턴스별로 생성되는 멤버 변수가 다르기 때문에 인스턴스를 참조하는 객체에서만
변경이 불가하고 객체별로는 다른 값을 가질 수 있다.
이게 무슨 말이냐면
public class 클래스1{
private final int a;
//final 멤버변수는 반드시 생성자에서 초기화 해주어야한다.
public 클래스1(int a){
this.a=a;
}
public void setA(int a) {
//this.a=a //다시 초기화 불가 에러!!!
}
public int getA(){
return a;
}
public static void main(String args[]){
클래스1 c1=new 클래스1(2);
클래스1 c2=new 클래스1(3);
---- 인스턴스별로는 다른 값을 가질 수 있다.
}
}
엄밀히 말하면 클래스 전체로볼때는 상수역할은 하지 못한다.
하지만 모든 객체들이 한개의 값만 가지게 할 수 있도록 하는 방법이 있는데
static final 선언이다.
static 변수는 모든 클래스가 공유하는 변수이고 거기에 final을 붙여버리면 클래스당 딱 한번만 초기화가 가능하므로
클래스범위에서 상수 역할을 할 수 있다. static final 변수는은 static영역과 인스턴스 영역의 메모리 초기화 시점 차이 때문에 생성자로 인스턴스 단위로 초기화가 불가하다.
public class 클래스1{
private static final int a=2;//static final 변수는 즉시 초기화 한다. //생성자에서 초기화 불가
//한번 초기화 하면 변경 불가
public 클래스1(){
}
public static void (int a1){
// a=a1;//다시 초기화 불가
}
public static int getA(){
return a;
}
public static void main(String args[]){
클래스1 c1=new 클래스1();
클래스1 c2=new 클래스1();
System.out.println(클래스1.getA()); //클래스로 접근
System.out.println(c1.getA());
System.out.println(c2.getA());
//모든 클래스영역이 공유한다.
}
}
final 키워드는 메소드에도 사용할 수 있는데 메소드에 사용하게 되면 상속된 클래스에서 메소드 재정의가 불가하다
주의할것은 상속은 가능하다. 재정의가 안되는 것이다.
public class Main{
class A{
public final int a(){
return 1;
}
public int b(){
return 2;
}
public final int c(){
return 3;
}
}
class B extends A{
//public int a(){} // final 서브클래스에서 재정의 불가
public int b(){
System.out.Println("재정의 함수");
return 3;
}//재정의가능
}
public static void main (String[] args){
A a = new A();
B b = new B();
b.b(); //재정의 함수 호출
b.c(); //재정의 안하고 단순 상속은 가능
}
}
'JAVA' 카테고리의 다른 글
[Java] 컬렉션 (0) | 2024.02.12 |
---|---|
[Java] 제네릭 (0) | 2024.02.12 |
[Java] IO_(입출력스트림) (0) | 2024.02.02 |
[Java] None_Static영역과 Static영역 (0) | 2024.02.02 |
[Java] 다형성 (0) | 2024.01.27 |