[]
는 필드나 로컬 변수에 선언 가능
...
은 필드나 로컬 변수에 선언 불가능
...
은 생성자나 함수등의 파라미터로만 선언이 가능 // 생성자 파라미터로 가변배열을 받으면
// main메서드에서 내가 넣고싶은 배열로 계속 초기화 가능
// 단, 가변배열로 받아야하기 때문에 []는 들어올 수 없음
StringList(String... initData) {
sArr = initData;
}
// main
// 초기 배열에 생성자에 전달한 데이터들이 들어있어야 함
// 초기 배열에 어떤 배열이든 내가 원하는 것을 넣을 수 있음
StringList hobbies = new StringList("안녕", "하이", "엥", "오잉", "또잉");
hobbies.push("흐에");
System.out.println("hobbies = " + hobbies.toString());
StringList(String[] initData) {
sArr = initData;
}
// main
// main메서드에서 특정 배열을 생성하여 생성한 객체에 넣어주어 사용
String[] awef = {"하이", "바이", "뚜이"};
StringList hobbies2 = new StringList(awef);
System.out.println("hobbies2 = " + hobbies2);
...
와 []
를 이용하여 각각 생성자를 생성public class ArrayExample {
int[] numbers;
// 배열을 가변 인자로 받는 생성자
ArrayExample(int... nums) {
numbers = nums;
}
// 배열을 직접 받는 생성자
ArrayExample(int[] nums) {
numbers = nums;
}
// 배열을 출력하는 메서드
void printArray() {
for (int num : numbers) {
System.out.print(num + " ");
}
System.out.println();
}
public static void main(String[] args) {
// 배열을 가변 인자로 초기화하여 객체 생성
ArrayExample example1 = new ArrayExample(1, 2, 3, 4, 5);
example1.printArray();
// 배열을 직접 전달하여 객체 생성
int[] nums = {6, 7, 8, 9, 10};
ArrayExample example2 = new ArrayExample(nums);
example2.printArray();
}
}
비슷한 성격을 가진 자바 클래스나 인터페이스들을 모아 놓은 자바의 디렉토리
소문자
로 지어주는 것이 관례package day05.fruit;
public class Apple {
public Apple() {
System.out.println("fruit패키지의 사과입니다.");
}
}
package day05.juice;
public class Apple {
public Apple() {
System.out.println("juice의 사과입니다.");
}
}
// main
package day05;
// 다른 패키지에 있는 클래스를 로딩할 때 이름을 축약해서 쓰기위해 사용
import day05.juice.*;
import java.util.Scanner;
public class PackageMain {
public static void main(String[] args) {
// 이름을 줄일 수 없음 !!
day05.fruit.Apple a1 = new day05.fruit.Apple(); // fruit
day05.juice.Apple a2 = new day05.juice.Apple(); // juice
new Banana();
new Peach();
Scanner sc = new Scanner(System.in);
}
}
public class Player {
String name; // 닉네임
int level; // 레벨
int hp; // 체력
// 생성자
Player() {
System.out.println("1번 생성자 호출!");
name = "이름없음";
level = 1;
hp = 50;
}
Player(String name) {
System.out.println("2번 생성자 호출!");
name = name; //문제가 발생하는 코드
level = 1;
hp = 50;
}
......
}
///////////////////////////////////////////////////////////////////
Player p2 = new Player("플레이어2");
System.out.println(p2.name); // null!;
this.
을 붙여서 필드와 생성자 매개변수와 구분해주면 된다.Player(String name) {
System.out.println("2번 생성자 호출!");
this.name = name; //this가 가지는 주소값은 이 생성자를 부른 객체의 주소값이 된다. => 플레이어2를 생성했을 때는 p2
level = 1;
hp = 50;
}
///////////////////////////////////////////////////////////////////
Player p2 = new Player("플레이어2");
System.out.println(p2.name); // 플레이어2;
Player p3 = new Player("플레이어3");
System.out.println(p3.name); // 플레이어3;
this.name
은 곧 p2 주소값 객체의 name을 가리키게 되는 것 // 생성자
Player(String nickName) {
this.nickName = nickName;
}
// 메서드
void attack(Player target) { // Player this 생략
System.out.println("this = " + this);
System.out.println("target = " + target);
// 맞은 player가 체력을 10 감소시킴
target.hp -= 10;
// 때린 player의 체력을 3 감소시킴
this.hp -= 3;
System.out.printf("%s 님이 %s님을 공격했습니다.\n", this.nickName, target.nickName);
System.out.printf("%s 님의 남은 체력: %d\n", this.nickName, this.hp);
System.out.printf("%s 님의 남은 체력: %d\n", target.nickName, target.hp);
}
// main
Player parking = new Player("주차왕파킹");
Player insultKing = new Player("욕설왕뻐킹");
insultKing.attack(parking);
this.
을 통해서 나의 필드에 접근할 수 있었다. 여기서 더 나아가this()
를 통해서 생성자를 호출할 수 있다.this()
를 사용하면 같은 클래스 내의 다른 생성자를 호출할 수 있다.// 필드
String nickName;
int level;
int hp;
// 생성자: 객체가 만들어질 때 초기에 어떤값을 가질지를 정하는 곳
// 생성자는 생성자 내부에서 또다른 생성자를 호출할 수 있음 -> this()
public Player() {
// this()로 다른 생성자를 부를때는 생성자당 1번씩만 가능
// 그리고 가장 첫 줄에 써야 함
this("이름없는캐릭터", 1, 50); // 4번 생성자 호출!
System.out.println("1번 생성자 호출!");
}
Player(String nickName) {
this(nickName, 1); // 3번 생성자 호출!
System.out.println("2번 생성자 호출!");
}
public Player(String nickName, int level) {
this("이름없는캐릭터", 1, 50); // 4번 호출
System.out.println("3번 생성자 호출!");
}
public Player(String nickName, int level, int hp) {
System.out.println("4번 생성자 호출!");
this.nickName = nickName;
this.level = level;
this.hp = hp;
}
// main
Player p1 = new Player("야미");
System.out.println("p1 = " + p1);
"4번 생성자 호출!"
이 출력되고 nickName, level, hp가 초기화"3번 생성자 호출!"
출력"2번 생성자 호출!"
출력