Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- spring
- 서버개발캠프
- 스프링
- Redis
- Transaction isolation level
- 서버
- 암호화
- spring security
- 안드로이드
- JPA 낙관적락
- 낙관적락 비관적락 차이
- annotation
- JPA 동시성
- Optimistic Lock
- Pessimistic Lock
- 스프링 로그
- bean
- Android
- component
- 스프링 log
- Inno DB
- JPA Lock
- flask
- JPA 비관적락
- 개발
- JPA
- 디자인 패턴
- 스마일게이트
- 캠프
- spring security 인증
Archives
- Today
- Total
모르는게 많은 개발자
[JAVA] final, static 키워드 정리 본문
반응형
이번 포스팅에서 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
반응형
'자바' 카테고리의 다른 글
[Java8] Stream, Optional 개념/예제 (0) | 2020.12.02 |
---|---|
[Java] 함수형 인터페이스, 람다 표현식 개념/예제 (3) | 2020.11.27 |
[JAVA] Garbage Collection 정리(과정/방식) (0) | 2020.06.11 |
[JAVA] JVM 개념 및 구조 (0) | 2020.06.09 |
[Java]String과 StringBuilder, StringBuffer 차이/예제 (0) | 2020.05.05 |
Comments