「java没指针」java没有指针为什么会有空指针异常

博主:adminadmin 2022-12-04 18:54:07 64

今天给各位分享java没指针的知识,其中也会对java没有指针为什么会有空指针异常进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java中有没有指针

首先,指针用于指向某一块内存的地址,在C、C++中有明确的指针的概念,而在Java中,同样会有指向某一块内存地址的存在,但是不叫指针,在Java中称之为 引用(reference),你可以理解为智能指针。可以这么说Java其实处处皆为指针,但是我们开发人员却感觉不到而已。

java中到底有没有指针

学过c/c++,然后学Java的人往往心中有此纠结,java中到底有没有指针?

如果一定要在是或否里选择一个,OK,java中没有指针。

那么,java中的引用(reference)和c/c++中的指针(如无特别说明,后文指针均指c/c++中的指针)究竟有着什么样纠葛不清的关系呢?

在开始之前先说一下c/c++的引用,它跟java的引用完全不是一个东西,c/c++的引用是同一块内存的不同名字。而java的引用是指向一个对象,引用本身也占用了内存。

首先,列举一下能对指针进行的一些常见操作:

1、指向一个对象,如 Person *p = new Person….;int *iv = new int….

2、对指针所指的对象进行操作:P-getAge(); (*p).getAge();

3、获取存储在指针中的地址值。

4、将指针指向另外一个对象:Person *p1 = new Person…; p = p1; 但,不可以*p = p1这样来赋值。

5、删除new的空间,delete p1;

6、其它诸多操作

这么多已经足够了,接下来看看java引用能做什么操作。

a、指向一个对象,如Person p = new Person…

b、调用对象的方法,p.getAge();

c、指向另外一个对象,Person p1 = new Person…; p = p1;

OK,就这么多了。

对于a和1,他们的功能是类似的,但java引用无法指向一个基本变量。。

对于b,java引用和指针就不同了,在这点上,Java reference更像是解引用(dereference)了的指针;或者说java中的.操作符某种程度上等价于指针的-操作符,如果是这样种解释的话,我们无法再对java的reference解引用了。

对c和4,是类同的。

除此,我们无法获取java引用存的地址,我们不能delete,还有很多……

综上,窃以为java的引用可以看成是一个功能受限的指针(或者说被阉割的指针)。另一方面,功能如此受限,它还能叫指针吗?了解了指针和java引用的区别与联系,还需要纠结“java中有没有指针”这个问题吗!

Java语言没有指针,怎样实现链表?

Java语言中的对象引用实际上是一个指针(这里的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点。

private static class EntryE {

E element;  // 当前存储元素

EntryE next;  // 下一个元素节点

EntryE previous;  // 上一个元素节点

Entry(E element, EntryE next, EntryE previous) {

this.element = element;

this.next = next;

this.previous = previous;

}

}

将数据域定义成Object类是因为Object类是广义超类,任何类对象都可以给其赋值,增加了代码的通用性。为了使链表可以被访问还需要定义一个表头,表头必须包含指向第一个结点的指针和指向当前结点的指针。为了便于在链表尾部增加结点,还可以增加一指向链表尾部的指针,另外还可以用一个域来表示链表的大小,当调用者想得到链表的大小时,不必遍历整个链表。

链表的数据结构我们可以用类List来实现链表结构,用变量Head、Tail、Length、Pointer来实现表头。

存储当前结点的指针时有一定的技巧,Pointer并非存储指向当前结点的指针,而是存储指向它的前趋结点的指针,当其值为null时表示当前结点是第一个结点,因为当删除当前结点后仍需保证剩下的结点构成链表,如果Pointer指向当前结点,则会给操作带来很大困难。如何得到当前结点呢?我们定义了一个方法cursor(),返回值是指向当前结点的指针。类List还定义了一些方法来实现对链表的基本操作,通过运用这些基本操作我们可以对链表进行各种操作。

例如reset()方法使第一个结点成为当前结点。insert(Object d)方法在当前结点前插入一个结点,并使其成为当前结点。remove()方法删除当前结点同时返回其内容,并使其后继结点成为当前结点,如果删除的是最后一个结点,则第一个结点变为当前结点。

java里到底有没有指针?

JAVA没有指针,只有C或C++里有,指针主要是操作内存时用的了,只在低级语言中使用 追问: 可是为什么有的书里却写着。其实java里都是指针呢? 回答: 我理解的是,有些书这么说是为了给那些学过C或C++的人看的 java 都是以类的实例来操作,就是说可以把每一个实例看到一个指针,这样是方便那法比较了解C指针的人来看。

记得采纳啊

为什么Java中没有指针

JAVA里面是没有指针的,这样更安全,因为指针初始化之类的操作 很容易产生内存溢出,而JAVA放弃指针这方面安全性有很大提高,不过效率稍有降低的,毕竟指针是无可取代的。引用和指针是有差别的,引用是通过别名进行地址的调用,而指针可以直接对该内存空间执行操作,不过很多时候两者可以混用

java没指针的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java没有指针为什么会有空指针异常、java没指针的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-04,除非注明,否则均为首码项目网原创文章,转载请注明出处。