본문 바로가기

자바(JAVA)
[자바(Java)] static

//Static

- static은 클래스명으로 별도의 영역을 가진다.
    > 하나의 클래스로부터 만들어진 모든 객체가 가지고 있는 공통 영역(공통으로 관리하는 데이터)

- 사용시 객체 생성하여 참조변수로 멤버를 사용하는 것이 아니라 '클래스명.멤버' 로 바로 사용한다.
    ~o  Student.setSchool("역삼중");
    ~x  Student s1 = new Student();
          s2.setSchool("역삼중")

- static 변수, 정적 멤버 변수, 공용 멤버 변수 : 공용 데이터
    <-> 객체 멤버 변수 : 개인 데이터. 개성 有

- static 메서드 내에서는 this 키워드를 사용할 수 없다.
    > 객체 변수나 객체 메서드를 호출할 수 없다.

- 정적 생성자 : static 있는 생성자 > 정적 변수들만 초기화  //개발자가 부를 수 없음.
    <-> 객체 생성자 : static 없는 생성자 > 객체 멤버만 초기화


package com.test.obj.inheritance;

public class Ex54_static {

	/*
	
	1. 클래스 로딩, Class Loading
		- 프로그램을 실행하기 전에, 프로젝트 내의 모든 클래스의 정의를 미리 읽어서 메모리에 올려놓는 작업 > 설계도 인식 작업
		- 설계도를 미리 읽어서 언제든지 사용 가능하게 메모리에 올려놓는 작업
		- 클래스 로딩 과정 중에 클래스 내부에 있는 모든 static 키워드 검색 > 메모리에 구현★★★
		
	2. main 메서드 실행
	
	 */
	
	public static void main(String[] args) {

		//상황] 학생 3명
		// - "역삼 중학교" > 절대 규칙 > 개명 > "대명 중학교"
		
		Student.setSchool("역삼 중학교");
		
		Student s1 = new Student();
		
		s1.setName("홍길동");


		Student s2 = new Student();

		s2.setName("아무개");


		Student s3 = new Student();
		
		s3.setName("하하하");
		
		System.out.println(s1);
		System.out.println(s2);
		System.out.println(s3);

	} //main
	
} //Main

class Student {
	
	private String name;
	private static String school;
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	public static String getSchool() {
		return school;
	}

	public static void setSchool(String school) {
		Student.school = school;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", school=" + school + "]";
	}
		
}

package com.test.obj.inheritance;

public class Ex56_static {

	public static void main(String[] args) {
		
		StaticStudent.setSchool("역삼 중학교");
		
		StaticStudent s1 = new StaticStudent();
		s1.setName("홍길동");
		s1.hello();
		
		System.out.println();
		
		StaticStudent.hi();
	

	} //main
	
}

class StaticStudent {
	
	private String name;		//개인 데이터
	private static String school;	//공용 데이터
	
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public static String getSchool() {
		return school;
	}
	
	public static void setSchool(String school) {
		StaticStudent.school = school;
	}
	
	//학생 개개인이 인사하는 메서드(개별적)
	public void hello() {
		System.out.printf("안녕하세요. 저는 %s입니다.\n", this.name);
		System.out.printf("저는 %s에 다녀요.\n", StaticStudent.school);
	}
	
	//학생 전체가 인사하는 메서드(포괄적)
	public static void hi() {
		System.out.println("안녕하세요. 역삼중학교에 오신 걸 환영합니다.");
	}
	
}

'자바(JAVA)' 카테고리의 다른 글

자바(Java) 정규표현식  (0) 2023.03.03
[자바(Java)] Collection 총 정리  (0) 2023.02.28
[자바(Java)] equals , hashcode  (0) 2023.02.19
[자바(Java)] 동기화  (0) 2023.02.19
[자바(Java)] 디버그(debug)  (0) 2023.02.09