값이 존재하지 않는 변수는 메모리를 할당하지 않는다.(선언 후 할당안하면 메모리 차지x)
리터럴 상수는 그냥 숫자임
변수 앞에 final 키워드를 붙인 변수는 값이 저장된 이후에 값을 변경할 수 없음.(심볼릭 상수)
final int num=1; //선언하며 초기화 (초기화안하고 선언만하고 나중에 가능)
접미사L
(21억 넘는 정수에 필요4->8), 접미사F
(8->4byte에 할당)
123.123F !=123.123 // 할당된 byte가 달라서 서도 다른 값이다.
암시적 형 변환 - 더 큰 범위의 자료형으로 변환은 오류 x
명시적 형 변환 - 더 작은 범위의 자료형으로 변환 (데이터 손실 발생할 수 있음)
float a = 1.12F; double b=a; // 암시적 (연산에도 적용)
int a = (int) 100000000000L; // 명시적
객체 - 현실 세계에 존재하는 것을 프로그램으로 구현할 대상
클래스 - 클래스는 현실 세계의 객체를 프로그래밍의 세계로 가져와서 실제로 구현한 것
인스턴스 - 클래스를 통해 객체를 메모리에 적재한 실체
멤버변수 - 클래스 내에 선언된 변수(인스턴스 변수와 정적 변수로 나뉨)
인스턴스 변수 - 인스턴스를 생성 후에 접근 가능한 변수(인스턴스가 소멸하면 인스턴스 변수도 소멸)
정적 변수 - 인스턴스를 생성하지 않아도 접근 가능한 변수(모든 인스턴스에서 공유)
생성자 오버로딩 - 여러개의 생성자를 선언(같은 자료형의 매개변수로는 불가, 구별X)
this - 객체 자기 자신
메서드
반환값없는 return 키워드를 이용하여 메서드 실행을 종료 가능(ex 자식 여러명)
인스턴스 메서드 - 인스턴스 변수와 같이 인스턴스를 생성 후에 호출
정적 메서드 - 객체를 인스턴스화하지 않고 사용가능(static, 내부 인스턴수 변수에 접근 못하나 정적 변수에는 접근 가능)
메서드 오버로딩 - 생성자처럼 메서드도 오버로딩 가능(매개변수의 개수나 자료형 다르면)
class Person {
String name; // 인스턴스 변수
int age;
static string nationality = “korea”; // 정적 변수
Person(String name, int age) { //생성자
this.name = name;
this.age = age;
}
Person(int age) { //여러개 생성자 가능(생성자 오버로딩)
this.age = age;
}
void setName(String name) { // 반환값이 없고 매개변수가 있는 메서드
this.name = name;
}
String getName() { // 반환값이 있고 매개변수가 없는 메서드
System.out.println(name);
return name;
}
static int plus(int a, int b) { //정적 메서드
return a + b; //age사용 불가,nationality사용가능
}
}
Person person = new Person("이름", 1); //생성자 통해 초기화
패키지 - 폴더 구조와 유사
package codelatte와 package codelatte.car는 서로 다른 패키지
서로 다른 패키지에 있는 자바의 클래스를 참조하려면 import 키워드 작성 필요
pakage codelatte;
import codelatte.car.Car
private
- 클래스 내부에서만 접근 가능
public
- 모든 곳에서 접근 가능한 가장 열려있는 접근제어 지시자
default
- private,public 사용 안하면 같은 패키지 내에서만 접근 가능
protected
- 다른 패키지 내에서 접근 불가(상속으로는 접근 가능)
상속 - extends 사용, 상속을 받을 수 있는 요소는 변수와 메서드(생성자는 X)
ChildDog 클래스에 변수나 메서드를 선언하지 않아도 접근 가능(ParentDog 메서드,변수)
super - 부모 클래스에 접근
부모 생성자가 명시적으로 선언되어 있는 경우 자식 클래스에서 부모 생성자 중 하나 반드시 호출
기본 생성자(매개변수가 없는 생성자)만 있거나, 명시한 생성자 없으면 생략 가능
public class ParentDog {
String name;
ParentDog(String name) {
this.name = name;
}
}
public class ChildDog extends ParentDog {
ChildDog(String name) {
super(name); // ParentDog클래스 생성자 호출(ParentDog(String name)에 매칭)
}
}
다형성 - 하나의 객체 인스턴스가 여러가지 자료형 가질 수 있음
instanceOf 연산자는 해당 인스턴스가 특정 인스턴스가 맞는지 확인할 수 있는 연산자
메서드 오버라이딩 - 자식 클래스에서 정의한 내용을 더 우선시(부모 클래스 매서드 재정의)
추상화
abstract 클래스
abstract 메서드
public abstract class Dog {
protected String name;
public Dog(String name) {
this.name = name;
}
public abstract void bite();
public abstract void bark();
protected void eat() {
System.out.println("먹는다");
}
}
interface
변수
는 모두 public static final이 선언된 변수임.메서드
는 모두 public이 선언된 메서드메서드
는 모두 public abstract가 선언된 메서드public interface Dog {
public static final String color = "검정";
public abstract void bite();
public abstract void bark();
public default void eat() {
System.out.println("먹는다");
}
public static String getColor() {
return color;
}
}
사실 좀 더 자유도가 높은 것은 추상 클래스이나, 추상 클래스는 확장에 의미가 더 가깝고 인터페이스는 규약에 가깝기 때문에 인터페이스를 더 많이 사용함
익명클래스 - 코드 내부에 이름이 존재하지 않는 클래스를 만드는 것
람다 - 익명함수
모든 클래스는 Object 클래스를 상속 -> Object 클래스의 요소를 사용 가능
null -참조 자료형 변수만 선언하고 인스턴스의 참조 값이 저장되어 있지 않았을 때 기본적으로 저장되는 값
예외 처리 - try catch finally
enum - 자바 가상 머신에 의해 Singleton으로 생성되며 의미 있는 상수를 정의하고 프로그램의 안정성을 위해 사용'
Generic - Actual Type Parameter가 삽입된 경우 정상적인 Type인지 컴파일 단계에서 체크해주는 도구
Wrapper 클래스 - 기본 자료형(Primitive Type)을 감싸는(기본 자료형 이용 연산보다 느림)
int->Integer, char->Character
Wrapper 클래스에는 기본적으로 형변환에 도움이 되는 몇 가지 메서드를 제공
Integer integer = new Integer(10); //Wrapper 클래스로 만들어진 인스턴스
int integer1 = integer.intValue(); //반환
//메서드
Integer.parseInt(string); //정적 메서드를 이용하여 int 정수형으로 변환
Integer.toString(int); //정적 메서드를 이용하여 문자열로 변환
Byte.MAX_VALUE; //자료형의 최댓값
Integer.MIN_VALUE; //자료형의 최솟값
https://www.codelatte.io/courses/java_programming_basic/3YOZQA8ZUYBPYNHY
논리연산자 &&
-> and, ||
-> or / 비트연산자 ^
-> xor, &
-> and, |
-> or
실수형끼리 비교 연산자 결과는 정확하지 않음 (정수와 실수 또한 마찬가지)
삼항연산자 자료형 변수명 = (조건식) ? (참인 경우)값 : (거짓인 경우)값;
if (참 or 거짓) { // 참이면 실행 후 조건문 탈출
} else if (참 or 거짓) { // 참이면 실행 후 조건문 탈출
} else if (참 or 거짓) { // 참이면 실행 후 조건문 탈출
} else { // 세 조건이 다 거짓이면 실행 후 탈출
}
switch (조건값) {
case 값1 : // 조건값이 '값1'이면 해당 위치 부터 실행 후 아래의 case로 진행
case 값2 : // 조건값이 '값2'이면 해당 위치 부터 실행 후 아래의 case로 진행
case 값3 : // 조건값이 '값3'이면 해당 위치 부터 실행 후 아래의 case로 진행
default: //조겁값 관계없이 실행
} // break를 통해 탈출하면 해당 case문만 실행 가능
for (초기화 ; 조건식; 반복 후 실행될 명령어) {
// 반복 시킬 내용
}
for (변수 : 배열 or 이터레이터) { //배열,이터레이터 순차 접근
// 반복 시킬 내용
}
while (조건식) {
// 반복 시킬 내용
}
do {
// 반복 시킬 내용
} while(조건식);
break; //반복문 탈출
continue; //다음 반복으로!
https://www.codelatte.io/courses/java_programming_basic/003LDC73H3M2GUUW