태그
#JAVA
JAVA - fina, static
2021년 6월 9일 02:15

final
- 최종적인, 최후의
- 이것이 마지막이다
- 재설정 금지
final의 사용
- 변수 : 한 번 값을 설정하면 그 값이 최종적인 값이 된다 (데이터 변경이 불가)
- 메소드 : 오버라이드 금지, 메소드 재정의 금지(같은 이름의 메소드)
- 클래스 : 상속금지, 불가능
public final class Test01 {
int b;
//final을 붙여 선언한 변수는 생성자 안에서 초기화를 진행해주어야한다
final int a = 0;
public Test01(int a) {
//this.a = a; //초기화가 되지 않아서 error
}
// public final void setData(int b) {
// this.b = b;
// } // 자식이 부모의 메소드를 덮어씌우기가 불가능
public static void main(String[] args) {
final int a;
//System.out.println("a = "+a);
a = 20;
//a = 30; 값을 한 번 설정했기 때문에 error
System.out.println("a = "+a);
}
}
static
- 객체의 생성과 상관 없이 사용되는 멤버
- 클래스를 통하여 접근한다
- static 멤버는 접근 지정자 영향을 받는다
static 사용
- 변수
- 모든 객체가 서로 공유하여 일괄적으로 처리되어야 할 데이터를 저장하는 변수 공간
- 정적 메모리 영역에 공간이 따로 형성되고 모든 객체가 그 공간을 참조하게 된다
- 프로그램이 실행 할 때 공간이 생성되고 프로그램이 끝날 때 공간이 소멸된다
- 모든 객체를 통틀어서 단 하나의 공간만 만들어진다
- 아무리 클래스 내부더라도 static 멤버는 클래스를 통하여 접근하여야 한다
- 메소드
- 객체의 생성과 상관이 없지만 클래스의 기능과 연관이 있는 메소드들을 사용할 때 static 메소드를 만들어준다
- static 메소드는 static 멤버만 사용이 가능하다
- this.가 존재하지 않는다
public class Test {
private int no; // 객체 번호(변수만 공간을 같이 쓴다)
private static int su;
// static 변수
public Test(int no, int su) {
this.no = no;
//this.su = su;
Test.su = su;
}
public void disp() {
System.out.println("no = "+no+"\tsu = "+su);
}
// static 메소드
public static void setSu(int su) {
Test.su = su;
//no = 20; static멤버가 아니기 때문에 error
getSu();
System.currentTimeMillis(); //static
System.out.println(); //static
}
public static int getSu() {
return su;
}
}
static final (상수화 변수)
- 변수 선언시 사용
- 공간의 이름이 있기 때문에 다시 불러올 수 있지만 데이터를 변경할 수 없는 공간
- 프로그램상에서 의미를 가지고 있고 그 의미가 변경되지 않는 데이터를 보다 쉽게 구분하여 사용하기 위해서 사용
public class Main {
public static void main(String[] args) {
System.out.println(Integer.MAX_VALUE); // int -> Integer
System.out.println(Math.PI);
System.out.println(Color.BLACK);
Scanner sc = new Scanner(System.in);
System.out.print("키 입력 : ");
char key = sc.next().charAt(0);
//Character.toLowerCase(key)
switch(Character.toLowerCase(key)) {
case Key.SKILL1:
System.out.println("SKIILL 1");
break;
case Key.SKILL2:
System.out.println("SKILL 2");
break;
case Key.SKILL3:
System.out.println("SKILL 3");
break;
case Key.SKILL4:
System.out.println("SKILL 4");
break;
default:
System.out.println("잘못된 키 입력!");
}
//https://docs.oracle.com/javase/8/docs/api/overview-summary.html
}
}