자바 이상 처리의 빈 바늘 이상
1: 빈 포인터 이상이 발생하는 주요 원인은 다음과 같다.
(1) 대상이 존재하지 않을 때 그 방법을 사용하면 이상obj가 발생합니다.method()//obj 객체가 없습니다.
(2) 대상이 존재하지 않는 필드에 접근하거나 수정할 때 이상obj가 발생합니다.method()//method 방법이 없습니다.
(3) 문자열 변수가 초기화되지 않았습니다.
(4) 인터페이스 유형의 객체는 다음과 같은 특정 클래스로 초기화되지 않았습니다.
List lt;잘못 보고하다
List lt = new ArrayList();잘못 보고하지 않을 것이다
대상의 값이 비어 있을 때, 당신은 비어 있다고 판단하지 않습니다.너는 아래의 코드를 앞에 한 줄의 코드를 추가해 볼 수 있다.
if(rb!=null && rb!="")
변경:
if(rb==null);
if(rb!==null&&rb!="") if((“”).equals(rb))
빈 포인터 해결 방법:오류가 발생하는 데 중점을 두고 빈 바늘 이상을 통해 발생하는 두 가지 주요 원인을 통해 구체적인 오류를 진단한다.또한 빈 바늘의 발생을 피하기 위해서는 판단 처리를 할 때'null'또는 빈 값을 설정된 값 앞에 두는 것이 좋다.
일반 빈 포인터 예외에 대한 간략한 분석:
(1) 빈 포인터 오류 Java.lang.NullPointerException
자바에 있는 8가지 기본 데이터 형식은 변수의 값이 기본값이 있을 수 있고 그에 대한 정상적인 값이 없으면 자바 가상 컴퓨터는 정확하게 컴파일할 수 없기 때문에 기본적인 자바 데이터 형식을 사용하면 빈 바늘 이상을 일으키지 않습니다.실제 개발에서 대부분의 빈 바늘 이상은 주로 대상의 조작과 관련이 있다.
2. Java 예외 처리 메커니즘
예외가 발생할 수 있는 코드에는 다음과 같은 두 가지 처리 방법이 있습니다.
첫째, 방법에서try로...catch 문장은 이상을 포착하고 처리합니다.catach 문장은 여러 개가 있을 수 있으며, 여러 개의 이상을 일치시킬 수 있습니다.예:
public void p(int x){
try{
...
}catch(Exception e){
...
}finally{
...
}}
둘째, 처리할 수 없는 이상 또는 전환할 이상에 대해 방법의 성명서에서throws 문장이 이상을 던졌다.예:
public void test1() throws MyException{
...
if(....){
throw new MyException();
}}
만약 모든 방법이 간단하게 이상을 던진다면, 방법 호출 방법의 다중 플러그인 호출에서 자바 가상 기회는 이상이 발생한 방법 코드 블록에서 이 이상을 처리하는 코드 블록을 찾을 때까지 되돌아온다.그리고 이상을 상응하는catch 문장 처리에 건네줍니다.Java 가상 머신이 메소드 호출 스택의 맨 밑에 있는 main() 메소드로 거슬러 올라갈 때, 비정상적인 코드 블록을 처리하는 것을 찾지 못하면 다음 절차에 따라 처리합니다.첫째, 이상한 대상을 호출하는 printStackTrace() 방법, 인쇄 방법은 창고의 이상 정보를 호출합니다.
둘째, 만약에 이상한 라인이 주 라인으로 나타나면 전체 프로그램의 운행이 종료된다.만약 주 루틴이 아니라면, 이 루틴을 종료하고, 다른 루틴은 계속 운행합니다.
분석 사고를 통해 알 수 있듯이 이상 소모된 자원과 시간을 일찍 처리할수록 영향을 미치는 범위도 작아진다.따라서 자신이 처리할 수 있는 이상을 호출자에게도 던지지 마라.
그리고 한 가지는 무시할 수 없다:finally 문장은 어떤 상황에서도 반드시 실행해야 하는 코드이다. 그러면 어떤 상황에서도 반드시 실행해야 하는 코드의 신뢰성을 확보할 수 있다.예를 들어 데이터베이스 조회가 이상할 때 JDBC 연결을 풀어야 한다.finally 문장은return 문장보다 먼저 실행되며, 선후 위치를 막론하고try 블록에 이상이 있든 없든.finally 문장이 유일하게 실행되지 않는 상황은 방법이 시스템을 실행한 것이다.exit () 메서드.System.exit()의 역할은 현재 실행 중인 Java 가상 머신을 종료하는 것입니다.finally 문장 블록에서 변수에 새 값을 부여해서 리턴의 반환 값을 바꿀 수 없습니다. 또한 finally 블록에서 리턴 문장을 사용하지 마십시오. 의미가 없으면 오류가 발생하기 쉽습니다.
마지막으로 비정상적으로 처리되는 문법 규칙에 주의해야 한다.
첫째,try문장은 단독으로 존재할 수 없고catch,finally와 구성할 수 있다
try...catch...finally、try...catch、try...finally 세 가지 구조,catch 문장은 하나 또는 여러 개가 있을 수 있으며,finally 문장은 가장 많고try,catch,finally 이 세 가지 키워드는 모두 단독으로 사용할 수 없습니다.
둘째,try,catch,finally 세 개의 코드 블록에서 변수의 작용역은 각각 독립되어 서로 접근할 수 없다.세 블록 모두에서 액세스할 수 있는 경우 이러한 블록 바깥쪽에 변수를 정의해야 합니다.
세 번째, 여러 개의catch 블록을 실행할 때 자바 가상 기회가 그 중의 이상 클래스나 하위 클래스와 일치하면 이catch 블록을 실행하고 다른catch 블록을 실행하지 않습니다.
넷째,throw 문장 뒤에는 다른 문장을 따라가는 것을 허락하지 않는다. 왜냐하면 이것은 실행할 기회가 없기 때문이다.
다섯째, 만약에 한 방법이 다른 성명이 이상을 던지는 방법을 사용한다면 이 방법은 이상을 처리하거나 성명이 던져진다.
2.2throw와throws 키워드의 차이점:
throw는 방법 안에 이상을 던지는 데 쓰인다.문법 형식은:throw 이상 대상입니다.
throws는 방법이 어떤 이상을 던질 수 있는지 설명하는 데 사용됩니다. 방법명 뒤에 문법 형식은 다음과 같습니다.
throws 이상 유형 1, 이상 유형 2...이상 유형 n.
3: 빈 포인터 이상이 발생할 수 있는 몇 가지 상황과 해결 방안을 나열합니다.
코드 세그먼트 1:
out.println(request.getParameter("username"));
분석: 코드 세그먼트 1의 기능은 매우 간단하다. 바로 사용자가 "username"값을 입력하는 것을 출력하는 것이다.설명: 보아하니 위의 문장은 문법 오류를 찾을 수 없을 뿐만 아니라 대다수 상황에서도 어떤 문제를 만날 수 없을 것 같다.단, 사용자가 데이터를 입력할 때 폼 필드'username'의 값을 제공하지 않거나, 어떤 경로를 통해 폼을 돌려 직접 입력할 때, 이request.getParameter ("username") 의 값은 비어 있습니다. (빈 문자열이 아니라 빈 대상null임을 주의하십시오.)out 대상의 println 방법은 빈 대상을 직접 조작할 수 없기 때문에 코드 섹션 1이 있는 JSP 페이지에서 "자바.lang.NullPointerException"이상이 발생합니다.객체가 비어 있을 수 있는 경우에도 Java를 호출합니다.lang.Object 또는 Object 대상 자체의 일부 방법, 예를 들어 toString (), equal (Object obj) 등 조작.
코드 세그먼트 2:
String userName = request.getParameter("username");
If (userName.equals("root"))
{....}
분석: 코드 세그먼트 2의 기능은 사용자가 제공한 사용자 이름을 검사하는 것입니다. 사용자 이름이'root'라고 하는 사용자라면 특별한 작업을 수행합니다.설명: 코드 세그먼트 2에서 사용자가 폼 필드'username'의 값을 제공하지 않았을 때, 문자열 대상userName은null값이며, 한null의 대상을 다른 대상과 직접 비교할 수 없습니다. 마찬가지로 코드 세그먼트 2가 있는 JSP 페이지에서 포인터 오류가 발생합니다.
작은 기교: 어떤 방법의 반환값과 상수를 비교하려면 상수를 앞에 두면null 대상의 equals 방법을 사용하지 않을 수 있습니다.예:
If ("root".equals(userName))
{....}
userName 대상이null 대상으로 되돌아와도 빈 바늘이 이상하지 않고 정상적으로 작동할 수 있습니다.코드 세그먼트 3:
String userName = session.getAttribute("session.username").toString();
분석: 코드 세그먼트 3의 기능은session에서session을username의 값을 추출하고 문자열 대상userName에 이 값을 부여합니다.설명: 일반적인 상황에서 사용자가 세션을 진행했다면 아무런 문제가 발생하지 않습니다.그러나 이 때 응용 서버가 다시 시작되고 사용자가 다시 로그인하지 않은 경우 (사용자가 브라우저를 닫았을 수도 있지만 원래 페이지를 열었을 수도 있습니다.)그러면 이 세션의 값이 효력을 상실하고 세션의 세션을 초래합니다.username의 값이 비어 있습니다.null 대상의 toString () 작업을 직접 실행하면 시스템이 빈 바늘을 던지는 데 이상이 발생합니다.
코드 세그먼트 4:
public static void main(String args[]){
Person p=null;
p.setName(" ");
System.out.println(p.getName());
}
분석: Person 객체를 선언하고 객체의 Name 이름을 인쇄합니다.설명: 이때 당신의 p에 빈 바늘 이상이 발생했습니다. 이 Person 유형의 대상이 창설되지 않았기 때문에 그 더미 안에 주소 인용이 없습니다. 대상을 사용하지 않을 때 반드시 창설해야 합니다.
A:대상이 비어 있든 없든 바로 사용하기 시작합니다.
(JSP) 코드 세그먼트 1:
out.println(request.getParameter("username"));
분석: 코드 세그먼트 1의 기능은 매우 간단하다. 바로 사용자가 "username"값을 입력하는 것을 출력하는 것이다.설명: 보아하니 위의 문장은 문법 오류를 찾을 수 없을 뿐만 아니라 대다수 상황에서도 어떤 문제를 만날 수 없을 것 같다.단, 사용자가 데이터를 입력할 때 폼 필드'username'의 값을 제공하지 않거나, 어떤 경로를 통해 폼을 돌려 직접 입력할 때, 이request.getParameter ("username") 의 값은 비어 있습니다. (빈 문자열이 아니라 빈 대상null임을 주의하십시오.)out 대상의 println 방법은 빈 대상을 직접 조작할 수 없기 때문에 코드 섹션 1이 있는 JSP 페이지에서 "자바.lang.NullPointerException"이상이 발생합니다.객체가 비어 있을 수 있는 경우에도 Java를 호출합니다.lang.Object 또는 Object 대상 자체의 일부 방법, 예를 들어 toString (), equal (Object obj) 등 조작.
(JSP) 코드 세그먼트 2:
String userName = request.getParameter("username");
If (userName.equals("root"))
{....}
분석: 코드 세그먼트 2의 기능은 사용자가 제공한 사용자 이름을 검사하는 것입니다. 사용자 이름이'root'라고 하는 사용자라면 특별한 작업을 수행합니다.설명: 코드 세그먼트 2에서 사용자가 폼 필드'username'의 값을 제공하지 않았을 때, 문자열 대상userName은null값이며, 한null의 대상을 다른 대상과 직접 비교할 수 없습니다. 마찬가지로 코드 세그먼트 2가 있는 JSP 페이지에서 (Java.lang.NullPointerException) 빈 바늘을 던지는 오류가 발생합니다.
(JSP) 코드 세그먼트 3:
String userName = session.getAttribute
("session.username").toString();
분석: 코드 세그먼트 3의 기능은session에서session을username의 값을 추출하고 문자열 대상userName에 이 값을 부여합니다.설명: 일반적인 상황에서 사용자가 세션을 진행했다면 아무런 문제가 발생하지 않습니다.그러나 이 때 응용 서버가 다시 시작되고 사용자가 다시 로그인하지 않은 경우 (사용자가 브라우저를 닫았을 수도 있지만 원래 페이지를 열었을 수도 있습니다.)그러면 이 세션의 값이 효력을 상실하고 세션의 세션을 초래합니다.username의 값이 비어 있습니다.null 대상의 toString () 작업을 직접 실행하면 시스템 버퍼 (Java.lang.Null PointerException) 의 빈 바늘이 이상하게 됩니다.
지금까지 여러분께 들려드린 자바 이상 처리의 빈 바늘 이상 모든 내용입니다. 많은 응원 부탁드립니다~
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.