728x90
반응형
Exception
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class ExceptExam08 {
public static void main(String[] args) {
try {
FileReader rd = new FileReader("some.txt");
}
catch(FileNotFoundException e) {
System.err.println("파일이 없다");
}
catch (IOException e) {
System.err.println("입출력 에러 발생");
}
}
}
catch문을 여러 개 달 수도 있다.
여기서 IOException이 FileNotFoundException보다 상위 예외이기 때문에
만약 IOException을 먼저 적게 되면 적절하게 동작하지 않는다.
public class ExceptExam11 {
public static void main(String[] args) {
int result = 0;
try {
result = subtract(5,100);
} catch (InvalidMyException e) {
e.printStackTrace();
}
System.out.println(result);
}
static int subtract(int a, int b) throws InvalidMyException {
if(a<b)
throw new InvalidMyException();
return a-b;
}
}
class InvalidMyException extends Exception{
public InvalidMyException() {
super("잘못된 입력 - 나의 예외처리");
}
}
예외 클래스를 내가 만들 수도 있다.
extends Exception으로 Exception 클래스를 상속받으면 된다.
Generic
public class SimplePairTest <T> {
T first;
T second;
public SimplePairTest(T first, T second) {
this.first=first;
this.second=second;
}
T getFirst() {
return this.first;
}
T getSecond() {
return this.second;
}
public static void main(String[] args) {
SimplePairTest<String> pair = new SimplePairTest<String>("apple", "banana");
System.out.println(pair.getFirst());
System.out.println(pair.getSecond());
SimplePairTest<Integer> pair2 = new SimplePairTest<Integer>(1, 2);
System.out.println(pair2.getFirst());
System.out.println(pair2.getSecond());
}
}
public class OrderedPairTest<T1,T2> {
T1 first;
T2 second;
public OrderedPairTest(T1 first, T2 second) {
this.first=first;
this.second=second;
}
T1 getFirst() {
return this.first;
}
T2 getSecond() {
return this.second;
}
public static void main(String[] args) {
OrderedPairTest<String, Integer> pair1 = new OrderedPairTest<String, Integer>("Hello", 123);
System.out.println(pair1.getFirst());
System.out.println(pair1.getSecond());
OrderedPairTest<String, String> pair2 = new OrderedPairTest<String, String>("Hello", "Hi");
System.out.println(pair2.getFirst());
System.out.println(pair2.getSecond());
}
}
제네릭타입을 두개 쓰는것도 가능하다
public class MyStack <T>{
int tos;
Object[] array;
public MyStack(){
array= new Object[10];
tos=0;
}
void push(T element) {
if(tos==10) {
System.out.println("못하는데.");
return;
}
array[tos++]=element;
}
T pop() {
if(tos==0) {
System.out.println("못하는데.");
return null;}
return (T)array[--tos];
}
public static void main(String[] args) {
MyStack<String> stringStack =new MyStack <String>();
stringStack.push("대구");
stringStack.push("서울");
System.out.println(stringStack.pop());
System.out.println(stringStack.pop());
System.out.println(stringStack.pop());
}
}
제네릭타입의 배열 T[] array = new T[10]; 을 선언할 수가 없는데,
그 대신 Object[] array = new Object[10]; 처럼 오브젝트타입으로 선언하면 된다.
이 오브젝트타입 배열에서 값을 빼서 T타입으로 리턴하는 경우 (T)로 형변환 해야 한다.
public class MyArrayAlgTest {
public static void main(String[] args) {
String[] language = {"C++","C#","JAVA"};
String last = MyArrayAlg.getLast(language);
System.out.println(last);
}
}
class MyArrayAlg{
static <T> T getLast(T array[]) {
return array[array.length-1];
}
}
메소드에만 제네릭타입을 적용할 수도 있다.
728x90
반응형
'2022-2 > 자바' 카테고리의 다른 글
[자바] 멀티스레드, synchronized (0) | 2022.12.01 |
---|---|
[자바] Vector (0) | 2022.12.01 |
package (0) | 2022.11.15 |
interface/Object class/Wrapper class/System class (0) | 2022.11.08 |
추상화 클래스, 추상화 메소드, 다형성 (0) | 2022.11.03 |
댓글