자바
[JAVA] final, static 키워드 정리
Awdsd
2020. 7. 19. 23:29
반응형
이번 포스팅에서 final, static에 대해 정리해보려 한다.
1. final
final 키워드는 변수, 메소드, 클래스에 사용할 수 있다.
변수
- 변수에 final 키워드를 붙이면 그 변수는 한번만 초기화 가능 및 수정 불가능
public class Main {
public static void main(String[] args){
final int a = 1; //1로 초기화
final int b;
b = 2; //b를 선언하고 2로 초기화
a = 2; //이미 선언되었기 때문에 Error
}
}
- 클래스 변수에 final을 사용하면 생성자를 통해 값을 할당 가능
public class Sample {
private final int test;
private int test1;
//생성자를 통해 값할당
public Sample(int test){
this.test = test;
this.test1 = test1;
}
//set함수를 통해 값할당 불가능
public void setTest(int test){
this.test = test; //Error
}
public void setTest1(int test1) {
this.test1 = test1;
}
}
- 객체 변수에도 final을 사용하면 한번만 객체 할당이 가능
- 할당된 객체의 값을 변경가능
public class Main {
public static void main(String[] args){
final Sample sample = new Sample(1, 2);
sample = new Sample(1, 2); //Error
sample.setTest1(3); //final이라도 할당된 객체의 값은 변경 가능
}
}
메소드
- 메소드에 final을 붙이게 되면 그 메소드는 오버라이드가 불가능
- 메소드의 기능을 수정하지 못하게 할 때 사용
public class Sample {
public Sample(){
}
public final void print(){
}
}
public class SampleSub extends Sample{
public SampleSub(){
super();
}
//override가 안되기 때문에 Error
public void print(){
}
}
클래스
- 클래스에 final을 사용하면 그 클래스는 상속이 불가능
public final class Sample {
public Sample(){
}
}
public class SampleSub extends Sample{ //에러
public SampleSub(){
super();
}
}
2. static
static을 쓴다는 것은 static을 사용한 필드의 메모리 할당을 컴파일 시간에 한다는 뜻
static 멤버 변수
- 클래스의 변수에 static을 붙이게 되면 해당 클래스의 인스턴스들은 이 변수의 메모리를 공유
- 클래스 멤버라고도 불림
- 인스턴스를 생성하지 않고 사용가능 (ex: class.변수)
public class Main {
public static void main(String[] args){
Sample b = new Sample();
Sample c = new Sample();
b.print(); //static 변수 1증가
c.print();
}
}
public class Sample {
public static int a = 1;
public void print(){
System.out.println(a);
a++;
}
}
출력
1
2
static 메소드
- 클래스 메소드라 불림
- 클래스이름을 통해 실행 가능 (ex: class.메소드이름)
- static변수와 마찬가지로 인스턴스 생성없이 실행 가능
- static메소드에서는 일반 변수를 사용할 수 없음
- 오버라이드 불가능
public class Main {
public static void main(String[] args){
Sample.print();
Sample.print();
}
}
public class Sample {
public static int a = 1;
public static void print(){
System.out.println(a);
a++;
}
}
출력
1
2
반응형