static

ming·2023년 5월 27일
0

자바 기초

목록 보기
6/12

static 키워드

  • 자바 프로그램의 실행 과정
    1 소스코드를 작성하고 클래스파일을 생성
    2 클래스 파일을 실행
    3 클래스 로딩 : 프로그램이 실행될 때 인스턴스가 생성되기 위한 정보를 제공해주기 위해서 클래스가 먼저 메모리로 로딩된다.
    4 이때 클래스에 속한 스테틱 변수와 메소드가 같이 로딩됨
    5 메인 메소드가 실행
    6 인스턴스 생성: 힙에 로딩
    7 메소드 호출: 메소드 내에서 선언된 로컬변수가 스택에 생성

  • 클래스에서 : Inner클래스에서만 사용됨

  • 변수에서: 인스턴스에서 공유데이터를 사용할 목적으로 사용

  • 메소드에서 : 객체 없이 메서드를 접근할 목적으로 사용

  • 스테틱 변수는 클래스와 관련있기 때문에 단 한번만 실행되며 프로그램이 실행될 때 생성되고 종료할 때 삭제. 자동으로 기본값으로 초기화.

  • 생성된 모든 인스턴스에서 접근, 공유 가능


스테틱 참고 사이트
https://blog.hubspot.com/website/static-method-java
https://it-mesung.tistory.com/121
package pack2;

public class Product {
	
	private int Price;
	String ProdectDay="2022년1월4일";
	public String name;
	
	static int count=1; //스테틱은 메소드 밖에서 정의한다. 
	
	public Product() {
	}
	
	public Product(String name) {
		this.name=name;
	}
	
	//setter 메소드 : 인스턴스 변수에 저장된 데이터를 수정할 목적으로 사용
    void setDay(String ProdectDay){
    	//this 키워드 - 객체 생성 후에 힙에 생성된 자기 자신의 인스턴스를 의미한다.
    	this.ProdectDay=ProdectDay; // this-> 매개(로컬)변수가 아닌 인스턴스 변수를 가리킴
	}
    void setPrice(int Price){
    	this.Price=Price;
	}
	
    /*public void test() {
    	System.out.println("클래스 일반메소드에서 일반메소드 호출");
    }*/
    public void display() {  //일반멤버는 힙에 생성
		System.out.println("name: "+name + ", ProdectDay:" + ProdectDay + ", Price: "+ Price);
		staticMethod();//일반메소드는 스테틱을 호출할 수 있다. 
		//test();
	}
	
    public static void staticMethod() { //스테틱에 생성
    	System.out.println("난 스테틱 메소드");
    	System.out.println("count: "+count);
    	//System.out.println("ProdectDay: "+ProdectDay); 
    	//display(); 일반메소드를 부를 수 없다.
    	//일반멤버와 생성되는 순서가 다르다. 스테틱은 new 전에 먼저 만들어진다. 
    	//인스턴스 변수도 호출 불가
    }
    //스테틱은 설계도 클래스 이름으로 부르는 게 맞다. 
}
package pack2;

public class ProductMain {

	public static void main(String[] args) {
		System.out.println("\n문제1---------------");
		
		Product Pen = new Product("펜");
		Product Book = new Product("책");

		Pen.setPrice(100);
		Pen.display();
		Pen.setDay("2022년 1월8일");
		Pen.display();
		
		Book.setDay("2022년 1월8일");
		Book.setPrice(200);
		Book.display();
		
		Product Eraser = new Product();
		Eraser.display();
		
		System.out.println("---------------");		
	}
}

0개의 댓글