2015-03-23 2 views
1

Я не уверен, что лучший способ бросить несколько исключений в основном методе. Это подход, который я взял, мне было интересно, если этот путь является правильнымJAVA: Try catch Исключения

public static void main(String[] args) { 

     File nFile = new File("ProductData.txt"); 
     File file = new File("CustomerData.txt"); 
     File pFile = new File("PurchaseOrderDataFile.txt"); 
     try { 
      Scanner pScan = new Scanner(pFile); 
      Scanner scan = new Scanner(file); 
      //Makes ElectronicsEquipmentSupplier object with the month and year product array 
      ElectronicsEquipmentSupplier ees = new ElectronicsEquipmentSupplier 
     (1, 12, InputFileData.readProductDataFile(nFile)); 
      //Adds successive customer records to suppliers customer list 
      for (int i = 0; i < 28; i++) { 
       ees.addNewCustomer(InputFileData.readCustomerData(scan)); 
      } 
      for (int i = 0; i <= 24; i++) { 
       String poByMonth = InputFileData.readPurchaseOrderDataFile(pScan); //Brings list in by months 
       String[] purchaseOrder = poByMonth.split("\\s+"); 
       ees.startNewMonth(); //When the months are split by the @ it adds a new month 
       for (int j = 0; j <= purchaseOrder.length - 1; j++) { 
        String[] result = purchaseOrder[j].split("#"); 
        int qty = Integer.parseInt(result[3]); 
        ees.addNewPurchaseOrder(result[0], result[1], result[2], qty); 
        double orderTotal = 0; 
        for (Product p : ees.getRangeOfProducts()) { 
         if (p.getProductCode().equals(result[2])) { 
          orderTotal = p.getPricePerUnit() * qty; 
         } 
        } 
        CustomerDetails customer = ees.getDetails().findCustomer(result[1]); 
        customer.setTotalPrice(orderTotal + customer.getTotalPrice()); 
        if (result[1].substring(0, 1).equals("P")) { 
         System.out.println("Customer ID: " + (result[1])); 
         System.out.println("Discount: " + customer.getDiscountRate()); 
        } 
       } 
      } 
     } //Catches exceptions 
     catch(IllegalCustomerIDException| IllegalProductCodeException | 
       IncorrectPurchaseOrderException | CustomerNotFoundException | IOException ex){ 
      //Outputs exceptions if they are caught 
      System.out.println(ex); 
     } 
    } 

Как вы можете видеть, что я положил все это в один большой попытке поймать и бросить все исключения сразу. Мне показалось, что это отличный способ сделать это, но я не уверен, действительно ли это хорошая практика.

+2

Почему бы вам просто не объявить, что основной метод выбрасывает все эти типы исключений? –

+0

Как это сделать? если вы имеете в виду положить все их в заголовок? Мне сказали, что это была плохая практика. –

+1

'public static void main (String [] args) throws IllegalCustomerIDException, IllegalProductCodeException' и т. Д. –

ответ

-1

Вы можете просто сделать catch (Exception e){}, чтобы поймать их всех сразу.

Однако большую часть времени полезно делать что-то с исключением, когда/где это происходит, а не просто ловить их всех в конце.

+0

Итак, если бы я сделал catch {Exception e} {sout "e"}, он просто выводит конкретное исключение? это намного лучше, чем то, что я делаю? –

+2

Ловля 'Исключения' редко бывает хорошей идеей: она скрывает исключения, которые вы должны обрабатывать определенным образом, например. 'InterruptedException', который вы можете добавить в более поздние обновления кода. –

+0

Итак, что мне делать? –

0

Вы также можете сделать что-то вроде:

public static void main(String[] args) { 
    try { 
     ... 
    } catch(IllegalCustomerIDException e) { 
     ... 
    } catch(IllegalProductCodeException e) { 
     ... 
    } catch(IncorrectPurchaseOrderException e) { 
     ... 
    } catch(CustomerNotFoundException e) { 
     ... 
    } catch(IOException e) { 
     ... 
    } 
} 
+0

уверен, что нет? что выглядит так беспорядочно .. –

+0

Чувствует себя как большой старый шаг назад от многократного исключения. –

+1

Это, вероятно, имеет смысл только в том случае, если эти исключения являются подклассами друг друга, и вы хотите сделать что-то конкретное с исключением. – Ryan

0

Я надеюсь, что это объясняет, когда вы должны перехватывать исключения: Когда я знаю, как обращаться с исключениями:

class SomeWeirdName{ 
    void someMethod(){ 
    try{ 
     // your logic here >_< 
    } 
    catch(ExceptionTypeA A){ 
     doSomething1(); 
    } 
    catch(ExceptionTypeB B){ 
     doSomething2(); 
    }finally{ 
     somethingElse(); 
    } 
    } 
} 

Если я не не знаю, как обрабатывать исключение:

class SomeWeirdName{ 
     // i don't know how to handle the exception, so no need to catch them 
     // maybe someone else is gonna catch the exception later in some 
     // other class 
     void someMethod() throws ExceptionTypeA, ExceptionTypeB{   
      // your logic here >_< 
     } 
    } 

Как вы видите, когда и как лет u catch исключение «должно» зависеть от того, как вы «обрабатываете» это исключение. Надеюсь, это поможет.

Смежные вопросы