정적블록
정적필드를 초기화해주기 위해서 써주는 블록이다. 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 |