1.
1) JDK (Java Development Kit) - 개발할 때 필요 (컴파일러 포함)
개발자가 Java 프로그램을 개발할 때 필요한 도구 모음
컴파일러(javac), JRE, 개발도구들
>> 소스코드(.java) -> javac 컴파일러 -> 바이트코드(.class)
2) JRE (Java Runtime Environment) - 실행
Java 프로그램을 실행하기 위한 환경
JVM(Java Virtual Machine), 기본 라이브러리
>> 바이트코드(.class) -> JVM -> 프로그램 실행
2.
public class Triangle {
static double area; >>>>>>> 클래스 변수
int b = 2, h = 3; >>>>>>> 인스턴스 변수
public static void main(String[] args) {
double p, b, h; //line n1
if (area == 0) {
b = 3;
h = 4;
p = 0.5;
area = p * b * h; //line n2
}
System.out.println("Area is " + area);
}
}
인스턴스 변수를 사용하려면 객체를 따로 main에서 생성해줘야 함
public class Triangle {
static double area;
int b = 2, h = 3; // 인스턴스 변수
public static void main(String[] args) {
// 인스턴스 변수를 사용하려면 객체 생성 필요!
Triangle triangle = new Triangle();
double p; // 지역변수 p만 선언
if (area == 0) {
// b, h는 인스턴스 변수 사용
p = 0.5;
area = p * triangle.b * triangle.h;
}
System.out.println("Area is " + area);
}
}
3.
Java 7 이전의 switch 문에서 허용되는 타입:
- byte, short, char, int의 기본형(primitive)
- Byte, Short, Character, Integer의 래퍼 클래스
- enum 타입
이후에는 String도 사용가능
Switch의 변수가 무엇으로 선언되어 있는지 확인해야함
4.
Boolean[] bool = new Boolean[2];
// bool[0]에는 true 값을 가진 Boolean 객체 생성
bool[0] = new Boolean(Boolean.parseBoolean("true"));
// bool[1]에는 null을 가진 Boolean 객체 생성
bool[1] = new Boolean(null); // null을 파라미터로 받으면 false로 처리됨!
System.out.println(bool[0] + " " + bool[1]);
// 출력: "true false"
Boolean은 null 자체를 파라미터로 받으면 False처리.
만약 null예외 나게하려면
Boolean b = null;
b.toString(); // NullPointerException!
// 또는
Boolean[] bool = new Boolean[2];
bool[1] = null; // null 자체를 할당
System.out.println(bool[0] + " " + bool[1]); // NullPointerException
위와 같이 null 자체를 변수에 할당해야 한다.
5.
public class MyException extends RuntimeException { }
public class Test {
public static void main(String[] args) {
try {
method1();
} catch (MyException ne) {
System.out.print("A");
}
}
public static void method1() {
try {
throw Math.random() > 0.5 ? new MyException() : new RuntimeException();
} catch (RuntimeException re) {
System.out.print("B");
}
}
}
여기서 중요한 점은 MyException이 RuntimeException을 상속받고 있다는 점이다.
따라서 Math.random() > 0.5면 MyException 발생할지라도 MyException도 RuntimeException의 자식이라
RuntimeException으로 처리가 됨
6.
public class App {
String myStr = "7007"; // 인스턴스 변수로 "7007" 초기화
public void doStuff(String str) {
int myNum = 0; // 지역변수 myNum 초기화
try {
String myStr = str; // 지역변수 myStr에 "9009" 할당
// 인스턴스 변수 myStr은 여전히 "7007"
myNum = Integer.parseInt(myStr); // myNum = 9009
} catch (NumberFormatException ne) {
System.err.println("Error");
}
// 여기서 myStr은 인스턴스 변수 참조 (7007)
System.out.println("myStr: " + myStr + ", myNum: " + myNum);
}
public static void main(String[] args) {
App obj = new App();
obj.doStuff("9009");
}
}
7.
C. More dynamic code at runtime
다형성은 런타임 시점에 객체의 실제 타입에 따라 올바른 메서드를 호출할 수 있게 해줌
이를 통해 코드를 더 동적으로 만들 수 있
D. More flexible and reusable code
다형성 덕분에 여러 타입의 객체를 같은 방식으로 처리할 수 있어서, 코드의 유연성과 재사용성을 높일 수 있음
B. More efficient code at runtime > 안되는 이유
- 실제로 다형성은 약간의 성능 오버헤드를 발생시킬 수 있음
- 가상 메소드 테이블을 검색하고 적절한 메소드를 찾는 과정 필요
- 따라서 "더 효율적"이라고 할 수 없음
8.
char var1 = 'a'; // 지역변수 var1 = 'a'
char var2 = var1; // 지역변수 var2 = 'a'
var2 = 'e'; // 지역변수 var2를 'e'로 변경
Vowel obj1 = new Vowel();
Vowel obj2 = obj1; // obj1과 같은 객체를 참조
obj1.var = 'o'; // 둘 다 같은 객체의 var를 'o'로 변경
obj2.var = 'i'; // 둘 다 같은 객체의 var를 'i'로 변경
// 출력
System.out.println(var1 + ", " + var2); // "a, e" 출력
System.out.print(obj1.var + ", " + obj2.var); // "i, i" 출력
9.
// a 생성
boolean a = new Boolean(Boolean.valueOf(args[0]));
// 1. Boolean.valueOf("1")은 false 반환
// 2. new Boolean(false)는 false
// b 생성
boolean b = new Boolean(args[1]);
// "null" 문자열로 Boolean 생성 -> false
- Boolean.valueOf()는:
- "true"(대소문자 무관) -> true
- 그 외 모든 문자열 -> false
- new Boolean(String)은:
- "true"(대소문자 무관) -> true
- 그 외 모든 문자열(null 포함) -> false
10.
StringBuilder의 주요 메소드들:
- delete(int start, int end): 지정된 범위의 문자 삭제
- length(): 현재 길이 반환
- append(): 문자열 추가
- insert(): 지정 위치에 삽입
- reverse(): 문자열 뒤집기
'Certification > OCAJP' 카테고리의 다른 글
OCAJP 준비 (Q106 - Q125) (8) | 2024.11.13 |
---|---|
OCAJP 준비 (Q91 - Q105) (1) | 2024.11.07 |
OCAJP 준비 (Q45 - Q65) (0) | 2024.11.06 |
OCAJP 준비 (Q26 - Q44) (0) | 2024.11.05 |
OCAJP 준비 (Q01 - Q25) (0) | 2024.11.04 |