Chapter 7 패키지와 예외처리
자바는 서로 관련된 클래스들을 하나로 묶을 수 있는 방법을 제공함 => 패키지
라이브러리들은 패키지로 구성되어 있다....
왜 패키지 구조를 사용? 클래스 이름이 겹치더라도 패키지가 다르면 중복문제가 발생하지 않기 때문..
패키지 별로 접근에 재약을 가할수 있음 !
패키지를 생성하기 위해서는 소스코드 첫번째 줄에 패키지 문을 넣으면 됨.
그러면 클래스의 정식이름은 패키지이름.클래스명 이 된다.
패키지 문을 사용안하면 디폴트 패키지에 속하게 됨
패키지 안에 들어있는 클래스나 인터페이스를 사용하려면?? import하면 됨
다른 패키지의 클래스를 참조하려면 클래스의 완전한 이름을 써줘야함.
근데 불편하니까 import하는게 남
클래스 이름이 중복되면"? 당연하게도 패키지 이름을 써줘야함~
소스 파일의 위ㅜ치? \src\패키지이름\소스파일.java 로 저장됨
클래스 파일 위치는? \bin\패키지이름\클래스파일.class로 저장됨
자바 가상 기계가 클래스 파일을 찾는 경로를 CLASSPATH 라고 함
클래스 경로는 CLASSPATH라는 시스템 변수에 의해 설정됨
컴팡일러와 자바 가성기계는 모두 클래스 경로에 패키지 이름을 붙여서 클래스 파일을 찾음
-cp옵션을 지정하면 클래스 경로값을 바꿀수 있음
클래스 파일은 JAR 파일 형태로 저장될수 있음. 공간 절약에 성능향상
Object 클래스는 클래스를 정의할 때 명시적으로 부모 클래스를 선언하지 않으면 object클래스가 부모 클래스가됨.. 계층 구조에서 맨위임
getClass()메소드.. 어떤 클래스로 생성되었는지에 대한 정보를 반환한다.
리플랙션이라는 기법을 구현?
toString()메소드 문자열로 반환해주는 함수..일반적으로는 재정의 하여야 하는 함수다.
equals() 메소드 객체가 가지고 있는 애용이 일치하는지 비교 ==연산자 쓰면 안됨! !
== 연산자는 객체의 참조(주소)값을 비교함
우리가 작성한 객체가 동일 한 정보를 가지고 있는 ㅣ검사하려면 equals()재정의 해야함.
finalize()메소드는 객체가 소멸되기 직전에 호출된다. 서브클래스에서 재정의하여 자원을 반납하는 등 역할함
Wrapper 클래스.. 자바에서는 정수나 실수와 같은 기초 자료형을 제외하고는 모든 것이 객체로 되어있다
기초자료형도 객체로 포함하고 싶을 /때가 있음 -> ArrayList 이용함
기초 자료형을 저장하는 클래스 이다.
문자열을 기초 자료형으로 변환 -> parseInt, praselong, parseFloat, parseDouble
오토 박싱 wrapper객체와 기초 자ㅛ형 사이의 변환을 자동으로하여 주는 기능이 있음. ! ! ! !
String클래스
문자열 단어로 분리하고싶을때 split(" ") 이용 괄호안에 분리자를 지정함
StringBuffer클래스 스트링버퍼객체는 내붖거으로 문자열을 저장하는 메모를 가지고 있는데 그걸 버퍼라고함.
버퍼의총 크기는 capacity가 나타냄. 문자열의 길이는 length를 이용함 ! ! ! ! ! !
append와 insert 같은 것들ㅇ ㅣ있음
기타 유용한 클래스 math, random, arrays , calendar, ...
calendar.getInstance()
예외 처리.. try catch문 , throws
Mini Project
import java.util.*;
public class miniprocject {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] words = {"java", "count", "school", "book", "student", "programmer" };
int index = (new Random()).nextInt(words.length);
String solution = words[index];
StringBuffer answer = new StringBuffer(solution.length());
for(int i=0;i<solution.length();i++) {
answer.append("_");
}
int cnt = 0; //실행횟수 제한
while(true) {
System.out.println("현재의 상태: "+ answer);
if(solution.equals(answer.toString())|| cnt >10) {
break;
}
System.out.print("글자를 추측하시오: ");
char s = sc.next().charAt(0);
for(int i=0;i<solution.length();i++) {
if(s == solution.charAt(i)) {
answer.setCharAt(i,s);
}
}
cnt++;
}
}
}
Exercise
1.
1) package library;
2) library.Rectangle obj = new library.Rectangle();
3) import library;
2.
1)
int n = (int)Math.random()*100;
2)
String[] tokens = "082-2-777-5566".split("-");
3)
Calendar d = Calendar.getInstance();
System.out.println(d);
4)
Test obj = new Test();
System.out.println(obj.getClass().getName());
5)
int n = 0;
while(n<=90){
n+=5;
System.out.println(n*Math.PI/180);
}
3.
s1==s2 -> s1.equals(s2)
연산자 == 은 객체의 참조값을 비교하기 때문에 false가 나온다.
4.
Integer obj;
obj = 100; //자동박싱
System.out.println(obj+1); //자동언박싱
5.
정수와 같은 기초 자료형도 객체로 포장하여 쓰기 위해서
6.
1) 배열을 초기화 하지 않음 -> 컴파일 오류
2) 자바 가상 기계가 클래스를 찾을 수 없는경우 -> 에러
3) 파일을 읽던 프로그램이 파일의 끝에 도달한 경우 -> 예외 발생 안함
4) 파일의 끝에 도달했는데도 파일을 읽으려고 시도 -> 체크 예외
7.
1) array의 인덱스의 범위는 0~9인데 10을 쓰려고 하면 컴파일 에러가 발생한다.
2)
try{
for(int i=0; i<=array.length;i++)
System.out.print(array[i] + " ");
}catch (ArrayIndexOutOfBoundsException e) {
System.out.println("인덱스 초과");
}
3)
public static void sub() throws IOException {
...
}
8.
거의 모든 종류의 예외를 다 잡기 때문에 어떤 예외인지 알기 힘들어서 바람직 하지 않다.
9.
첫번째 catch문에서 모든 종류의 예외를 다 처리하기 때문에 두번째 catch문은 실행되지 않는다.
10.
숫자 형식 오류
finally
Programming Exercise
1.
class Die {
int v;
Die() { v = 1;}
int roll() {
v = (int)(Math.random()*10%6+1);
return v;
}
void setValue(int v) { this.v = v; }
int getValue() { return v; }
public String toString() {
String s = v + "";
return s;
}
}
2.
package game;
public class ch7_2 {
public static void main(String[] args) {
Die computar = new Die();
Die me = new Die();
computar.roll(); me.roll();
System.out.println("컴퓨터 주사위: " + computar.getValue());
System.out.println("내 주사위: " + me.getValue());
}
}
3.
package rps;
import java.util.*;
public class ch7_3 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n1 = (int)(Math.random()*10%3);
String[] s = { "가위", "바위", "보" };
System.out.print("하나를 선택하시오 : 가위(0), 바위(1), 보(2) : ");
int me = sc.nextInt();
System.out.println("컴퓨터는 "+s[n1]+"를 냈습니다.");
if(me == n1) {
System.out.println("비겼습니다.");
}else {
if(me == 0) {
if(n1 == 1) System.out.println("졌습니다.");
else System.out.println("이겼습니다.");
}else if(me ==1) {
if(n1 == 2) System.out.println("졌습니다.");
else System.out.println("이겼습니다.");
}else {
if(n1 == 0) System.out.println("졌습니다.");
else System.out.println("이겼습니다.");
}
}
}
}
4.
import java.util.*;
public class ch7_4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("문자열을 입력하시오 : ");
String s = sc.nextLine(); //공백포함 입력
String[] tokens = s.split(" ");
for(String token : tokens) {
System.out.print(token + ",");
}
System.out.printf("\n모두 %d개의 단어가 있습니다.", tokens.length);
}
}
'Major > Java' 카테고리의 다른 글
[자바로 배우는 리팩토링 입문] 1장 매직 넘버를 기호 상수로 치환 (0) | 2022.04.13 |
---|---|
[자바로 배우는 리팩토링 입문] 0장 리팩토링이란 (0) | 2022.04.13 |
[Power Java Compact] 6장 연습문제 (0) | 2021.12.29 |
[Power Java Compact] 5장 연습문제 (0) | 2021.12.22 |
[Power Java Compact] 4장 연습문제 (3) | 2021.12.20 |