zoukankan      html  css  js  c++  java
  • 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实现 计蒜客 拯救行动
    Java实现 计蒜客 拯救行动
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 174 地下城游戏
    Java实现 LeetCode 173 二叉搜索树迭代器
    Java实现 LeetCode 173 二叉搜索树迭代器
    Visual Studio的SDK配置
    怎样使用CMenu类
    mfc menu用法一
  • 原文地址:https://www.cnblogs.com/chenshun-2016/p/5986653.html
Copyright © 2011-2022 走看看