일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 정보처리기사
- 정보처리기사실기
- react
- typescript
- 자바의정석
- 리액트네이티브
- 자바스크립트
- CSS
- 정보처리기사실기요약
- 오라클
- Oracle
- 이안의평일코딩
- 정보처리기사정리
- 국비코딩
- 정보처리기사실기정리
- javascript
- 코딩테스트
- VUE
- php
- Java의정석
- 리액트
- ReactNative
- 스프링
- 자바스크립트 코딩테스트
- spring
- 타입스크립트
- 자스코테
- 평일코딩
- 국비IT
- 정보처리기사요약
- Today
- Total
이안의 평일코딩
JAVA의 정석 27일차 - 예외회피 본문
2020.07.21(화)
1. 예외처리 복습
1)종류
(1) 예외 복구 (직접처리)
예외발생(에러발생) ->실행 => try~catch
(2) 예외 회피 (간접처리, 예외 떠넘기기)
- 예측(어떤 에러가 발생할 가능성 있는지 예측)
- 다른 개발자가 예외처리를 각자 할 수 있게 자바->API->사용자 => throws
(3) 임의 발생
직접 예외처리를 제작 -> 자바 예외처리 저장 => throw 프로그램 전환
* 생성자 호출 class A {} => X 생성자 앞에 new A()
* 예외처리 new MyException() => X 예외처리는 호출할 때 앞에 throw 붙혀야함
throw 예외가 발생했다는 것을 알려줌 (throws 등록 : 이런 예외가 발생할 수 있다)
(4) 사용자정의
2)예외처리 계층구조
=Exception (가장 큼)
- CheckException : 컴파일시에 예외처리
IOException, SQLException, MalformedURLException, ClassNotFoundException, InterruptedException
- UnCheckException : 인터프리터 실행시에 에러발생
RuntimeException =>생략
3)형식
- try{ ~ }catch(예상되는 에러){ }
- public void display() throws 예상 예외클래스 { }
2. 예외회피
= 에러에 대한 예측이 가능하게 만든다
대부분의 프로그램은 => 직접처리 (try~catch)
=> API(자바, 라이브러리)
= 프로그래머가 예외처리를 각자 프로그램에 맞게 처리 유도
= 형식)
메소드() throws 예측한 예외 클래스 등록
예) 순서없이 나열이 가능
public void display() throws Exception, ArrayIndexOutOfBoundsException, NumberFormatException
{
}
==> 예외처리는 호출하는 메소드에서 처리
public class MainClass {
public int div(int a,int b) throws Exception
{
return a/b; // 0으로 나누면 에러가 발생할 수 있다
}
public static void main(String[] args) {
MainClass m=new MainClass();
int res=0;
try {
res = m.div(10, 2);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(res);
}
}
package com.sist.exception;
// 프로그래머 직접 제작하지 않지만 => 외부라이브러리
public class MainClass1 {
public void display() throws ArrayIndexOutOfBoundsException,
ArithmeticException,NumberFormatException,Exception
{
}
public static void main(String[] args) throws ArrayIndexOutOfBoundsException,
ArithmeticException,NumberFormatException,Exception{
MainClass1 m=new MainClass1();
m.display();
}
}
예외 발생시키기
package com.sist.exception;
public class MainClass2 {
public static void main(String[] args) {
try {
int a=10;
if(a%2==0) { //짝수면
ArithmeticException aa = new ArithmeticException("로그인창으로 이동");
throw aa;
}
else {
throw new Exception("회원가입창으로 이동"); // 위 두줄과 동일
}
}catch(ArithmeticException e) {
System.out.println(e.getMessage()); //방향 전환
}catch(NumberFormatException e) {
System.out.println(e.getMessage());
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println(e.getMessage());
}catch(Exception e) {
System.out.println(e.getMessage());
}
}
}
MainClass3
package com.sist.data;
import java.io.FileWriter;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
public class MainClass3 {
public static FoodHouseVO[] categoryFoodData() {
FoodHouseVO[] food = new FoodHouseVO[10];
try {
Document doc = Jsoup.connect("https://www.mangoplate.com/top_lists/1965_hotel_bingsu").get();
Elements title = doc.select("span.title h3");
Elements score = doc.select("strong.point span");
Elements address = doc.select("p.etc");
Elements poster = doc.select("img.center-croping");
Elements review = doc.select("p.short_review");
for(int i=0; i<10; i++) {
food[i] = new FoodHouseVO();
food[i].setTitle(title.get(i).text());
food[i].setScore(Double.parseDouble(score.get(i).text()));
//문자열 => 더블형 변환 Double.parseDouble()
//문자열 => 정수형 변환 Integer.parseInt()
//문자열 => 논리 Boolean.parseBoolean()
//Wrapper Class
food[i].setAddress(address.get(i).text());
food[i].setPoster(poster.get(i).attr("data-original"));
food[i].setReview(review.get(i).text());
}
}catch(Exception ex) {
ex.printStackTrace(); //에러위치 확인
}
return food;
}
public static CategoryVO[] categoryListData() {
CategoryVO[] cate = new CategoryVO[10];
//URL => https://www.mangoplate.com/ ==> CheckException
try {
Document doc = Jsoup.connect("https://www.mangoplate.com/").get();
//System.out.println(doc); => 소스읽기
Elements title = doc.select("div.info_inner_wrap span.title");
Elements subject = doc.select("div.info_inner_wrap p.desc");
Elements poster = doc.select("ul.list-toplist-slider img.center-croping");
//Elements link = doc.select("");
/*
* <p>aaa</a> p.text()
* <p src=""> p.attr() 속성
*
*/
for(int i=0; i<10; i++) {
cate[i] = new CategoryVO();
cate[i].setCno(i+1);
cate[i].setTitle(title.get(i).text());
cate[i].setSubject(subject.get(i).text());
cate[i].setPoster(poster.get(i).attr("data-lazy"));
}
}catch(Exception ex) {
ex.printStackTrace(); // 에러시에 어디서 오류 확인
}
return cate;
}
public static void main(String[] args) {
categoryFoodData();
}
}
FoodHouseVO (String review추가)
package com.sist.data;
// 맛집 1개에 대한 정보
public class FoodHouseVO {
private int no;
private int cno;
private String poster; // split
private String review;
private String title;
private double score;
private String address;
private String tel;
private String type;
private String price;
private String parking;
private String time;
private int good;
private int soso;
private int bad;
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public int getCno() {
return cno;
}
public void setCno(int cno) {
this.cno = cno;
}
public String getPoster() {
return poster;
}
public void setPoster(String poster) {
this.poster = poster;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getParking() {
return parking;
}
public void setParking(String parking) {
this.parking = parking;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public int getGood() {
return good;
}
public void setGood(int good) {
this.good = good;
}
public int getSoso() {
return soso;
}
public void setSoso(int soso) {
this.soso = soso;
}
public int getBad() {
return bad;
}
public void setBad(int bad) {
this.bad = bad;
}
public void setReview(String review) {
this.review=review;
}
public String getReview() {
return review;
}
}
FoodListCard
package com.sist.client;
import java.awt.*;
import javax.swing.*;
import com.sist.data.FoodHouseVO;
import java.net.*;
public class FoodListCard extends JPanel{
JLabel posterLa = new JLabel();
JLabel la1,la2,la3;
JTextPane ta; //JTextArea는 한줄에 글 출력, JTextPane은 밑줄로 내려가게됨
// 매개변수 ==> 3개 이상이면 => 배열,클래스
public FoodListCard(FoodHouseVO vo) {
//posterLa.setOpaque(true);
//posterLa.setBackground(Color.black);
try {
URL url = new URL(vo.getPoster());
Image img=ClientMainFrame.getImage(new ImageIcon(url), 200, 200);
posterLa.setIcon(new ImageIcon(img));
}catch(Exception ex) {}
la1=new JLabel(vo.getTitle());
la2=new JLabel(String.valueOf(vo.getScore()));
la2.setForeground(Color.orange);
la3=new JLabel(vo.getAddress());
ta=new JTextPane();
ta.setText(vo.getReview());
setLayout(null);
posterLa.setBounds(10, 15, 200, 200);
la1.setBounds(215, 15, 350, 30);
la2.setBounds(570, 15, 60, 30);
la3.setBounds(215, 50, 415, 30);
ta.setBounds(215, 85, 415, 130);
add(posterLa);
add(la1);add(la2);
add(la3);add(ta);
}
}
CardPrint
package com.sist.client;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import com.sist.data.*;
public class CardPrint extends JFrame{
public CardPrint() {
FoodHouseVO[] food = MainClass3.categoryFoodData();
JPanel p = new JPanel();
p.setLayout(new GridLayout(5,2));
add("Center",p);
for(FoodHouseVO vo:food) {
FoodListCard fc = new FoodListCard(vo);
p.add(fc);
}
setSize(1300, 1000);
setVisible(true);
}
public static void main(String[] args) {
new CardPrint();
}
}
ClinetMainFrame
package com.sist.client;
// 윈도우 => JFrame
// 윈도우와 관련된 클래스를 읽어온다
import javax.swing.*;
import java.awt.*; //Color, Layout
import java.awt.event.*; //interface
import java.net.URL;
public class ClientMainFrame extends JFrame implements ActionListener{
JLabel title = new JLabel("레시피 & 맛집 추천사이트", JLabel.CENTER);
MenuForm mf = new MenuForm();
ChatForm cf = new ChatForm();
ControllPanel cp = new ControllPanel();
// 윈도우 크기 결정 => 생성자에서 사용
public ClientMainFrame() {
/*
* 클래스에서 생성자 사용 => 선언이 아니라 => 구현할 때
* 예)
* 데이터베이스 : 오라클연결
* 네트워크 : 셋팅 => IP, PORT => 핸드폰 (개통)
* 웹 : 쿠키에서 값읽기 => 자동로그인
*/
title.setFont(new Font("굴림체", Font.BOLD, 55));
//title.setOpaque(true); // 불투명
//title.setBackground(Color.magenta);
setLayout(null); // JFrame (BorderLayout) 사용자 정의로 배치 => null
title.setBounds(10, 15, 1570, 100);
// 추가 => add()
add(title);
// 메뉴 배치
mf.setBounds(10, 120, 100, 400);
add(mf);
// 채팅폼
cf.setBounds(115, 760, 1465, 200);
add(cf);
// 출력화면
cp.setBounds(115, 120, 1465, 635);
add(cp);
setSize(1600, 1000);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE); // X버튼 클릭시 종료
mf.b1.addActionListener(this);
mf.b2.addActionListener(this);
}
public static void main(String[] args) throws Exception{
// 생성자 위에
UIManager.setLookAndFeel("com.jtattoo.plaf.mcwin.McWinLookAndFeel");
// 생성자는 호출시에 반드시 => new 생성자();
new ClientMainFrame();
}
public static Image getImage(ImageIcon ii, int w, int h) {
Image dimg = ii.getImage().getScaledInstance(w, h,
Image.SCALE_SMOOTH);
return dimg;
}
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource()==mf.b1) {
cp.card.show(cp, "DF"); //ControllPanel에 이름이 DF인 df =>detailform
}
else if(e.getSource()==mf.b2) {
cp.card.show(cp, "LF"); //LF => listform
}
}
}
'Back-end > Java' 카테고리의 다른 글
JAVA의 정석 29일차 - String, StringBuffer, Math, Wrapper (0) | 2020.07.23 |
---|---|
JAVA의 정석 28일차 - java.lang패키지 Object클래스 (0) | 2020.07.22 |
JAVA의 정석 26일차 - 예외처리 (0) | 2020.07.20 |
JAVA의 정석 25일차 - Layout (0) | 2020.07.17 |
JAVA의 정석 24일차 - 추상클래스, 인터페이스 (0) | 2020.07.16 |