java.lang.NullPointerException

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java.lang.NullPointerException相关的知识,希望对你有一定的参考价值。

  在java中经常会看到有关空指针异常的错误,并且难以找出这样的错误,索性就总结一下。

    · 产生空指针异常的原因:

         1、字符串变量没有初始化。String str。你对字符串操作就会产生空指针异常。

         2、if(a.equals(null))或者if(a.equals("")),都有可能产生空指针异常。

         3、java类没有实例化。这里的p->null,所以产生了空指针异常。

class person{
    private String name;
    public person(String name){
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}
public class TestNullPointer {
    public static void main(String[] args) {
        person per = null;
        System.out.println(per.getName());
    }

}


这里插入一个关于链表的NullPointerException。希望能给自己一些警示,能搞更加严谨。

interface IMyLinkList{
    
    public void clear();//清空
    public int size();
    public boolean isEmpty();
    public boolean add(int value);
    public void add(int index,int value);
    public int get(int index);
    public int set(int index,int value);
    public int remove(int index);
}

class MyLinkList implements IMyLinkList{
    
    private int TheSize;
    @SuppressWarnings("unused")
    private int modCount=0;
    private Node Begin;
    private Node End;
    
    public MyLinkList(){
        DoClear();
    }
    
                                private static class Node{
                                    public int data;
                                    public Node prveious;
                                    public Node next;
                                    public Node(int data, Node prveious, Node next) {
                                        super();
                                        this.data = data;
                                        this.prveious = prveious;
                                        this.next = next;
                                    }
                                }
    
    private void DoClear(){
        Begin = new Node(0, null, null);
        End = new Node(0, Begin, null);
        
        Begin.next=End;
        
        TheSize=0;
        modCount++;
    }

    @Override
    public void clear() {
        DoClear();
    }

    @Override
    public int size() {
        return TheSize;
    }

    @Override
    public boolean isEmpty() {
        return size()==0;
    }

    @Override
    public boolean add(int value) {
        add(size(),value);//###############这里有问题
        return true;
    }

    @Override
    public void add(int index, int value) {
        addBefore(getNode(index,0,size()),value);//得到index这个节点。在前边插入一个节点
    }

    @Override
    public int get(int index) {//得到这个节点的data数据
        return getNode(index).data;
    }

    @Override
    public int set(int index, int value) {//设置index节点处的打他数据
        Node p = getNode(index);
        int oldData = p.data;
        p.data = value;
        return oldData;
    }

    @Override
    public int remove(int index) {
        return remove(getNode(index));
    }
    
    
    
    //初始化的时候出现了问题、

    
    private void addBefore(Node p,int value){//添加一个新节点,只要new一个节点,并且改变节点的前驱和后继
        Node newNode = new Node(value,p.prveious,p);
    
        newNode.prveious.next=newNode;
        p.prveious=newNode;
        
        TheSize++;
        modCount++;
    }
    
    private Node getNode(int index){//得到
        
        return getNode(index,0,size()-1);
    }
    
        //getNode(index,0,size())
        private Node getNode(int index,int lower,int upper){
            Node p = null;
//抛出异常
            if(index<lower||index>upper){
                throw new IndexOutOfBoundsException();
            }
            //找到
            if(index<size()/2){
                p=Begin.next;
                for(int i=0;i<size()/2;i++){
                    p=p.next;
                }
            }else{
              // 但是这么却没有对p进行赋值。产生了空指针异常//p=End.previous 
for(int i=size();i>index;i--){ p=p.prveious; } } return p; 然后如果判断范围在else中,就GG } private int remove(Node p){ p.next.prveious=p.prveious; p.prveious.next=p.next; TheSize--; modCount++; return p.data; } } public class MyfirstLinkedList { public static void main(String[] args) { IMyLinkList MyLinkedList = new MyLinkList(); System.out.println(MyLinkedList.add(12)); System.out.println(MyLinkedList.size()); } }

 

 

 



以上是关于java.lang.NullPointerException的主要内容,如果未能解决你的问题,请参考以下文章

亲測,Eclipse报&quot;An error has occurred,See error log for more details. java.lang.NullPointerExce

来自 LayerDrawable 的异常

Microsoft Access 和 Java JDBC-ODBC 错误

如何使用其id获取单个SQLite行数据?