(21-11-29) [다차원배열 / 클래스 / 메소드 / 생성자 / 스캐너]
다차원배열
타입[ ] 변수명 = new 타입[크기] → 1차원배열
타입[ ][ ] 변수명 = new 타입[크기][크기] → 2차원배열
ex) int[ ] [ ] arr = { { 1, 3, 5 }, { 2, 4, 6 } }
System.out.println(arr.length);
→ arr은 크게 2가지 방으로 구성되있으므로 출력값은 2
0번지 {1,3,5} 1번지 {2,4,6}
System.out.println(arr[0].length);
→ arr 0번지의 해당하는 길이는 3.
for(int i = 0; i < arr.length;i++) {
for(int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
2차원 배열을 통해 위와 같은 것도 구현할 수 있다. for문을 두번 사용할 필요없이 3개의 열과 2개의 행을 구현 할 수 있다.
클래스 : 형태를 이루고 있음. 클래스에는 클래스, 변수, 메소드, 생성자만 올 수 있다.
우리가 아직 배운 접근권한은 public밖에 없다.
public : 어디서나 사용가능하다. 오픈되어있는 접근권한
↑
형태: 접근권한 class 클래스명{
}
파일명은 접근권한으로 선언된 클래스명과 동일해야됨.
클래스를 사용하려면 객체생성이 필요하다.
클래스명 변수명 = new 생성자;
자바에서 객체생성시점은 new가 왔을때다
객체생성은 실체화라고 생각하면 된다. 실제 동작하는 것을 만든 거를 객체생성!
생성자 : 객체 생성시 1회만 호출
생성자는 보편적으로 초기값 지정 시 사용
메소드(method) : 기능 (동작을 정의)
접근권한 반환타입 메소드명(인자타입,인자명, ~) {
↳ 메소드 실행 후 해당위치에 돌려줄 값의 형태
내용
* 단, 반환타입이 void가 아니면
return값;
}
※ null과 void
null : 공간은 있지만 값이 없음
void : 공간도 없음, 정보가 없음 → 리턴값이 없다 선언부에 void 명시
결과 타입에 따라 선언부에 명시되는 반환타입이 다르다
void은 null 엄연히 다름
public class Test10s {
public String s = "Hello";
/*
* 기본생성자는 기본적으로 생략이 가능하다.
* 다만 추가생성자가 존재하고 기본생성자를 사용하려면
*반드시 기본생성자를 선언하여야 사용이 가능하다
*/
public Test10s() {
System.out.println("기본생성자 호출");
}
public Test10s(String str) { // str에 hi~가 있음
System.out.println("추가생성자 호출 : " +str);
}
public class Test10 {
public static void main(String[] args) {
Test10s ts = new Test10s("hi");
System.out.println(ts);
System.out.println(ts.s);
}
}
먼저 Test10s 객체를 생성해주고 여기에
ts에 문자열이 저장되있기때문에 출력문은 " 추가생성자 호출 : " hi가 나오고 함께 저장된 주소가 나온다 // 맞나 ?
그리고 ts의 s에 저장된 hello와 함께 출력된다?
// 내일 질문하기 ..
ifecycle(생존범위) : 생성 시점부터 부모형태의 종료시점까지 생존
public class 클래스명{
int a=10;
public void 메소드1( ){
int a=3;
System.out.println(this.a)
}
public void 메소드2( ){
for(int i=0; ~ ){ // i는 for문 끝나면 죽음
}
}
}
전역변수 : 전체영역 (클래스안)
지역변수: 특정영역 (메소드안)
전역변수와 지역변수는 생존 가능한 범위에서
동일한 명칭 사용 가능 단, 각 영역별 1개씩만 존재 가능
this : 해당 클래스
해당 클래스안에 있는 동일한 명칭을 가진 변수 사용시 this 사용
전역변수와 지역변수가 동일명칭일경우 사용 시 가장 가까운 것(지역변수)을 사용한다.
Scanner(스캐너)
import java.Scanner;
public class Test11{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s= sc.nextLine();
System.out.println("입력값 " + s);
// nextLine() : 한줄을 입력받는다. 입력이 완료될 때까지 대기상태.
// 엔터로 구분
//nextInt() : 입력된 숫자를 정수로 받는다. 띄어쓰기로 구분
sc.nextLine();
System.out.println("입력값 " + a);
// next() : 입력된 문자열 단어를 받는다. 띄어쓰기로 구분
//String s2=sc.next();
String s2=sc.next();
System.out.println("입력값 " + s2);
}
}