클래스 변수
인스턴스를 생성하지 않아도 '클래스 이름.클래스 변수' 와 같은 형식으로 사용가능
클래스 변수는 모든 인스턴스가 공통된 저장공간을 공유, 한 클래스의 모든 인스턴스들이 공통적인 값을 유지해야 하는 속성의 경우 클래스 변수로 선언 ex) 학생 클래스의 학생 인스턴스의 개수
인스턴스 변수
클래스의 인스턴스를 생성할 때 만들이진다.
따라서 인스턴스가 있을 때만 '인스턴스 이름.인스턴스 변수'사용가능
독립적인 저장공간을 가지므로 서로 다른 값을 가질 수 있다. ex) 학생 클래스의 나이,키 등등
지역 변수
메서드 내에 선언되어 메서드 내에서만 사용 가능
for, while 문의 {}안에 생성된 변수들은 {}을 벗어나면 소멸됨
매개 변수
메서드가 호출될 때 생성
메서드 내에서만 사용가능
메서드가 끝나면 소멸
public class Student {
//인스턴스 변수
public int age;
public int height;
//클래스 변수
public static int cnt=0;
public static int money=0;
//생성자
public Student(int age, int height) {
this.age = age;
this.height = height;
cnt+=1; //학생이 생길 때마다 1씩 올려줌
}
}
메서드의 선언부는 메서드의 이름 매개변수 선언 반환 타입으로 구성되어 있습니다
//선언부
static int add(int a,int b)
//구현부
{
int result=a+b;
return result;
}
변수 선언과 달리 타입이 같아도 변수의 타입을 생략할 수 없음
int add(int a,int b) {...}
int add(int a, b) {...} //에러
메서드의 반환타입이 'void'가 아닌 경우 구현부 안에 return이 반드시 포함되어 있어야 함
반환값은 반환타입과 일치하거나 적어도 자동 형변환이 가능해아 함
반환값은 한 개만 가능
반환타입이 'void' 이여도 return문이 필요하지만 컴파일시 자동으로 'return;' 을 추가해줌
메서드를 호출할 때 괄호 안의 값들은 인자
메서드를 선언할 때 괄호 안의 값들은 매개변수
메서드를 호출할 때는 인자의 타입과 매개변수의 타입이 일치하거나 자동 형변환이 가능해야 한다
int add(int a,int b) {
return a+b;
}
int c=add(5,10);