//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 |