
Java SE 17 Programmer 1 (Java silver) 1장 오답노트
Q1.
이름공간?, 엑세스제어를 제공? 이게 무슨말이야.. 그리고 패키지에 속하지않은 클래스도 존재하는거아니야?
A1.
이름공간을 제공한다 -> 중복을 피하기위해, 이름을 다르게 설정가능하게 만든다라는 뜻.
엑세스제어를 제공한다 -> public static default 같이 외부내부 패키지에따른 접근제어자를 뜻하는것.
패키지에 속하지않은 클래스도 존재하는거 아님? -> 아님, 패키지 이름을 생략한 클래스는 무명패키지에 속해있는것. 클래스는 무조건 패키지안에 속해있음.
Q2.
자동으로 import
되는것?
A2.
java.lang 패키지 (String, Integer...) 자동임포트됨 만약 안되면 java.lang.String = "A"
이렇게 매번 적어서 사용해야함.
또, 같은 패키지안 클래스도 자동 import됨
Q3.
extends 문제, 다만 부모클래스의 패키지 선언이 안되어있고 자식클래스는 패키지 선언이 되어있음.
-> 부모클래스 패키지 선언 안되어있는거 눈치를 못챔
A3. 패키지가 서로 다르므로 컴파일 에러나옴
package infopackage1;
public class InfoSample extends Sample {
public static void main(String[] args) {
System.out.println(num);
}
}
Sample 클래스는 무명클래스에 속해있으므로 extends에서 이미 컴파일 에러가 남
Q4.
어플리케이션의 엔트리포인트가 되는 메서드가 뭔소리야, 또 이 메서드가 되기위한 조건은?
A4.
엔트리포인트 메서드는 main 메서드를 의미함
main 메서드가 되는 조건에 대한 문제.
1.public
2.static
3.void
4.메서드 이름은 main 이여야함
5.String 배열형, 또는 가변형 -> public static void main(String... args) 도 가능
Q5.
java 커멘드의 실행에 관한문제. 해당 문제의 개념을 몰랐음.
A5.
java 커멘드란, JVM을 기동하기위한 커멘드.
java 완전수식 클래스명 [인수 인수...]
[] 안에있는 인수는 기동 파라미터, 커멘드라인 인수 라고 부른다.
java 커멘드 실행후 동작순서
JVM 기동 -> 지정클래스로드 -> String배열 오브젝트 작성, 기동파라미터를 격납
-> 기동파라미터를 가지고있는 String배열의 오브젝트의 참조값을 인수로 전달후 main 메서드 실행
예시문제
java Asd sea bal java
public class Asd {
public static void main(String[] args){
System.out.println(args[0] + " " + args[1]);
}
}
sea bal이 출력됨
Q6.
javac
커맨드의 개념과 Java SE 11 소스파일 모드
A6.
1.
javac
커맨드의 개념
javac
는 자바 소스 파일(.java)을 컴파일해서.class
바이트코드 파일로 만드는 명령어.Java SE 11 이전에는 항상
javac
를 거쳐야.class
를 만들고 실행 가능.
Java SE 11의 변화: 소스파일 모드 추가
java
명령으로.java
파일을 바로 실행할 수 있는 "소스파일 모드"가 추가.javac
를 먼저 호출할 필요 없이 즉시 실행
예제
public class Hello {
public static void main(String... args) {
System.out.println("Hello, Java 11!");
for (String arg : args) {
System.out.println("Arg: " + arg);
}
}
}
java se 8
javac Hello.java
java Hello arg1 arg2
java se 11 이후
java Hello.java test1 test2
javac
에만 존재하는 주요 옵션
bashCopyEditjavac -d out Hello.java
-d out
:.class
파일의 출력 디렉토리 지정.
javac
와 java
모두에서 사용 가능한 옵션
bashCopyEditjavac --source 8 Hello.java
java --source 8 Hello.java
--source 8
:소스코드의 문법을 Java 8 규칙으로 해석하도록 명시.
.java
파일 확장자가 아니거나 이전 버전 문법 강제할 때 유용.특별 사례javaCopyEdit// 파일명: Sample.java public class Test { public static void main(String... args) { System.out.println("Hello from Test class!"); } }
bashCopyEditjava Sample.java
소스파일 모드에서는 public 클래스명과 파일명이 달라도 실행 가능
(Java SE 11 이상에서만).
Q7.
기동파라미터와 더블쿼테이션 " 의 사용
A7.
스페이스(공백)를 각 기동파라미터를 나누는 기준으로 사용.
java Sample a b c
→ args = {"a", "b", "c"}
만약 스페이스가 포함된 문자열을 하나의 파라미터로 넘기고 싶으면 " 더블쿼테이션으로 감쌈
java Sample "a b c"
→ args = {"a b c"}
(하나의 요소로 취급)
" 더블쿼테이션 자체를 값으로 전달하려면 ¥"
→ 실제로는 \"
를 사용하여 escape해줌
예:
java Sample ¥"abc¥"
→ args[0] = " \"abc\" "
주의점
Windows CMD는
"
로 감싼 문자열 내부에 다른 문자열이 바로 붙어 있으면 그냥 붙여서 하나의 인자로 본다.
"a "b → "a b"
댓글을 작성해보세요.