Java

JAVA 자주 까먹는 것들

Yukart 2022. 2. 25. 11:04
반응형

자주 발생하는 예외

  • ArithmeticException : 정수를 0으로 나눌 때
  • NullPointerException : null 레퍼런스를 참조할 때
  • ClassCastException : 변환 할 수 없는 타입으로 객체를 변환 할 때
  • OutOfMemoryException : 메모리 부족
  • ArrayIndexOutOfBoundsException : 배열의 범위를 벗어난 접근 시
  • IllegalArgumentException : 잘못된 인자 전달 시
  • IOException : 입출력 동작 실패 또는 인터럽트 시 발생
  • NumberFormatException : 문자열이 나타내는 숫자와 일치하지 않는 타입의 숫자로 변환 시

OverLoading

메소드 명과 인자가 같으면서 return 값만 다른 경우 컴파일 오류가 발생한다.

Garbage

Person a, b;
a = new Person("이몽룡")
b = new Person("성춘향")
b = a; // b가 가리키던 객체는 가비지가 됨 (성춘향)

Garbage Collection 강제 수행

System.gc(); // 가비지 컬렉션 작동 요청
Runtime.gc();

강력한 제안을 할 뿐 강제 작동을 시키는 것은 아니다. JVM이 판단하여 적절한 시점에 작동 시킨다.

super, this 의 사용

생성자 코드의 첫 라인에 와야한다.

class B extends A {
	public B() {
		System.out.println("생성자B");
	}
	public B(int x) {
		super(x);
		System.out.println("매개변수생성자B" + x);
	}
}

Casting

캐스팅(Casting) 이란 개발자가 프로그램 코드로 행하는 강제 타입 변환

  • upcasting : 자식 클래스가 부모 클래스 타입으로 변환 되는 것
  • downcasting : 다시 원래대로 돌리는 것
Person p = new Person;
Student s = (Student)p;

instanceof

객체 레퍼런스가 가리키는 객체가 해당 클래스 타입이면 결과 값을 boolean 타입으로서 return 해준다.

Override

메소드 오버라이딩에서 메소드 이름 과 매개 변수는 같으나 리턴 타입만 다를 수는 없다.

추상클래스

추상클래스의 인스턴스를 생성할 수 없다.

인터페이스

서로 다른 하드웨어 장치들이 상호 접속하여 데이터를 주고 받을 수 있는 규격을 의미

인터페이스는 메소드와 상수만을 가지며 필드는 가지지 않는다. 메소드는 모두 추상 메소드이다. 그러나 메소드 선언 시 abstract 키워드를 생략 할 수 있다.

모든 메소드는 public 이며 생략 가능하다.

상수도 public static final 을 생략 가능 하다.

인터페이스 끼리의 상속도 가능하다.

레퍼런스 변수를 만드는 것도 가능하다. ex) Car car;

 

스레드 관리 정보

스레드 이름 String 스레드 이름으로서 사용자가 지정

스레드 ID int 스레드 고유의 식별자 번호
스레드의 PC(Program Count) int 현재 실행 중인 스레드 코드의 주소
스레드 상태 int NEW, RUNNABLE, WAITING, TIMED_WAITING, BLOCK, TERMINATED 등 6개 상태 중 하나
스레드 우선순위 int 스레드 스케줄링 시 사용되는 우선순위 값으로서 1 ~ 10 사이의 값이며 10이 최상위 우선순위
스레드 그룹 int 여러 개의 자바 스레드가 하나의 그룹을 형성할 수 있으며 이 경우 스레드가 속한 그룹
스레드 레지스터 스택 int 스레드가 실행되는 동안 레지스터들의 값

데몬 스레드

JVM이 스스로 필요에 의해 사용하는 스레드이다. 대표적인 예로 GC가 있다.

내가 작성한 스레드도 데몬 스레드로 표시하여 JVM이 인식하게 할 수도 있다.

일반 스레드가 모두 종료되면 데몬 스레드가 살아 있더라도 프로그램은 종료된다.

스레드 상태

  • NEW

스레드가 생성되었지만 아직 실행할 준비가 되지 않은 상태이다. start() 메소드가 호출되면 RUNNABLE 상태가 된다.

  • RUNNABLE

스레드가 현재 실행되고 있거나 실행 준비되어 스케줄링을 기다리는 상태이다.

  • WAITING

스레드가 어떤 Object 타입의 객체 a에 대해 a.wait()을 호출하고 무한 대기하면서 다른 스레드가 a.notify(), a.notifyAll()을 불러주기를 기다리고 있는 상태이다. 스레드 동기화를 위해 사용된다.

  • TIMED_WAITING

스레드가 sleep(int n) 을 호출하여 n밀리초 동안 잠을 자고 있는 상태이다.

  • BLOCK

스레드가 I/O 작업을 요청하여 I/O 작업이 완료되기를 기다리는 상태이다.

  • TERMINATED

스레드가 종료한 상태이다. 더이상 다른 상태로 바뀔 수 없다.

만일 실행중인 스레드의 코드에 yield()를 호출하는 부분이 있다면 이는 다른 스레드에게 양보하겠다는 의미이며 JVM은 해당 스레드를 RUNNALBE 상태로 변경시키고 다시 스레드 스케줄링을 실시한다.

반응형

'Java' 카테고리의 다른 글

Spring Cloud Config 란 무엇인가  (0) 2022.11.20
WAS란 그리고 그 종류들  (0) 2022.06.20
Java Thread 기초  (0) 2022.02.04
java 자주 발생하는 예외  (0) 2022.02.04
Java 메모리 영역(Static, Stack, Heap)  (0) 2022.01.11