특징
•
객체지향 언어
•
자동 메모리 관리 (가비지 컬렉터)
•
멀티스레드 지원
•
풍부한 라이브러리
•
운영체제 독립적(jvm)
javaAPI
•
주요한 기능과 상세정보를 미리 만들어 HTML파일로 oracle에서 제공
•
java 사전 같은 느낌
javac
•
자바의 컴파일러
•
소스파일 .java를 클래스 파일.class로 바꿔줌
java
•
자바 인터프리터
•
클래스파일을 실행한다
클래스
•
자바 프로그램의 단위로 최소 하나 이상이어야 한다
•
단위는 {} 중괄호
main 메서드
•
프로그램의 시작점
빌드
•
소스파일 .java로부터 프로그램을 만들어 내는 전 과정
•
Project → Build All : workspace의 모든 프로젝트를 빌드
•
Project → Build Project : 현재 프로젝트를 빌드 (변경된 소스 파일만 새로 컴파일)
•
Project → Clean : 이전 빌드의 정보를 모두 삭제 (모든 소스와 파일을 새로 컴파일)
•
Project → Build Automatically : 소스 파일을 변경 후 저장할 때마다 자동 컴파일
단축키
•
Command + Shift + L : 단축키 전체 목록 표시
•
Command + +/- : 폰트 크기 증가/감소
•
Command + D : 한 줄 삭제
•
Command + Option + up/down : 위쪽/아래쪽에 해당 줄 복사
•
Option + up/down : 위쪽/아래쪽으로 해당 줄 변경
•
Command + / : 주석
•
Command + Option + A : 토글 (멀티 컬럼 편집)
•
Command + Shift + M : import 자동 추가
변수, 상수, 리터럴
•
클래스 변수, 인스턴스 변수, 지역 변수
•
지역 변수는 읽기 전에 꼭 초기화해야 함!!!!
•
변수(variable) : 하나의 값을 저장, 변경O
•
상수(constant) : 한 번만 값을 저장, 변경X
ex) final int a = 100;
•
리터럴(literal) : 그 자체로 값을 의미
int a = 100; 에서 100
기본형 변수
•
문자 char
•
정수 byte(-128~127), short, int, long
•
실수 float, double
•
논리 boolean
•
실제 값을 저장
참조형 변수
•
기본형을 제외한 나머지 (String, System 등)
•
메모리 주소를 저장(4byte or 8byte)
접두사, 접미사
•
long 타입은 20억이 넘는 숫자 뒤에 L (생략X)
•
float 타입은 숫자 뒤에 f (생략X)
•
double 타입은 숫자 뒤에 d (생략O)
•
범위가 변수 > 리터럴이면 OK
•
숫자 앞에 0b가 붙으면 2진수
•
숫자 앞에 0이 붙으면 8진수
•
숫자 앞에 0x가 붙으면 16진수
printf
•
%#o, %#x 는 8진수, 16진수에 접두사 붙여 출력
println
•
참조변수만 입력되면 .toString()을 붙여준다
scanner
•
화면으로부터 데이터를 입력 받는 기능을 제공하는 클래스
•
import java.util.*; 로 추가
•
Scanner scanner = new Scanner (System.in); 로 객체생성
•
int num = scanner.nextInt(); 로 num에 저장
•
String input = scanner.nextLine(); 로 다음 행 받아서 저장
Integer.parseInt(String);
•
문자열을 숫자로 변환
오버플로우
•
표현 가능한 범위를 넘는 것
•
최대값 + 1 / 최소값 -1 ⇒ 오버플로우
•
최대값 + 1 ⇒ 최소값
•
최소값 - 1 ⇒ 최대값
•
부호 있는 정수, 부호 없는 정수 구별 주의!!!!
정수 범위 (n은 비트)
•
부호 없는 정수 : 0 ~ 진수^n-1개
•
부호 있는 정수 : (-진수^n-1) ~ (진수^n-1) - 1
타입 간의 변환 방법
•
문자 → 숫자 : Integer.parseInt(”3”) ⇒ 3
•
숫자 → 문자 : 3 + “” ⇒ “3”
•
문자 → char : “3”.charAt(0) ⇒ ‘3’
•
char → 숫자 : ‘3’ - ‘0’ ⇒ 3
•
문자 + 문자 : “3” + “1” ⇒ “31”
•
숫자 + char : 3 + ‘0’ ⇒ 51 (아스키코드)
연산자 종류
연산자 우선순위
•
대입, 단항 연산자를 제외한 모든 연산자의 방향은 왼쪽→오른쪽
형변환
•
값손실이 나는 경우는 형변환을 해줘야 한다! (해줘도 값손실나지만 에러는 없음)
•
연산을 할 때는 피연산자들의 타입을 일치시켜야 한다!
•
작은걸 큰걸로 자동 형변환 시켜주기도 한다
Math.round()
•
Math.round(3.141592 * 1000) / 1000 ⇒ 3.1416
equals()
•
str1.equals(str2) (대소문자 구분O)
•
str1.equalsIgnoreCase(str2) (대소문자 구분X)
•
문자열 비교는 == 대신 equals()를 사용해야 한다!
•
왜?
조건 연산자
•
result = 조건식 ? True : False;
switch문
•
조건식 결과는 정수 또는 문자열(1.7버전)이어야 한다
•
case문의 값은 정수 상수(문자 포함), 문자열만 가능, 중복X, 변수X
Math.random()
•
0.0 ≤ x < 1.0
•
0.0 ≤ x * 10 < 10.0
•
0 ≤ (int) x * 10 < 10 ⇒ 1~9
•
1 ≤ (int) x * 11 < 11 ⇒ 1~10
•
-5 ≤ (int) (x * 11) - 5 < 6 ⇒ -5~5
배열
•
int[] score = new int[5];
•
int[] score = {50, 60, 70, 80, 90};
new int[] 는 99% 생략할 수 있지만 1% 에러일 때도 있다!!!
•
배열이름.length : 배열의 길이 (int형 상수)
•
배열은 한 번 생성하면 길이를 바꿀 수 없다!!!
(선언할 때 연속적인 메모리 공간을 할당하기 때문!)
•
iArr(int배열)은 I@14318bb와 같은 주소값이 출력!
(문자열로 출력하기 위해선 Arrays.toString(iArr) 사용
•
chArr(char배열)은 abcd가 정상적으로 출력!
String 배열
•
String[] name = new String[] {”Kim”, “Park”, “Yi”};
•
String[] name = {”Kim”, “Park”, “Yi”};
2차원 배열
•
int[][] score = new int[행][열];
•
int[][] arr = new int[][] { {1, 2, 3}, {4, 5, 6} };
•
int[][] arr = { {1, 2, 3}, {4 ,5 ,6} };
•
int[][] arr = {
{1, 2, 3},
{4, 5, 6}
};
String 클래스
•
String str = “ABCDE”;
•
String 클래스는 char[]와 메서드(기능)를 결합한 것
(String 클래스 = char[] + 메서드(기능)
•
String 클래스는 내용을 변경할 수 없다(Read only)
ex) “a” + “b” ⇒ “ab”라는 값이 새로운 메모리에 입력
•
주요 메서드
Arrays 클래스
•
1차원 출력 : Arrays.toString(arr)
•
2차원 출력 : deepToString(arr2D)
•
1차원 비교 : equals(str2D, str2D2)
•
2차원 비교 : deepEquals(str2D, str2D2)
•
배열 복사 : Arrays.copyOf(arr, arr.length)
Arrays.copyOfRange(arr, from, to)
(빈 자리는 0)
•
배열 정렬(오름차순) : Arrays.sort(arr)
C 와 JAVA의 차이
•
char 변수는 C 1byte, JAVA 2byte
•
print에서 문자 + 변수
C에서는 서식문자 %이용
JAVA에서는 “문자" + 변수명 + “문자”
•
개행문자 \n 은 OS마다 다를 수 있으므로 %n으로 쓴다