정적
이라는 의미로,고정된
이란 뜻을 가짐.
Static 영역에 할당된 메모리는 모든 객체가 공유하여, 하나의 멤버를 어디서든 참조할 수 있는 장점을 가집니다.
하지만 Garbage Collector의 관리 영역 밖에 존재하기 때문에 프로그램 종료시까지 메모리가 할당된 채로 존재합니다. 시스템 성능에 악영향을 줄 수도 있습니다.
공용로 사용하고 싶은 필드나 메소드에 static 키워드를 붙여 선언합니다.
static int num = 0; //타입 필드 = 초기값
public static void static_method(){} //static 리턴 타입 메소드 {}
lass Number{
static int num = 0; //클래스 필드
int num2 = 0; //인스턴스 필드
}
public class Static_ex {
public static void main(String[] args) {
Number number1 = new Number(); //첫번째 number
Number number2 = new Number(); //두번쨰 number
number1.num++; //클래스 필드 num을 1증가시킴
number1.num2++; //인스턴스 필드 num을 1증가시킴
System.out.println(number2.num); //두번째 number의 클래스 필드 출력
System.out.println(number2.num2); //두번째 number의 인스턴스 필드 출력
}
}
1
0
class Name{
static void print() { //클래스 메소드
System.out.println("내 이름은 이하린입니다.");
}
void print2() { //인스턴스 메소드
System.out.println("내 이름은 사밀이입니다.");
}
}
public class Static_ex {
public static void main(String[] args) {
Name.print(); //인스턴스를 생성하지 않아도 호출이 가능
Name name = new Name(); //인스턴스 생성
name.print2(); //인스턴스를 생성하여야만 호출이 가능
}
}
내 이름은 이하린입니다.
내 이름은 사밀이입니다.
변수에 Final
을 붙이면 시간이 지나도 처음 정의된 상태가 변하지 않는것을 보장한다는 의미입니다.
final String hello = "Hello world";
final String hello = "Hello world";
hello = "See you around" // 에러 발생
class AAA {
final String hello;
AAA() {
hello = "hello world";
}
}
final class AAA {
final String hello;
AAA() {
hello = "hello world";
}
}
class AAA {
final String hello = "hello world";
final String getHello() {
return hello;
}
}
abstract- '추상의' 또는 '미완성의' 의미를 가지고 있다.
접근 제어자 | 설명 |
---|---|
public | 외부 클래스 어디서나 접근할 수 있다. |
protected | 같은 패키지 내부와 상속 관계의 클래스에서만 접근할 수 있고 그 외 클래스에서는 접근할 수 없다. |
default | 같은 패키지 내부에서만 접근할 수 있다. |
private | 같은 클래스 내부에서만 접근할 수 있다. |