Person(String name, int age) {
name = name; // 매개변수를 자기 자신에게 대입. 필드는 null 그대로
age = age;
}컴파일 오류가 아니라서 찾기 어렵습니다. IDE가 경고를 띄웁니다.
✅ this.name = name; this.age = age;
public class Order {
Order(long id) { this.id = id; }
}
Order o = new Order(); // 컴파일 오류: constructor Order in class Order cannot be applied생성자를 하나라도 쓰면 컴파일러가 기본 생성자를 만들지 않습니다.
✅ 필요하면 Order() {}를 직접 추가합니다.
public class Order {
void Order(long id) { this.id = id; } // 생성자가 아니라 이름이 Order인 메서드!
}
Order o = new Order(5L); // 컴파일 오류: 매개변수 있는 생성자 없음✅ 반환 타입을 뺍니다: Order(long id) { ... }
public class App {
int count = 0;
public static void main(String[] args) {
count++; // 컴파일 오류: non-static variable count cannot be referenced from a static context
}
}main은 static이라 "어느 객체의 count"인지 알 수 없습니다. 초보자가 가장 자주 만나는 오류 중 하나입니다.
✅ 객체를 만들어 접근하거나(App app = new App(); app.count++;), 정말 공유 값이면 static int count.
static void reset(Order o) {
o = new Order(); // 호출자의 변수는 그대로
}✅ 필드를 바꾸거나(o.amount = 0;), 새 객체를 return해서 호출자가 받게 합니다: order = reset(order);
int parse(String s) { ... }
double parse(String s) { ... } // 컴파일 오류: method parse(String) is already defined✅ 이름을 다르게 합니다: parseInt, parseDouble. (자바 표준 라이브러리도 이렇게 함)
Product[] items = new Product[10];
items[0] = new Product(...);
for (Product p : items) {
System.out.println(p.name); // 두 번째 칸부터 NullPointerException
}✅ 실제로 채운 개수(count)까지만 돌거나, if (p == null) continue;. 또는 ArrayList를 씁니다.