▶ 자료형의 최대값, 최소값이 기억이 안나고 찾아보기도 귀찮다면
자료형.MAX_VALUE
자료형.MIN_VALUE
을 기억하자
▶ package와 class는 비슷한 메서드를 분류해주기 위해 있는 체계 혹은 분류
->클래스 이름 대충지으면 안됨, 안에 있는 메서드들을 대표하는 이름이어야함
->패키지를 3단계로 구분함 (메인메서드가 있는 메인클래스,?,?)
->클래스가 파일이라면 패키지는 폴더
-패키지는 이런 클래스들이 모여있는거야 라고 알려주는거다, 클래스를 구분하기 위해 있는게 패키지
▶ OOP의 특징 4가지: 남의 소스를 편리하게 사용하자!!!!!
1. 캡슐화(Encapsulation)
2. 상속(Inheritance)
3. 추상화(Abstractionism)
4. 다형성(Polymorphism)
캡추다상? ㅋㅋㅋ
▶ Class 선언
자바 파일 하나에 클래스 1개가 요즘 원칙
class는 자료형이 될 수 있다
class에는 특수문자 들어갈 수 없다
class 안에 class를 선언할 수도 있다
class의 첫 글자는 대문자
class = 자바 파일명
▶ 클래스의 객체화 = 클래스의 인스턴스화
객체화하는건 원본 class를 복사했다는 것
class가 원본이라면 복사본은 instance 인스턴스라고 함
메모리가 3가지로 나뉨, t형 메모리구조
원래는 static에 클래스(원본들)를 쌓아놔
이걸 사용할 땐 ㄴ원본에서 복사해서 heap에 두고 사용함
여기서 ExSample은 데이터 타입이 되는거
데이터 타입은 뭐가 되냐면 객체화하려는 클래스 타입
sample은 복사된 객체를 담을 변수가 되는거
▶인터페이스
불을끌때 회로를 만지는게 아니라 스위치만 통해서 끌 수 있게 하는거
차를 멈출 때 바퀴가 아닌 브레이크를 밝으면 되는거, 스위치와 브레이크 모두 인터페이스
어려운 일을 쉽게할 수 있게 만들어놓은 장치
API ~이 방법대로 해봐 쉽게 될거야! 알려주는 도구나 방법
레퍼런스변수=매개변수=reference type
public class Calculator {
//이용할 수만 있게 만들 메서드니까 메인 메서드 안넣음
/**
* 이 메서드는 두 개의 정수를 넣으면 합하여 반환하는 메서드입니다.
* @param a 정수 형태의 값
* @param b정수 형태의 값
* @return a와 b를 더한 값
*/
//위에 쓴게 설명서! 저거 쓰면 API가 됨
int plus (int a,int b){
return a+b;
}
}
▶ class의 member : 클래스 안에 있는 것들
constructor 생성자, field 변수, method 메서드
생성자없인 클래스를 사용할 수도 없어->너무 당연한 존재니까 생략해도 이해해줘
new로 복사할 때 반드시 생성자가 들어가(근데 코드로 쓰여있진 않아, 그냥 있다고 치는거야)
메인클래스에선 생성자 안 써
객체를 생성하는 건 메인메서드에서 하는 일
그렇게 생성된 객체를 실행 메서드에 복사함
객체화(복사)를 할 때 마다 생성자가 실행돼
왼쪽이 실행, 오른쪽이 메인
실행에는
▶ 초기화 : 처음 시작할 때 하는 일, 최초의 값을 주는 것
복사 할때는 새로 만들어지는거니까(생성자덕분에) 초기화되는거임
▶ 자바에서 문자열끼리 비교하려면 equals 써야해요
String str1 = "JAVA";
String str2 = new String("JAVA");
System.out.println(v1 == v2);
System.out.println(str1 == str2); //java에서는 문자열 이렇게 비교하면 x
System.out.println(str1.equals(str2)); // 이렇게 해줘야 함
▶ 자바에서 switch문 사용하기
public class SwitchStmt {
public static void main(String[] args) {
String item ="식혜"; //식혜라는 값을 담은 변수 item 선언해주고
// jdk1.6이하에서는 switch문 값이 숫자만 들어가야함
switch (item) { //switch문 값에 그 변수를 넣어줍니다
case "식혜": //case 식혜라면
System.out.println("식혜가 나왔습니다."); //이거 출력
break; //그리고 끝내
default: //디폴트값은(아니라면 여기까지 내려옴)
System.out.println("해당 제품이 없습니다."); //해당 제품이 없다고 출력해
}
}
}
▶ unreachable code 해결법
원인 : 위 while문이 끝나지 않아서 여기까지 내려오지 않기 때문
해결방법 1:지운다
해결방법 2:위 반복문이 정지할 수 있는 조건 만들어준다
public class WhileStmt {
public static void main(String[] args) {
int i = 1;
while (true) {
i++;
System.out.println("영원히 반복 된다.");
}
int cup = 1; //이렇게 되면 이 줄에 unreachable code라고 뜬다
}
}
해결한 모습 (if문을 넣어 조건을 걸었다, break를 통해 while문을 빠져나와 int cup 까지 도달한다 -> 오류해결
public class WhileStmt {
public static void main(String[] args) {
int i = 1;
while (true) {
i++;
System.out.println("영원히 반복 된다.");
if(i<100) {
break;
}
}
//unreachable code라고 뜸, 왜냐? 위 while문이 끝나지 않아서 여기까지 내려오지 않기 때문
//해결방법 1:지운다
//해결방법 2:위 반복문이 정지할 수 있는 조건 만들어준다
int cup = 1;
}
}
▶ 자바 배열
배열의 길이를 먼저 정해놓고 시작해야함 (자바스크립트와 다른 점)
자바 배열에 값 넣는 방법 3가지
//1. 선언과 동시에 값을 넣는다.
int[] scores = {70,80,90}; // 이렇게도 되고
String names[] = {"홍길동", "고길동", "박길동"}; //이렇게도 됨
//2. new 연산자로 값을 추가하는 방법
int[]numArr;
numArr = new int[] {70,80,90};
//3. 미리 크기를 지정하는 방법
int[]arr=new int[6];
▶ 자바 for문과 향상된 for문
int[]score = {95,75,84,35,88};
//for문에서는 시작과 끝을 지정할 수 있다
for (int i = 0; i < score.length; i++) {
System.out.println(score[i]);
}
System.out.println("==========");
//향상된 for문(시작하면 모든 내용을 꺼낸다)
for(int s:score) {
System.out.println(s);
}
▶ 배열 인덱스에 하나씩 값 넣어보기
int[]scores = new int[10];
System.out.println("크기 확인 : "+scores.length);
//0번방에 100
scores[0]=100;
//1번방에 50
scores[1]=50;
//2번방에 70
scores[2]=70;
//3~9번 방까지 80씩 넣어보자
for (int i =3; i < scores.length; i++) {
scores[i] = 80;
}
▶ 특정 인덱스 값만 제외하고 배열에 같은 값을 넣는 법
if문 사용해서 만약에 null 값이라면 "공실"이라는 값을 넣어준다
String[][][]apt = new String[4][4][3];
System.out.println("층 : "+apt.length);
System.out.println("호 : "+apt[0].length);
System.out.println("방 : "+apt[0][0].length);
apt[2][3][2]="철수의 방";
apt[0][0][0]="영희의 방";
for (int i = 0; i < apt.length; i++) {
for (int j = 0; j < apt[i].length; j++) {
for (int j2 = 0; j2 < apt[i][j].length; j2++) {
// System.out.println(i +"층"+ j +"호"+ j2 +"방");
// 내가 만든 정답
// apt[i][j][j2]="공실";
// apt[0][0][0]="영희의 방";
if(apt[i][j][j2] == null) {
apt[i][j][j2] = "공실";
}
System.out.println(apt[i][j][j2]);
}
}
▶ 자바 2차 배열에 값넣을 때
int[]arr = {
{...},
{...}
};
▶ 자바 2차 배열에 배열의 크기부터 먼저 넣어주고 싶다면
String [][] arr = new String[4][4]
▶ 파스칼 표기법, 카멜 표기법
class : 파스칼 표기법, 첫 글자 대문자 Blackcolor
그 외 : 카멜 표기법, 첫글자 외에 의미를 갖는 단어를 대문자로 작성 blackColor
기본적으로 카멜을 쓰지만 class에만 파스칼을 쓴다, 꼭 클래스의 첫 글자는 대문자로
자바 외 다른 언어에서는 스네이크 표기법 : 의미를 갖는 단어 앞에 언더바 black_color
▶ 같은 값을 복사한 두 개의 인스턴스라고 해도 다르다고 봄.
왜냐 일련번호가 다르기 때문임
내 페이퍼를 복사해서 돌렸다고 가정해보면 걔네들이 다 똑같아 보일 순 있어도
복사본1에 낙서를 한다고 복사본2에도 그대로 낙서되는건 아니잖슴
equales로 알아보는 거는 얘네둘이 같아? 가 아닌 이 안에 들어있는게 같아? 임
Student std = new Student();
Student std2 = new Student();
//std와 std2에 담긴 객체(인스턴스)는 복사본이기 때문에 서로 다르다 (일련번호가 다름)
//equals로는 얘네 둘이같아? 알아보는게 아니라 이 안에 들어있는 값이 같아? 인 거임
▶
Calculator class에서 plus라는 메서드 생성함
이 클래스를 new 연산자를 통해서 인스턴스화시켰어 그래서 변수 calc에 넣었지
이 calc라는 클래스 안에있는 plus를 통해 매개변수 32와 1을 계산해서 출력해줌
▶ 객체화를 할 때 생성자 호출은 무조건적임(너무 당연하니까 생략했어)
▶
new연산자를 통해 생성할 때 애초에 값을 주고 시작할 수도 있음
그럴 땐 실행메서드에서도 이 값이 들어갈 데이터 형태+변수 가 매개변수를 추가해줘야함
오른쪽을 보면 systemout만 찍고 나면 복사한 name과 goal을 바로 잊어버려 그래서 이것들을 밖으로 빼낸거임
저게 바로 멤버구성원중에 하나인 변수! field가 됨
위에 선언했던 변수에 메인메서드에서 가져온 값("멍멍이","집지키기")을 넣어주려고
this.name=name; 을 해줘 여기서 이 this는 이 class를 의미해서 저 위에서 선언된 변수를 가르킴
이름을 바꿔줘도돼