stack(스택) : 밑이 막힌 상자. 위에 차곡차곡 쌓인다.
스택이란?
- 메서드 수행에 필요한 메모리가 제공되는 공간
- 메서드가 호출되면 호출스택에 메모리 할당, 종료되면 해제
<특징>
하나의 스택에서는 하나의 메서드만 실행되고, 나머지 메서드는 대기하게 된다.
변수의 값을 읽기만 할 수 있다.
<예시>
예시로 함수내에서 일반적으로 생성하는 지역변수가 있다.
ex_) 지역변수 x=10;
고쳐서 사용할 수 있는게 아니라 읽는행위만 한다고 봐야한다.
변수의 값을 읽고 변경할 수 있다.
<예시>
예시로 함수 내에서, 메인메서드에서 선언한 인스턴스변수 d에서
ex_) d.x = 1000;
를 호출한 것
static 안에 있으면 참조변수는 필요 없다.
같은 클래스내에 있어도 참조변수는 필요 없다.
객체 생성 없이 호출이 가능하다.
Q. static 메서드는 static메서드 호출 가능?
A. 네
Q. static메서드는 인스턴스 변수 사용 가능?
A. 아니오.
Static메서드는 객체 생성 여부와 관계 없이 호출이 가능하다.
반면에, 인스턴스 변수는 객체 생성 후 호출이 가능하다.
따라서 Static메서드 안에 인스턴스변수를 객체생성 없이 넣는다면 에러가 난다.(객체 생성을 해야되니까)
Q. 왜? static 메서드는 인스턴스 멤버를 쓸 수 없나요?
A. static 메서드 호출시 객체(iv묶음)이 없을 수도 있어서.
부모의 변경은 자손에 영향을 미치나,
자손의 변경은 조상에 영향을 미치지 않는다.
Java는 단일 상속만을 허용한다.
따라서, 비중이 높은 클래스 하나만 상속관계. 나머지는 포함관계.
public class InheritanceTset{
public static void main(String[] args) {
Circle c = new Circle();
System.out.println(c.toString); // "Circle@15db9742"
System.out.println(c); // "Circle@15db9742"
}
}
equals(Object obj)
hashCode()
<실행조건>
- 선언부(반환타입, 메서드이름, 매개변수 목록)가 조상 클래스 메서드와 일치해야한다.
- 접근제어자를 조상클래스 메서드보다 좁은 범위로 변경할 수 없다.
1c0-b1bc-4f4b-81ef-5ae62c3a02ab/Untitled.png)
this랑 비슷하다.
⇒지역변수와 인스턴스변수를 구별할 때 사용
부모와 자식의 메서드 이름이 x로 같다면,
자손의 생성자 메서드를 만들 때 부모의 생성자메서드를 호출해야한다.
그러기 위해 super()를 쓴다.
bin으로이동해야 클래스를 열수있다.(패키지루트. 패키지 시작폴더의 상위 폴더.)
cmd
java com.codechobo.bookPackageTest
기본이 되는 패키지
import문 작성방법
import 패키지명.클래스명;
혹은
import 패키지명.*; //모든 클래스
import java.util.*; //자바 유틸 패키지의 모든 클래스
import java.*;// 자바패키지의 모든 클래스(패키지는 포함 안됨)
|
import static java.lang.Integer.*; //Integer클래스의 모든 static메서드
import static java.lang.Math.random;//Math.random()만 괄호 안붙임.
import static java.lang.System.out; //System.out을 out만으로 참조 가능
System.out.println(Math.random());
⇒ out.println(random());
제어자의 종류
접근제어자
- public
- protected
- default
- private
그외
- static
- final
- abstract
- native
- transient
- synchronized
- volatile
- strictfp
아래 요소 앞에 붙을 수 있다.
멤버변수
메서드
iv 앞에 static 붙으면 cv가된다
간단초기화, 복잡초기화 수행할 때 쓴다.
간단초기화
static in width = 200;
복잡초기화
static{
}
static변수 내에서는 iv와 instance메서드 사용할수없다.
왜냐하면, iv는 객체를 만들고 나서 쓸 수 있기 때문