정적 제한자 static
생성된 위치가 1개로 고정
static
static 제한자는 변수, 메서드(, 클래스)에 적용되는 자바의 키워드이다-생성자엔 불가
static 메서드나 변수는 해당 크래스의 객체 없이도 참조할 수 있다.
호출했을 때 new키워드를 쓰지 않아도 메모리에 알아서 생성해 준다.
고정 1개.
호출하는 방법은 해당 '클래스의 이름.메서드이름'
static 변수-정적 변수(static field)
1. static 변수는 클래스에서 모든 객체들이 공유하는 공유변수가 된다.
2. ★객체 생성 없이 클래스 이름만으로 참조가 가능
마찬가지로 '클래스이름.변수이름'이 가능. 객체 안에 있으면 객체를 생성하고 객체.변수이름도 가능
어떤 계산기를 키더라도 π값은 동일한 것과 같이 생각하면 됨.
숫자들을 증가해주는 count 객체가 있다고 하자,
c1객체에서 a와 b를 증가시키고 c2객체에서 a와 b를 증가시키면
각각 출력했을 때 c1 a는 1증가, c2 a는 1증가지만 b는 2가 증가한다.
package day08.static_.var;
public class Count {
public int a;
public static int b;
}
main
package day08.static_.var;
public class MainClass {
public static void main(String[] args) {
Count c1 = new Count();
c1.a++;
c1.b++;
System.out.println("일반변수:"+ c1.a);
System.out.println("정적변수:"+ c1.b);
Count c2 = new Count();
c2.a++;
c2.b++;
System.out.println("일반변수:"+ c2.a);
System.out.println("정적변수:"+ c2.b);
Count c3 = new Count();
c3.a++;
c3.b++;
System.out.println("일반변수:"+ c3.a);
System.out.println("정적변수:"+ c3.b);
//지금 c1.b은 몇일까? -3
//지금 c2.b은 몇일까? -3
System.out.println("정적변수:"+ c1.b);
System.out.println("정적변수:"+ c2.b);
//static은 객체 생성없이 바로 접근가능하다
Count.b++;
System.out.println(Count.b);//4
}
}
일반변수:1
정적변수:1
일반변수:1
정적변수:2
일반변수:1
정적변수:3
정적변수:3
정적변수:3
4
b는 static변수라서 객체가 여러개여도 하나만 만들어져 있다.
때문에 어떤 객체를 통하든, 또는 클래스이름으로 호출하든 더해진 값이 하나의 변수에 더해진다
반면 a변수는 static변수가 아님. 객체가 생성될 때마다 그 객체 안에 새로운 변수가 생성되는 것.
'JAVA' 카테고리의 다른 글
221013 static 실습 (0) | 2022.10.13 |
---|---|
221013 static 메서드 (0) | 2022.10.13 |
221013 instanceof (0) | 2022.10.13 |
221012 프로그래머스 저주의 숫자 3 Integer.parseint, Integer.toString(), contain() (0) | 2022.10.12 |
221012 다형성 실습 (0) | 2022.10.12 |