이것이 자바다 1권
자바 상식.
-자바는 오크(Oak)라는 언어에서 시작되었다.
-자바는 이식성이 높은 언어이다.
-Write once, run anywhere
-자바는 객체지향 언어이다.
-자바는 GC가 메모리를 자동으로 관리한다.
-자바는 멀티스레드 구현이 용이하다.
-java는 byte나 short정수 연산 시 int형으로 변환하여 연산하고 int형으로 반환한다.
-int형은 10진수,8진수,16진수로 대입할 수 있다.
-자바는 모든 문자를 유니코드로 처리한다.
-자바는 한 번의 컴파일로 기계어가 만들어지지는 않는다.
-자바실행환경(JRE) 에 개발도구가 더해진 것이 자바개발키트(JDK)이다.
-자바의주석은 //, /* */, /** */ 가 있다.
-short 타입은 C언어와의 호환을 위해 주료 사용한다.
-실수는 부동소수점 방식으로 저장한다.
-Integer 등 , 원시타입의 래퍼클래스에는 MAX_VALUE, MIN_VALUE, SIZE 등의 상수가 있어 값을 체크하는데 사용할 수 있다.
-실수 타입 변환시에는 정밀도가 높은 double타입을 사용하는 것이 좋다.
-무한대는 Infinity 숫자가 아닌 값은 NAN(Not a Number) 이다.
-제어문에서 {}중괄호 생략이 가능하나 중괄호를 사용하는 것이 가독성 및 에러방지 차원에서 좋다.
-switch문 조건값에 String타입도 가능하다.
-for문에서 초기화식과 증감식은 ,컴마로 구분하여 두 개 이상 사용할 수 있다.
-JVM은 운영체제로부터 할당받은 메모리(Runtime data area)를 메소드(클래스,스태틱)영역, 힙영역, 스택영역으로 구분하여 사용한다.
-메소드영역에서 클래스 파일의 바이트코드가 로드된다.
-메소드영역은 클래스영역, 스태틱영역이라고도 한다.
-힙영역에서 GC가 활동한다.
-자바는 개발자가 직접 코드로 객체를 제거할 수 없다.
-스택영역은 JVM 내의 스레드 마다 하나씩 존재한다.
-스택영역 내에는 메소드를 후입선출하는 프레임이 있고 프레임 내에는 로컬 변수를 후입선출 스택이 있다.
-자바에서 배열은 객체로 취급된다.
-널은 객체를 참조하지 않는다는 뜻이다.
-객체간에는 집합, 사용, 상속 관계가 있다.
-필드는 객체 생성 시 자동으로 기본값으로 초기화된다.
-자바에서 this는 객체 자기 자신이다.
-생성자 첫 줄에서 this()를 통해 다른 생성자를 호출할 수 있다.
-자바에서 super는 부모이다.
-메소드 선언부를 메소드 시그니처라고 한다.
-메소드 매개변수로 int ... values 를 사용하면 매개변수를 배열로 받을 수 있다.
-객체마다 가지고 있을 필요가 없는 공용적인 데이터는 정적(static)필드로 선언하는 것이 좋다.
-인스턴스 필드는 생성자 및 세터에서 초기화한다.
-정적 필드는 객체 없이 사용할 수 있다.
-정적 필드는 static block에서 초기화한다.
-패키지가 선언된 클래스는 javac -d 경로 .java 로 컴파일한다.
-import 시 하위패키지 내의 클래스는 import 대상이 아니다.
-어노테이션은 컴파일러 문법체크, 런타임 시 특정 기능, 코드 자동 생성을 위한 정보 제공 등의 목적으로 사용한다.
-어노테이션의 멤버는 엘리먼트(element)이다.
-클래스 로더를 통해 읽어와 메소드영역에 저장한 클래스 정보에서 런타임 시 클래스에 대한 메타 정보를 얻을 수 있는데 이를 리플렉션(Reflection)이라고 한다.
-실행중인 클래스와 인터페이스 들에 대한 정보는 Class 클래스를 이용해 알 수 있다.
-자바는 다중 상속을 허용하지 않는다.
-자식 생성자의 맨 첫 줄에 super()로 부모 생성자가 호출된다.
-메소드 선언부를 메소드 시그니처라고 한다.
-오버라이드 시 접근제한을 더 강하게 할 수 없다.
-final클래스는 상속할 수 없다.
-final메소드는 오버라이드할 수 없다.
-자식타입을 부모타입으로 자동변환 시 부모타입에 선언된 멤버만 사용 가능하다.
-부모타입을 자식타입으로 강제 타입 변환 시 instanceof 연산자를 사용하여 확인한다.
-추상클래스는 객체 생성이 불가하다.
-추상클래스는 설계시 멤버명 통일을 위한 목적으로 사용한다.
-추상클래스는 실체 클래스 작성 시간 절약 목적으로 사용한다.
-추상메소드는 몸통이 없고 오버라이드해야한다.
-인터페이스도 컴파일을 하면 .class파일이 된다.
-자바8이전 인터페이스는 추상메소드와 상수 선언만 가능하였다.
-자바8이후 인터페이스에는 디폴트에소드와 정적메소드 선언이 가능하다.
-인터페이스의 필드는 public static final이다.
-구현 클래스의 메소드는 public만 가능하다.
-인터페이스의 추상메소드를 모두 오버라이드 하지 않으면 해당 클래스는 추상클래스가 된다.
-익명구현객체로 소스파일 없이 객체 생성이 가능하다.
-익명구현객체는 컴파일 시 파일명$1.class의 형식으로 만들어진다.
-인터페이스는 다중상속이 가능하다.
-클래스 내부에 클래스를 가질 수 있다.(Nested Class)
-중첩클래스에는 인스턴스멤버클래스, 정적멤버클래스,로컬클래스가 있다.
-로컬클래스에서 사용하는 매개변수나 로컬변수는 final의 특성을 갖는다.
-익명객체는 UI이벤트처리나 스레드 객체 생성 시 주로 활용한다.
-로컬클래스오 익명클래스는 클래스 이름의 존재 여부만 다를 뿐 동작방식은 동일하다.
-개발자가 대처할 수 없는 오류는 에러, 사용자 조작 및 개발자 잘못으로 인한 오류는 예외라고 한다.
-다중 catch 시 하위 예외를 위에 써주어야 한다.
-throws는 메소드를 호출한 곳으로 예외를 떠넘긴다.
-java.lang패키지는 import없이 사용할 수 있다.
-자바의 최상위 조상클래스는 Object이다.
-객체 메모리 번지를 이용하여 해시코드를 만들어 객체를 비교한다. hashCode()
-String은 문자열이 같은 경우 같은 hashCode를 리턴한다.
-toString()은 객체 문자 정보이며 클래스명@16진수해시코드를 반환한다.
-객체소멸자를 오버라이드하여 객체 소멸 시 동작을 정의할 수 있다. finalize()
-exit()로 JVM을 종료할 수 있다.
-System.gc()로 빠른 쓰레기 수거를 요청할 수 있다.
-런타임 시 클래스 이름이 결정되는 경우 newInstance()로 동적으로 객체를 생성할 수 있다.
-Class.forName("런타임 시 결정되는 클래스 이름")으로 이름을 결정한다.
-영어는 1바이트 한글응ㄴ 2바이트이다.
-문자열을 +연산자로 결합하면 String객체가 늘어나 성능이 저하된다.
-StringBuffer는 멀티스레드에 적합하다.
-Format클래스로 문자열 패턴을 정할 수 있다.
'개발 > JAVA' 카테고리의 다른 글
[Java] int[] -> Integer[] -> ArrayList<Integer> -> int[] (0) | 2023.06.08 |
---|---|
[Java] 자바 상식2 (0) | 2023.05.17 |
[JAVA] 정규표현식(Regular Expression) (0) | 2022.07.06 |
[JAVA] 싱글톤 (1) | 2022.06.21 |
[JAVA] 다형성 (3) | 2022.05.23 |