클래스 변수의 접근방법
-클래스 내부에서는 인스턴스 변수같이 기존의 방법과 같다. 이름을 통해 접근한다.
-클래스 외부에서는 생성자를 만들어서 객체를 통해 접근한다. 클래스명으로도 접근가능.
-클래스명으로 접근 가능한 이유?
-인스턴스변수랑 스태틱변수가 나뉜 이유? : 공동으로 유지해야 하는 규격을 인스턴스별로 다르게 할 필요가 없어서 공동 메모리에 올려놓고 똑같이 유지하거나 인스턴스끼리 함께 공유하고 영향을 표현해야하는 변수를 정의 하기 위해서 스태틱변수가 나온 느낌임.
code
static사용방법, 개념
class AccessWay {
static int num;
}
public class Hello {
public static void main(String[] args) {
AccessWay access = new AccessWay();
System.out.println(access.num++);
System.out.println(AccessWay.num);
}
}
code
static활용예제
class InstCnt{ // static이 있고 없고 차이를 보기 위한
// static int instNum = 0;
int instNum = 0;
InstCnt(){ // 객체가 생성될때 마다 변수 값 증가.
instNum++;
System.out.println("인스턴스 생성: " + instNum);
}
}
public class Hello {
public static void main(String[] args) {
InstCnt cnt1 = new InstCnt();
InstCnt cnt2 = new InstCnt();
InstCnt cnt3 = new InstCnt();
// static 있을때 출력값 : 1 2 3 없을때 : 1 1 1
code
static활용예제2
자주쓰는 함수에 대해서는 static을 써서 하는게 소스코드도 간결해지고, 메모리도 절약된다.(객체생성을 안하니까)
Q
main 메소드가 static인 이유는?
-> 인스턴스 생성과 관계없이 제일 먼저 호출되는 메소드다.
main 메소드가 public인 이유는?
-> main 메소드의 호출 명령은 외부로부터 시작되는 명령이다. 단순히 일종의 약속으로 이해한다.
자바에서의 예외는 실행 중간에 발생하는 정상적이지 않은 상황을 뜻한다. 실행은 될 수 있음!
자바는 이와 같은 예외 상황에 대해 예외처리 매커니즘을 제공한다. 문제가 발생한 지점에 대한 정보출력과 프로그램종료이다. 이때 프로그램 종료를 막기위한 예외처리를 아래에서 살펴보자.
- try catch - finary
- trows
✏️code
문법
public static void main(String[] args) {
int a = 0;
try {
a = 1/0;
} catch (Exception e) {
}
System.out.println("트라이캐치 바깥");
System.out.println(a);
}
tyr catch가 없다면 1/0의 연산은 불가하므로 프로그램이 종료된다. 하지만 위와같이 예외처리를 해주면 a = 0에서 멈추고 예외처리 안쪽은 실행되지 않고 출력문은 트라이캐치 바깥 0 이된다.
즉, try이 안은 테스트하는 코드 catch는 try안이 오류라면 구멍을 만들어줘서 빠져나가거나 오류상황을 출력해주는 용도로 쓸 수 있다. 🔽 code
public static void main(String[] args) {
int a = 1;
int b = 0;
try {
b = a / b;
System.out.println("트라이 인" + a);
} catch (ArithmeticException e) {
e.printStackTrace();
System.out.println("캐치" + a);
System.out.println("캐치" + b);
} finally {
System.out.println("파이널리 입니다.");
}
System.out.println("트라이캐치 바깥");
System.out.println(a);
}
💡
e.printStackTrace(); : 디버깅을 위해 catch문 안에 넣어주는 메서드, 오류내용을 출력함.
e.getMessage()
💡 finally : try안이 실행되든 catch안이 실행되든 실행되는 부분
💡 catch는 여러개 쓸 수 있고, 예외사항을 차례대로 해결해나가는 것. 그래서 Exception이 제일 위로 오면 그 밑의 오류객체들은 에러가 난다. 🔽사진참고
try-catch는 예외사항 확인해서 고치려는 느낌이고, throws는 일단 실행은 되게끔(컴파일 오류 안나게) 예외를 넘긴다고 생각하고 이해한다.
✏️문법
public class Test2 {
public static void main(String[] args) throws Exception {
// 일반적 사용법, Exception은 다른 종류의 예외문구로 바뀔 수 있다.
...
}
public void simpleWrite() throws IOException, IndexOutofBoundsException {
// 둘 이상의 예외 넘김에 대한 선언
....
}
여기서 Error는 메모리적 에러를 뜻하기 때문에 자바나 개발자의 능력으로 해결할 수 없어 프로그램이 죽는다.