ex)int,boolean,char,double 등
변수가 값 자체를 보관하고 있다.
int a = 3;
int b = a;
System.out.println(a); // 3 출력
System.out.println(b); // 3 출력
a = 4;
System.out.println(a); // 4 출력
System.out.println(b); // 3 출력
b = 7;
System.out.println(a); // 4 출력
System.out.println(b); // 7 출력
변수가 값 자체를 보관하고 있기 때문에 int b=a; 를 선언 하였더라도
b값을 바꾸면 그 즉시 b값 자체만 변화한다.
Person,String,int[] 등
변수는 값이 보관되고있는 영역을 가리킴(c언어의 포인터 역할)
Person p1, p2;
p1 = new Person("강호동", 45);
p2 = p1;
p2.setName("이수근");
System.out.println(p1.getName()); //"이수근" 출력
System.out.println(p2.getName()); //"이수근" 출력
p1 과 p2는 값이 보관되어있는 영역(주소)를 가리키기 때문에
p1=p2를 하고 p2의 값만 바꿔주어도 자동적으로 p1의 값도 변화한다.
int[] a = new int[3];
int[] b = a;
a[0] = 1;
b[0] = 2;
System.out.println(a[0]); //2 출력
System.out.println(b[0]); //2 출력
배열도 참조형으로 볼 수 있는데
마지막에b[0]=2; 를 함으로써 배열 a 와 b의 0번 인덱스가 모두 2로 바뀌었다.
final double pi = 3.141592;
pi = 2.54;
위의 코드는 오류가 발생한다. final로 작성된 변수 pi를 더이상 바꿀 수 없기 때문이다.
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
public static void main(String[] args) {
final Person p1 = new Person("강호동");
p1.setName("이수근");
System.out.println(p1.getName());
}
}
위의 코드는 문제 없이 실행된다. final로 선언된 변수가 p1의 name이 아닌
p1 자체이기 때문에 p1의 name은 문제없이 변수의 값을 바꿀 수 있다.
만약 처음에 name을 final로 선언해주었다면 오류가 발생했을 것이다.
--private를 public final로 바꿔주면 좋은점--
따로 getter,setter 메소드 작성을 할 필요없다
다른 변수들과 똑같이 가져와 사용할 수 있지만 값 변경이 되지않는다
프로그램 실행중 오류로 인해 프로그램이 종료될때
종료시키지 않고 끝까지 프로그램을 동작시키려고할 때 많이 사용된다.
try{오류가 발생하지 않았을 때 실행시킬 곳
}catch(발생한 오류의 종류를 인스턴스로 받는다 ex)ArrayIndexOutofBoundsException)
{오류가 발생했을때 실행시킬 곳}
위와 같이 실행할 수 있다.