생성자를 하나라도 만들었다면 기본생성자(디폴드생성자)를 꼭 정의해줘야 한다.
- 개발자가 생성자를 하나도 정의하지 않으면 자바 컴파일러가 기본생성자를 만든다.
- 예제
class A{
// 기본 생성자를 만들어야 한다.
// 생성자
public A(String str) {
System.out.println(str);
}
}
public class Switch {
public static void main(String[] args) {
A a = new A("안녕하세요");
// 개발자가 만들어 놓은 생성자가 있기 때문에
// 컴파일러는 디폴트 생성자를 생성하지 않는다.
// 따로 만들어 줘야 한다.
A aa = new A(); // 디폴트 생성자가 없어서 오류
}
}
class Person{
String name;
String passport = "0000000";
public Person(String name) {
this.name = name;
}
public Person(String name, String passport) {
//this생성자 함수 호출할때는 제일 위에서 실행해야한다.
this(name); //this()함수 사용하여 다른 생성자를 호출했다.
this.passport = passport;
}
}
public class Switch {
public static void main(String[] args) {
Person kim = new Person("김말똥");
Person hong = new Person("홍길동", "0000-0000");
}
}
import edu.lion.car.Hcar;
import edu.lion.car.Scar; //컴파일 에러
public class JvmTest {
public static void main(String[] args) {
Hcar hcar = new Hcar();
Scar scar = new Scar(); //컴파일 에러
}
}
위와 같이 컴파일 에러가 발생하는 이유는 Scar.java
에서 Scar 클래스를 default로 설정해주었기 때문이다. 다른 패키지에 있는 JvmTest 클래스에서 다른 패키지에 있는 클래스의 인스턴스를 생성하려면 public으로 정의되어있는 것만 접근 가능하다.
(출처 : https://gyrfalcon.tistory.com/entry/JAVA-접근-제한자)
private double rad = 0; 으로 설정해주면 -4.5로 설정되지 않을 것임.
1. 모든 변수를 되도록 private으로 선언한다.
2. 모든 변수에 대해서 getter, setter 함수를 만들어서 값을 읽고 쓴다.
⭐ 정확하게는 외부에서 필드의 값을 변경하기 위해 접근할 때,
단순하게 setXXX()라는 이름의 메서드(
setRad()) 하나만 덜렁 주지 말고,
changRad(double r)
와 같이 필드의 값을 변경하려는 목적을 제대로 파악하여그 목적을 잘 표현하는 메서드를 구현하는 것이 더 좋다.
ex.
도메인 패키지 및 클래스 경로 www.wxfx.com com.wxfx.smart
패키지 com.wxfx.smart는 com이라는 폴더에 wxfx라는 폴더에 있는 smart라는 폴더에 클래스를 위치시켜 동일한 이름의 클래스가 다른 위치에 놓이도록 한다
다른 위치에 있는 똑같은 이름의 클래스를 가져오고 싶은 경우 패키지 이름까지 가져온다
// 클래스 이름이 Circle로 동일함
com.wxfx.smart.Circle circle1 = new com.wxfx.smart.Circle();
com.fxmx.simple.Circle circle1 = new com.fxmx.simple.Circle();
javac <클래스 이름>.java
→ 클래스 파일 <클래스 이름>.class 생성
ex. javac JavaProject.java
java <클래스 이름>
: 이때 <클래스 이름>.class가 아니라 <클래스 이름>만 입력 !!
ex. java JavaProject
경로를 설정해주면 terminal이 해당 경로에서 실행된다.
set classpath = <클래스가 위치한 경로>
set classpath = C:\Users\kyung\Documents\workspace-sts 3.9.11.RELEASE\java_jvm\src
실행 후에는 원래의 디렉토리에서 터미널이 실행된다.
java -classpath <경로> java <클래스 이름>
ex. java -classpath C:\Users\kyung\Documents\workspace-sts-3.9.11.RELEASE\java_jvm\src java JavaProject
💡 classpath란 무엇인가?
터미널이 실행되는 경로를 받아주는 환경변수, set classpath를 하면 터미널이 실행되는 경로를 설정할 수 있다.