标签:pointer exce doc static list warnings str ## begin
在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
标签:pointer exce doc static list warnings str ## begin
原文地址:http://www.cnblogs.com/chenshun-2016/p/5986653.html