final 질문드리겠습니다.
public final String lens;
선언과 동시에 값을 초기화 하지 않고 선언만 한뒤
public ActionCam(){
lens ="광각렌즈"
}
기본생성자 내에서 이와같이 초기화 하는 케이스 있다고 설명해주셨습니다.
근데 기본생성자가 아닌 매개변수를 가지고 있는 생성자내에서
public void ActionCam2(String name){
lengs = "테스트"
}
와같이 선언한 경우는 lens 변수는 정의할수없다고 에러메시지가 뜨는데 기본생성자는 가능하고 매개변수가 있는 메소드는 불가능한 이유가 궁금합니다.
답변 1
3
안녕하세요?
먼저 final 에 대해서 아주 잘 이해해주셨습니다. 다만 코드상에 실수가 있네요 😅 ActionCam2 클래스의 생성자를 만드실 때 public 과 ActionCam2 사이의 void 가 있게 되면 이는 생성자가 아닌 일반 메소드가 됩니다. final 변수는 생성자에서만 초기화가 가능하므로 에러가 발생한 것이구요.
public void ActionCam2(String name){ // public ActionCam2(...) 로 변경해야 돼요
lengs = "테스트"
}코드를 다음과 같이 바꾸신 다음 실행해보시면 정상 동작을 확인하실 수 있습니다.
// ActionCam.java
public class ActionCam{
public final String lens;
public ActionCam() { // 기본 생성자
lens = "광각렌즈";
}
}// ActionCam2.java
public class ActionCam2{
public final String lens;
public ActionCam2(String name) { // 매개변수가 있는 생성자
lens = name;
}
}// Main.java
public class Main {
public static void main(String[] args) {
ActionCam cam = new ActionCam();
System.out.println(cam.lens);
ActionCam2 cam2 = new ActionCam2("망원렌즈");
System.out.println(cam2.lens);
}
}실행 결과는 아래와 같습니다.
광각렌즈
망원렌즈궁금증 해결에 도움되셨길 바라겠습니다 😊
감사합니다.
자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?
1
146
2
static이 뭐였는지 기억이 안나요 ㅜㅜ
0
119
2
Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의
0
72
1
사고력 키우는 법이 어떤게 있나요?
0
94
2
getter setter
0
103
2
섹션9. 66 메소드 오버로딩 시 질문이 있습니다.
0
80
1
안녕하세요 갑자기 프로그램 에러가 떠서 안되네요
0
76
2
변수 이름짓는법
0
114
2
intelli J 실행오류
0
115
2
혹시 이건 수학적 사고가 부족한 걸까요?
0
152
2
영상이 재생이 안됩니다.
0
167
3
이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.
0
117
2
응용이 어렵습니다.
0
206
2
IntelliJ가 보이지 않습니다.
0
187
3
JDK 버전 문의
0
130
2
BlackBox 파일 내에서 메소드 정의
0
136
1
동기화
0
123
2
Iterator 문의
0
105
1
코드 순서 문의
0
143
1
클래스 메소드
0
150
2
Quiz_05 관련 질문드립니다 !
0
118
2
다운로드가 안됩니다
0
165
2
다형성
0
120
2
HashMap
0
81
2





