2014-12-15 3 views
1

try catch에 대한 예제를 시도했지만 원하는대로 작동하지 않습니다.Java Try Catch NullPointerException

public static void main(String[] args) 
{ 
    //This array's size is 5 and it has 4 Strings in it. 
    String[] array = new String[5]; 
    array[0] = "Hello"; 
    array[1] = "World"; 
    array[2] = "try catch"; 
    array[4] = "error"; 

    try 
    { 
     for(int i = 0 ; i<array.length ; i++) 
      System.out.println("This array has: "+array[i]); 

    } catch (NullPointerException e) 
    { 
     System.out.println("Null!!!"); 
    } 
} 

출력이 같다 :이 코드입니다

이 배열이있다 : 세계

이 배열이 있습니다 : 안녕하세요

를이 배열은이 캐치를

시도

이 배열의 값은 다음과 같습니다. null

이 배열의 오류 :

catch 블록을 입력해야하지만 그렇지는 않습니다. 어떤 아이디어?

+3

예외를 던질 것으로 예상되는 작업과 그 이유는 무엇입니까?(게시하기 전에 코드를 신중하게 포맷 할 수 있다면 알 수 있습니다. 여기에 들여 쓰기가 여기에 있습니다.) –

+0

array [3]은 null이므로 인쇄합니다. 왜 NPE를 던져야 하나? –

답변

7

인 메서드를 호출하거나 null 배열에 액세스하려고하면 메서드가 호출 될 때 NullPointerException이 발생합니다. 그러나 그것은 여기에서 일어나지 않습니다. 배열이 제대로 초기화됩니다. array[3]을 초기화하지 않았더라도 NPE는 여기에서 발생하지 않습니다.

여기서 발생하는 것은 String conversion (JLS, Section 5.1.11)입니다.

참조가 null 인 경우 "null"(4 개의 ASCII 문자 n, u, l, l) 문자열로 변환됩니다.

nullString가 연결될 때, 그래서 NPE가 발생하지 않는 String"null"로 변환된다.

0

'catch'블록에 들어가기로되어 있지 않습니다. null을 보유하는 경우에도 REQUESTING array [i]에 대한 NullPointerException이 없습니다. null로이 작업을 시도하면 예외가 발생합니다 (예 : array [i] .toLowerCase()

2

객체 배열 요소 (프리미티브를 제외한 모든 유형)는 null으로 초기화됩니다. 이 NullPointerException의를 잡기 위해 나쁜 습관이다

public void print(String s) { 
    if (s == null) { 
     s = "null"; 
    } 
    write(s); 
} 

하는 것으로하십시오 null 요소가 인쇄되면 System.out.println에서 사용 PrintStream#print의 아래 코드에서와 같이 문자열 리터럴 "널 (null)"가 표시됩니다. 확인 된 예외 인 경우 컴파일러에서 예외가 발생하지 않을 것이라고 플래그를 지정했을 수 있습니다.

0

배열 요소는 null로 초기화됩니다. NullPointerException을 가져 오려면 다음과 같은 String 메소드를 사용하십시오.

array[i].toLowerCase() 
0

문자열을 사용하여 오류를 만들려고합니다.

'split (String regex)'와 같은 작업을 수행하면 null 값을 분리하려는 이유로 스크립트가 터질 수 있습니다. 스크립트의 catch 부분에 충돌합니다.