본문 바로가기

JAVA공부(이것이 자바다)

클래스 이어서

정적블록

정적필드를 초기화해주기 위해서 써주는 블록이다. main보다 먼저 클래스가 로딩될때 실행된다.

static{

}

정적블록은 클래스가 메모리로 로딩될때 자동으로 실행된다. 정적블록이 여러개라면 선언된 순서대로 실행된다.

 

정적메소드

정적메소드와 정적 블록에서 인스턴스 멤버를 사용하려면 객체를 먼저 생성하고 참조변수로 접근해야한다.

 

final

프로그램 실행 도중에 수정할 수 없게 하기 위해서 사용하는 변수를 상수화 하기 위한 키워드이다.

초기화

1. 필드 선언시에 초기값 대입

2. 생성자에서 초기값 대입

--> 초기화하지 않고 그대로 두면 컴파일에러

 

상수 선언

상수는 모든 객체에서 하나만 필요한 경우가 많다. 그래서 static변수로 선언해주면 부가적인 메모리를 잡아먹지 않는다.

static final 타입 상수 = 초기값;

이렇게 static으로 final을 선언할 경우 static 블록으로 초기화할 수 있다.

 

패키지

패키지는 클래스의 일부분이고 클래스를 식별하는 용도로 사용된다. 개발 회사의 도메인 이름의 역순으로 만든다.

com.tistory.~

 

import문

import를 하면 클래스안의 함수를 사용할 수 있는데 만약 중복된 클래스명으로 존재할 경우 하나는 import하고 하나는 함수가 있는 패키지명으로 실행해줄 수 있다.

import ch06.sec12.hankook.Tire;

Tire tire1 = new Tire();
ch06.sec12.kumho.Tire tire2 = new ch06.sec12.kumho.Tire();

*을 쓰면 하위 패키지 말고 현 패키지의 파일만 포함된다.

import com.hankook.*;

 

접근제한자

클래스 - public, default만을 쓸수 있다.

public - 아무데서나, 외부와 통신할때

protected - 같은 패키지거나, 자식객체만 사용가능

default - 같은 패키지

private - 객체 내부에서만

 

생성자 접근제한

private, protected, private, default

생성자를 클래스 내부에서만 사용할 수 있다. 한개의 객체만 생성해서 사용할 싱글톤을 구성할 때 사용한다.

private 생성자가 있으면 public static 클래스 getInstance()함수가 같이 있어 하나의 객체만을 참조변수들에 전달해서 사용할 수 있다. (하나의 객체, 여러개의 참조변수)

public class A {
	private static A singleton = new A();
	private A(){

	}
   	public static A getInstance(){
    	return singleton;
    }
}

 

getter/setter

private로 선언된 필드를 접근하게 하는 함수이다. setter 메소드 안에서 대입할 값의 범위를 지정해주면 된다.~

private int speed;
private boolean stop;

public int getSpeed(){
	return speed;
}
public void setSpeed(int speed){
	if(speed<0){
    	this.speed = 0;
       	return;
     }else{
     	this.speed = speed;
     }
}

 

 

String은 내부적으로 생성자를 호출해서 객체를 생성한다.

static함수 안에서는 this키워드를 못쓰기 때문에 일반함수, 변수를 사용하지 못한다.

static메소드는 클래스 명으로 접근가능

 클래스명.main(args);//클래스의 main함수 실행

 

JVM

class C{

	A a = new A();
}
class A{

}

위의 코드를 실행하면 메소드영역에 class A와 class C의 main을 포함한 static함수를 올린다. 실행을 하다가 A a = new A();를 만나면 stack영역에 a를 넣어주고 heap영역에 new A()객체를 생성해준다.

 

메소드 영역
static void c()
static void a()
c의 main()
스택영역
a변수
heap
new A()객체~
 

 

 

 

'JAVA공부(이것이 자바다)' 카테고리의 다른 글

상속 이어서  (0) 2023.05.31
상속  (0) 2023.05.30
java참조타입 이어서  (0) 2023.05.26
java의 참조타입  (0) 2023.05.25
java의 연산자와 조건문 반복문  (0) 2023.05.24