int a; // 인스턴스 변수
static int b; // 클래스 변수
public void method(){
int c = 0; // 로컬 변수
...}
public void method(int a){...} //파라미터
변수는 값이 변수 타입에 맞지 않으면 컴파일 되지 않는다.
new 생성자를 사용해 인스턴스를 만들면 힙 메모리에 그 객체를 위한 공간이 할당된다. 참조 변수는 그 공간에 접근하기 위한 변수이다.
Foo foo = new Foo(); // 여기서 foo가 참조 변수가 된다.
Foo foo = new Foo();
Foo@214c265e //이것이 객체의 참조 값이다.
즉, 참조 변수는 객체나 값을 가리키는데 사용된다.
.
와 참조 변수를 이용해서 객체 멤버(필드, 메서드 등)에 접근할 수 있다.Foo foo = new Foo();
foo.bar; //필드에 접근할 수 있다.
foo.method(); // 메서드에 접근할 수 있다.
👉 기본형 타입은 그 값이 변수에 직접 저장되는 반면 참조 타입은 객체의 참조 값을 저장한다.
👉this
: 현재 객체를 참조하는 참조 변수를 가리킨다.
Foo foo = new Foo();
class Foo{
int bar;
public Foo(int bar){
this.bar = bar1;
//this.bar는 이 객체의 필드를 가리킨다.Foo객체를 참조하는 참조 변수라고 보면 된다.
// 우항에 있는 bar는 지역 변수이다.
}
public class Test{
int a; // 멤버 변수
String b;// 멤버 변수
void method1(){};
char mwthod2(){};
char c;// 멤버 변수
}
public class Test{
int a;
String b;
void method1(){int x=0;};
char mwthod2(){int y = 1;};
// x,y는 지역 변수 이다.
{}안에서 선언된 변수는 {}안에서만 사용할 수 있다.
👉 라이프 타임 : {}이 끝나면 사라진다.
변수 선언시 루프 밖의 변수와 루프 안의 변수의 이름이 달라야 한다.
만약 루프 내의 변수가 끝나고 나면 변수가 없어지기 때문에 루프 밖에서 같은 이름을 사용할 수 있다.
👉 라이프 타임 : 루프가 끝나면 사라진다.
class Test
{
public static void main(String args[])
{
{
int x = 5; // 블럭 밖에서 선언 후
{
int x = 10; // 같은 이름으로 다시 선언 할 수없다.
System.out.println(x);
}
}
}
}
public static void main(String args[])
{
int a = 5;
for (int a = 0; a < 5; a++) // 오류가 남.
{
System.out.println(a);
}
}
class Test {
public static void main(String args[])
{
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
int i = 20; // 루프가 끝났기 때문에 같은 변수 이름을 사용가능함.
System.out.println(i);
}
}
reference
https://docs.oracle.com/javase/8/docs/
https://www.geeksforgeeks.org/reference-variable-in-java/?ref=gcse
https://www.geeksforgeeks.org/variable-scope-in-java/?ref=gcse