자바의 특징
- 운영체제에 독립적(JVM 위에서 돌아감-JVM은 운영체제에 의존적)
- 확장성이 높음(객체지향언어의 특성)
- 자동 메모리 관리(Garbage collection)
- 네트워크와 분산처리 지원, 멀티 쓰레드 지원 (멀티 쓰레드에서 스케줄링은 자바 인터프리터가 담당)
- 동적 로딩 지원(모든 클래스를 실행 시 로딩하지 않고, 필요한 클래스만 실행 중 필요한 시점에 동적으로 로딩함)
- 소스 코드를 자바 컴파일러가 일차적으로 컴파일하여 클래스 파일을 만들고, 이를 자바 인터프리터가 한 줄 씩 해석하여 실행
식별자와 키워드
- 식별자: 개체를 구별하기 위한 이름
- 키워드: abstract, boolean, final과 같이 변수 이름을 붙일 때 사용할 수 없는 자바의 예약어
Primitive Type(기본형)
- byte, short, int, long, float, double, boolean, char
double a = 3.14f;
이면 3.14f가 double로 묵시적 형변환이 됨
- double, float 같은 실수형은 늘 계산 중에 오차가 조금씩 생길 수 있음
- char는 한 글자의 문자, String은 문자열인데 String은 primitive type이 아니라 클래스임 (따라서 String은 괄호()를 이용한 형변환도 불가. 클래스의 메소드를 사용해야함)
String str = new String("ABC");
-> 따라서 문자열은 String 객체임.
-> 문자열 출력은 System.out.println(str.toString());
메서드가 생략된 것. 이때 toString은 Object 클래스의
toString을 오버라이딩한 것.
Reference Type(참조형)
타입 간의 형변환 규칙
- 데이터를 최대한 손실하지 않는 방향으로(큰 데이터를 담을 수 있는 데이터 타입으로) 형변환이 됨.
- String과 연산하면 다 문자열이 됨
- 3 + '0' = 3
- '3' - '0' = 3
- 3 + 4 + "=result" => "7=result"
=> 형변환 규칙에 따라 변환되면 묵시적 형변환.
그걸 거스르고 강제로 캐스팅해주는게 명시적 형변환.
Constant(상수)
변경할 수 없는 값. final 키워드가 붙음.
Literal
12, 123, 3.14, 'A' 등 final이 붙거나 붙지 않은 모든 값
기본 리터럴
정수 - int
실수 - double
'' - char
"" - String
true/false - bool
=> 따라서 float는 실수에 명시적 형변환을 위한 (float) 혹은 f를 붙여 캐스팅해주어야 함.
전치 증감자와 후치 증감자
int b1 = 20;
int b2 = b1++;
int b3 = ++b1;
증감자는 자기 자신을 증가시키므로 b1는 항상 20.
b2 = 20
b3 = 21
int b1 = 20;
System.out.println(b1++);
b1은 1 증가했지만 증가하기 전에 출력하므로 b1은 20
&와 && 차이
&&의 경우 앞이 false이면 뒤에 것은 검토하지 않는다.