운영체제의 독립적
객체 지향 언어(Object Oriented Programming, OOP)
함수형 프로그래밍 지원
자동 메모리 관리(Garbage Collection)
JVM(Java Virtual Machine)
Java 설치 관련 도구
기본타입(primitive type)
long longNumber = 1234567890L;
자료형 | 크기 | 데이터 | 타입범위 |
---|---|---|---|
byte | 1byte | 정수 | -128 ~ 127 |
short | 2byte | 정수 | -32,768 ~ 32,767 |
int | 4byte | 정수 | -2,147,483,648 ~ 2,147,483,647 |
long | 8byte | 정수 | -9,223,372,036,854,775,807 ~ 9,223,372,036,854,775,807 |
언더플로우 < 타입범위 < 오버플로우
byte underflow = -128;
underflow--;
System.out.println(underflow); // 127
byte overflow = 127;
overflow++;
System.out.println(overflow); // -128
실수 타입 float(4byte), double(8byte)
값 할당 시, float는 뒤에 'f', double은 'd'를 붙임.(단, double은 생략 가능)
float floatNumber = 5.5f;
double doubleNumber = 5.5555d; // 5.5555 가능
자료형 | 크기 | 데이터 | 타입범위 |
---|---|---|---|
float | 4byte | 실수(부동 소수점수) | +-1.5 * 10-⁴⁵ ~ +- 3.4*10³⁸ |
double | 8byte | float보다 2배 정밀한 실수 | +-5.0*10-³²⁴ ~ 1.7*10³⁰⁸ |
논리타입 boolean(1byte)
문자타입 char(2byte)
참조타입(reference type)
타입 변환
자동 타입 변환
byte byteValue = 10;
int intValue = byteValue;
수동 타입 변환
long longNum = 1;
byte byteNum = (byte)longNum;
StringBuilder sb = new StringBuilder();
sb.append("Hello ");
sb.append("World!");
String hw = sb.toString(); // Hello World! 출력
String str1 = "apple" // 리터럴
String str2 = "apple; // 리터럴
String str3 = new String("apple"); // new 키워드로 문자열 객체 생성
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // false
System.out.println(str1.equals(str3)); // true
문자열 합치기
문자열 쪼개기 StringTokenizer
산술연산자 | 기능 | 비교연산자 | 기능 |
---|---|---|---|
+ | 더하기 | n < m / n > m | n이 m보다 작다/n이 m보다 크다 |
- | 빼기 | n <= m / n >= m | n과 m이 작거나(크거나) 같다 |
* | 곱하기 | n == m | n과 m이 같다 |
/ | 나누기 | n != m | n과 m이 다르다 (not 연산자) |
% | 나머지 | n && m | n과 m (and 연산자) |
- | - | n ⅼⅼ m | n 혹은 m (or 연산자) |
num++; // num + 1; 과 같다
num--; // num - 1; 과 같다
// 단, 위치에 따라 연산순서가 달라진다.
int num1 = 10;
System.out.println(num1++); // 10 출력 (후위형 증감연산자)
num1 = 10;
System.out.println(++num1); // 11 출력 (전위형 증감연산자)
삼항연산자
조건식 ? 조건식이 true일때 실행문 : 조건식이 false일때 실행문
연산자 우선순위
우선순위 | 연산자 | 내용 |
---|---|---|
1 | () , [] | 괄호, 대괄호 |
2 | !, ~ , ++ , -- | 부정 / 증감 연산자 |
3 | *, / , % | 곱셈 / 나눗셈 연산자 |
4 | < , <= , > , >= | 대소 비교 연산자 |
5 | && | AND 연산자 |
6 | ⅼⅼ | OR 연산자 |
7 | ? : | 삼항연산자 |
8 | = , += , -= , /= , %= | 대입 / 할당 연산자 |
콘솔출력
단순 출력 System.out.print()
System.out.print("Hello World");
System.out.print("Nice to meet you!);
> 출력
> Hello WorldNice to meet you!
줄바꿈 출력 System.out.println()
System.out.println("Hello World");
System.out.println("Nice to meet you!);
> 출력
> Hello World
> Nice to meet you!
형식 출력 System.out.printf()
f
는 formatted 의 약자로, 출력할 형식을 지시해줄수 있다.지시자 | 출력 포맷 |
---|---|
%b | Boolean |
%d | 10진수 |
%o | 8진수 |
%x,%X | 16진수 |
%c | 문자 |
%s | 문자열 |
%n | 줄바꿈 |
System.out.printf("%s%n%s", "Hello World", "Nice to meet you!");
System.out.printf("지금은 %d년 %d월 %d일 입니다.", 2022, 8, 24);
> 출력
> Hello World
> Nice to meet you!지금은 2022년 8월 24일 입니다.
// Nice to meet you! 와 지금은 ~ 입니다가 붙어서 출력된 이유?
// 줄바꿈"%n"을 사용하지 않았기 때문!
System.out.printf("%s%n%s%n", "Hello World", "Nice to meet you!");
System.out.printf("지금은 %d년 %d월 %d일 입니다.", 2022, 8, 24);
> 출력
> Hello World
> Nice to meet you!
> 지금은 2022년 8월 24일 입니다.
import java.util.Scanner; // (1)
Scanner s = new Scanner(System.in); // (2)
String input = s.nextLine(); // (3)
System.out.println(input); // (4)
java.util
에 저장되어있는 데이터 입력 프로그램 Scanner을 불러온다.nextline()
, nextInt()
, nextFloat()
등을 사용한다.if (조건식1) {
// 조건식1이 true일때 실행되는 실행문
} else if (조건식2) {
// 조건식1은 false이고 조건식2는 true일때 실행되는 실행문
} else {
// 위 모든 조건이 false일때 실행되는 실행문
// 생략 가능
}
{}
를 블록이라고도 하는데 블록에 들어가는 식이 한줄일 경우 {}
생략 가능if (5 < 10) {
return true;
} else {
return false;
}
---------------------
if (5 < 10) return true;
else return false;
// 위 두 코드는 같다.
public class Main {
public static void main(String[] args) {
int randomNum = (int)(Math.random() * 10) + 1; // 1 ~ 10 까지 랜덤으로 숫자 뽑기
switch (randomNum) {
case 1 :
System.out.println("1입니다");
break;
case 2 :
case 3 :
System.out.println("2랑 3입니다");
case 4 :
System.out.println("4도 있어요!");
break;
default :
System.out.println("5 ~ 10입니다");
}
for 문
for (int i = 0; i < 100; i++) {
실행문
}
향상된 for문
int[] nums = {1, 2, 3, 4, 5};
for (int num : nums) {
실행문
}
while 문
int num = 0;
while(num < 10) {
num++;
}
do - while 문
do {
System.out.println("무조건 1번 실행");
} while (num < 10) {
num++;
}
break : 반복문 종료
continue : 다음 반복 실행
배열의 선언
int[] arr1;
String[] strArr[];
배열의 할당
// 선언 + 초기화
int[] arr1 = new int[5]; // 기본값은 0이므로 현재 {0, 0, 0, 0, 0}
String[] strArr1 = new String[5]; // 기본값은 null이므로 현재 {null, null, null, null, null}
// []에 수를 지정하는건 배열 요소의 개수를 지정해주는것
// 선언 + 초기화 + 값 할당
// 두가지 방법이 있다
int[] arr2 = new int[] {1, 2, 3, 4, 5};
int[] arr3 = {1, 2, 3, 4, 5};
String[] strArr2 = new String[] {"apple", "kiwi", "melon", "mango", "berry"};
String[] strArr3 = {"apple", "kiwi", "melon", "mango", "berry"};
// 선언 따로 할당 따로
int[] arr4;
arr4 = {1, 2, 3, 4 5};
배열 길이, 인덱스
int[] arr1 = {1, 2, 3, 4, 5};
System.out.println(arr1.length);
System.out.println(arr1[4]);
> 출력
> 5
> 5
// 인덱스는 1이 아니라 0부터 시작한다.
// 즉, arr1 배열을 예로 들면
// { 1, 2, 3, 4, 5} 각 요소들의 인덱스는
// 0 1 2 3 4 인 것이다
주의❗
문자열의 길이
length()
이다String str = "Hello";
System.out.println(str.length());
> 출력
> 5
다차원배열
int[][] arr; // 2차원 배열
int[][] arr1 = new int[3][3];
/*{
{0, 0, 0},
{0, 0, 0},
{0, 0, 0}
}*/
int[][] arr = new int[5][];