AngelPlayer`s Diary

자바 개요

자바 프로그램은 한 개 이상의 클래스로 구성되어 있다.
클래스는 필드나 메소드로 구성되어 있다.

 

main() 메소드
psvm -> public static void main
main() 메소드는 자바 프로그램이 실행될 때 가장 먼저 실행시킨다.
자바 프로그램은 main() 메소드를 가지는 클래스가 반드시 하나는 존재해야 한다.

 

 

 

Data Type

자바 변수

자바 변수는 기본형과 참조형으로 나뉨

기본형 : 정수형, 실수형, 문자형, 논리형 (8가지)

- 정수형 : byte, short, int, long
- 실수형 : float, double
- 문자형 : char
- 논리형 : boolean (ture, false)

 

참조형 : 기본형 변수를 이용해 사용자가 직접 만들어 사용하는 변수

- Ex : String, Object, ..

 

 

상수

프로그램이 실행되는 동안 메모리에 저장된 데이터를 변경할 수 없음

final을 가장 앞에 붙임

생성과 동시에 초기화를 해야 함

final int ANGEL = 88;

 

 

리터럴 (literal)

소스코드에 직접 작성한 값 (≒하드 코딩된 값)

동일한 주소를 가지고 있음

int angel = 88;
int player = 88;

System.out.println("angel = " + angel); // 88
System.out.println("player = " + player); // 88
System.out.println(System.identityHashCode(angel)); // 1595428806
System.out.println(System.identityHashCode(player));  // 1595428806

angel = 100;
System.out.println("angel = " + angel); // 100
System.out.println("player = " + player); // 88
System.out.println(System.identityHashCode(angel)); // 885284298
System.out.println(System.identityHashCode(player));  // 1595428806

값을 바꾼다고 해서 python처럼 같이 참조하는 값이 바뀌는건 아님!!!!

(== angel을 바꾼다고 해서 player가 같은 값으로 바뀌는게 아님)

 

 

타입 변환

자동 타입 변환 : 컴파일러가 자동으로 수정

강제 타입 변환 : 사용자가 강제적으로 수정

int num1 = 2, num2 = 4;

double result1 = num1 / num2; // int형 / int형 계산
double result2 = (double) num1 / num2; // double형 / int형 계산

System.out.println(result1); // 0.0
System.out.println(result2); // 0.5

 

 

연산자

비교 연산자 : &&, ||, !

 

삼항 연산자

사용법 : 조건식 ? 참_반환값 : 거짓_반환값

int num1 = 88, num2 = 8;
int result;

result = (num1 > num2) ? num1 : num2;

System.out.println("Biggest = " + result); // 88

 

instanceof 연산자 : 해당 객체가 어떤 클래스(인터페이스)로부터 생성되었는지 판별

사용법 : 인스턴스명 instanceof 클래스명

class A {}
class B extends A {}

(...)

A a = new A();
B b = new B();

System.out.println(a instanceof A); // true
System.out.println(b instanceof A); // true
System.out.println(a instanceof B); // false
System.out.println(b instanceof B); // true

extends로 생성된 클래스(B)의 인스턴스(b)는 부모 클래스(A)와 비교하였을 때 true가 출력됨

 

 

 

조건문

조건문

if / else if / else 문

 

삼항 연산자를 통한 조건문

사용법 : 조건식 ? 참_반환값 : 거짓_반환값

 

switch / case 문

 

 

반복문

while문

 

do / while문

 

for문

사용법 : for(초기; 조건; 증감) {}

 

향상된 for문

사용법 : for(타입 변수명 : 배열명) {}

컬렉션의 길이만큼 반복하여 실행함

변수명에 반복할 때마다 순차적으로 컬렉션의 내용이 하나씩 들어감 

요소를 참조할 때 유용함 -> 직접 수정 시는 기본 for문을 사용 권장

int[] arr = new int[]{11, 22, 33, 44, 55};

for (int e : arr) {
    System.out.print(e + " ");

 

 

제어문

continue문

 

break문

 

이름을 가진 break문

반복문 중첩 시 특정 반복문을 한 번에 빠져나가고 싶은 경우 사용함

이름을 작성할 반복문의 바로 앞에 이름을 명시해야 함 -> 다른 코드가 들어가면 에러

gogogo : // 이름 명시
// sout("Hello"); // 해당 코드가 있으면 에러 발생 함
for (int i = 2; i < 10; i++) {
    for (int j = 2; j < 10; j++) {
        if (i == 5) {
            break gogogo; // gogogo 반복문이 끝나는 시점으로 빠져나감
        }
        System.out.println(i + " * " + j + " = " + (i * j));
    }
}
// 여기로 빠져나감!

 

 

 

배열

메모리 구조

메소드 영역 : 클래스와 클래스 변수를 저장

힙 영역 : 모든 인스턴스 변수 저장

스택 영역 : 메소드 호출과 관련된 지역 변수 및 매개변수 저장

 

 

배열 선언

배열이름 = new 타입[배열길이];

타입[] 배열이름 = new 타입[배열길이];

int[] angel = new int[3];

angel[0] = 85; // 인덱스로 배열 초기화
angel[1] = 65;
angel[2] = 90;

 

배열 선언 및 초기화

int[] grade1 = {70, 90, 80};

int[] grade2 = new int[]{70, 90, 80};

int[] grade3;
// grade3 = {70, 90, 80}; // Error
grade3 = new int[]{70, 90, 80}; // 선언 후 초기화 방법

 

다차원 배열 선언 및 초기화

// 다차원 배열 선언
int[][] arr = new int[2][3];

// 다차원 배열 선언 및 초기화
int[][] arr = {
    {10, 20, 30},
    {40, 50, 60}
};

// 가변 배열 선언 및 초기화
int[][] arr = {
    {10, 20},
    {10, 20, 30, 40},
    {10}
};

 

 

배열 Copy

배열은 크기가 고정되므로, 확장을 위해서는 배열 복사 후 별도의 배열을 새로 만들어야 함

int[] arr1 = new int[]{1, 2, 3, 4, 5};

// System.arraycopy() 
int[] arr2 = new int[10];
System.arraycopy(arr1, 0, arr2, 0, arr1.length);

// Arrays.copyOf() 
int[] arr3 = Arrays.copyOf(arr1, 10);

 

 

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band