主要介绍了 java.lang.NullPointerException 出现的几种原因及解决方案 , 本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...java.lang.NullPointerException 出现的几种原因: 1、字符串变量未初始化 2、接口类型的对象没有用具体的类初始化 比如: Map map // 会报错...} 5、优先使用String.valueOf()方法代替toString() 当程序代码需要对象的字符串表示形式时,请避免使用该对象的 toString 方法。...如果你的对象的引用等于 null , NullPointerException 则会抛出,使用静态 String.valueOf 方法,该方法不会抛出任 何异常并打印 "null" 6、class...被声明了类型,默认 class = null 这样在调用 class 中方法的时候系统只能给你个空指针异常, 给其实例化就好了: class = new Class(); 7、返回null,方法的返回值不要定义成为一般的类型
java.lang.NullPointerException出现的几种原因: 1、字符串变量未初始化 2、接口类型的对象没有用具体的类初始化,比如: Map map // 会报错 Map map...} 5、优先使用String.valueOf()方法代替toString() 当程序代码需要对象的字符串表示形式时,请避免使用该对象的toString方法。...如果你的对象的引用等于null,NullPointerException则会抛出,使用静态String.valueOf方法,该方法不会抛出任何异常并打印”null” 6、class被声明了类型, 默认...class = null; 这样在调用class中方法的时候系统只能给你个空指针异常, 给其实例化就好了:class = new Class(); 7、返回null,方法的返回值不要定义成为一般的类型...(s)就可以避免这个问题,不过对变量先进行判空后再进行操作更好,尽量避免返回null,方法的返回值不要定义成为一般的类型,用数组。
System.out.println("----------分割线----------"); all.forEach(System.out::println); //方法引用部分的引用构造方法...,则会报错:java.lang.NullPointerException Map map = Map.of("one",1,"two",null);...} 在使用put方法进行数据保存的时候会调用putVal方法,同时会将key进行哈希处理(生成hash码) 而putVal()方法为了方便数据保存会将数据封装为一个Node节点类对象,而在使用putVal...()方法的操作过程会调用reasize()方法进行扩容; 3)容量扩充 当保存的数据超过既定的存储容量则会进行扩容,原则如下: 常量地址:DEFAULT_INITIAL_CAPACITY;作为初始化的容量配置...Map.Entry接口封装的二元偶对象,所以就必须采用Map集合的迭代输出; 使得Map接口中的entrySet(),将Map集合变为Set集合; 取得Set接口实例后就可以利用iterator方法取得
声明引用变量(即对象)时,实际上是创建了一个指向对象的指针。请看以下代码: int x; x = 10; 第一行代码声明了一个名为 x 的变量(int 类型),Java 会把它初始化为 0。...但是呢,当我们尝试声明一个引用类型时,情况将会有所不同。...而是假设它在 doSomething() 方法被调用之前就创建了。...我们这样调用 doSomething() 方法: doSomething(null); 这就意味着 doSomething() 方法的参数 obj 为 null。...简单来说,堆栈信息是应用程序在引发 Exception 时调用的方法列表,可以准确地定位到错误发生的根源。就像下面这样。
EnumConstantNotPresentException 尝试使用未定义的枚举值。 IllegalArgumentException 用于调用方法的非法参数。...CloneNotSupportedException 尝试克隆不实现Cloneable接口的对象。 IllegalAccessException 对类的访问被拒绝。...InstantiationException 尝试创建抽象类或接口的对象。 InterruptedException 一个线程已被另一个线程中断。...当没有实现Cloneable接口或者不支持克隆方法时,调用其clone()方法则抛出该异常。 java.lang.EnumConstantNotPresentException 枚举常量不存在异常。...当应用试图在要求使用对象的地方使用了null时,抛出该异常。譬如:调用null对象的实例方法、访问null对象的属性、计算null对象的长度、使用throw语句抛出null等等。
2.引用类型(类、接口、数组) 当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址, 对象是放在堆中的,栈中存放的是对象的引用(地址)。...由此可见'=='在比较的对象是引用类型时,是对栈中的地址值进行比较的。...如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。...如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法 不要求 一定生成不同的整数结果。...(例如,String类对equals方法的重写就是逐个比较字符) 不重写的情况下,对象的equals方法 调用的是Object类中equals方法,在条件左边为Null时会报空指针,使用Objects.equals
Java集合-Iterator Java Iterator接口表示一个对象,该对象能够遍历Java对象的集合,一次迭代一个对象。...Iterator 接口是Java中用于迭代对象集合的最古老的机制之一(尽管不是最早的-Enumerator 早于Iterator )。...Iterator核心方法 Iterator接口非常简单,下面是核心方法: 方法 说明 hasNext() 如果Iterator还有元素则返回true,否则返回false next() 返回Iterator...标准的java集合接口Collection 包含一个iterator()方法,调用iterator()方法可以从Collection中获取一个迭代器。...迭代时移除元素 Java迭代器接口有一个remove()方法,可以从底层集合中移除next()刚刚返回的元素,调用remove()方法不会抛ConcurrentModificationException
() || instanceof Collection && ((Collection) o).isEmpty(); } 现在您可以在使用 instanceof 检查时直接将值赋给变量,并对其执行进一步调用...在 Java 中,编译器和运行时环境都不支持处理零引用。 这些恼人的异常可以通过各种变通方法来避免。 最简单的方法是将检查设置为零。 不幸的是,这个过程非常繁琐,当我们需要它的时候我们往往会忘记它。...使用自 JDK 8以来包含的包装器类 Optional,您可以通过 API 显式地告诉调用者,一个值可以为零,并且它必须对此进行响应。 因此,您不能再意外地遇到空引用,而必须显式地处理可能为空的值。...: Cannot invoke "Person.name()" because "" is null 不幸的是,当一个空参数时,目前没有方法引用的指示: Stream.of( man...但是,如本例所示,如果将每个流方法调用放在新行中,那么麻烦的代码行可以很快地缩小范围。
isBlank() || instanceof Collection && ((Collection) o).isEmpty(); } 现在您可以在使用 instanceof 检查时直接将值赋给变量,并对其执行进一步调用...在 Java 中,编译器和运行时环境都不支持处理零引用。这些恼人的异常可以通过各种变通方法来避免。最简单的方法是将检查设置为零。不幸的是,这个过程非常繁琐,当我们需要它的时候我们往往会忘记它。...如果调用链中的一个值为零,那么您将收到一条有用的消息: man.partner().name() Result: java.lang.NullPointerException: Cannot invoke...: Cannot invoke "Person.name()" because "" is null 不幸的是,当一个空参数时,目前没有方法引用的指示: Stream.of( man...但是,如本例所示,如果将每个流方法调用放在新行中,那么麻烦的代码行可以很快地缩小范围。
如果一个对象包含另一个对象的引用,称这个对象为组合对象。如果当前组合对象作为一个整体的话,那么它所包含的对象就是该整体的一部分,如果一个对象不含有其它对象的引用,称这个对象为个体对象。...组合模式结构中的三种角色: ①抽象组件(Component):抽象组件是一个接口(抽象类),该接口(抽象类)定义了个体对象和组合对象,需要实现的关于操作其子节点的方法,比如add()、remove()...抽象组件也可以定义个体对象和组合对象,用于操作其自身的方法,比如isLeaf()方法等。...③Leaf节点(Leaf Node):实现component接口类的实例,Leaf节点实现component接口,不可以含有其它composite节点或Leaf节点的引用,因此,叶节点在实现component...接口有关操作子节点的方法时,比如add()、remove()和getChild()方法,可让方法抛出一个异常,也可以实现为空操作 组合模式的UML类图: ?
Collection 接口:单例数据,定义了存取一组对象的方法的集合。List : 元素有序,可重复的集合。Set :元素无序,不可重复的集合。...Map 接口:双列数据,保存具有映射关系”key-value对“ 的集合。Map 中的 key 和 value 都可以是任何引用类型的数据。...所在类的 hashCode() 方法,来得到该 key1对象的 hashCode(哈希) 值。...返回的值是Hashtable调用put的结果。简单的说:就是向Property 集合中添加键值对元素。...Collections 中提供了一系列静态的方法(工具方法麻,一般都是静态方法)对集合元素进行排序,查询和修改等操作,还提供了对集合对象设置不可变,对集合对象实现同步控制(解决线程安全问题)等方法。
} } return new MyIterator(); } MyArrayList仿造类的全部源码 import java.util.Arrays; import java.util.Iterator...*/ private int size; /** * 默认构造 */ public MyArrayList() { /** * 调用了有参构造...* 并且null值使用equals方法时会报java.lang.NullPointerException异常。...* 判断时会引发java.lang.NullPointerException异常。...arrayIndexOutOfBoundsException(index); return this.getElement(index); } /** * 有两处调用该方法
当接口返回的userId为null时,强转这块就抛出空指针异常: Exception in thread "main" java.lang.NullPointerException at com.choupangxia.box.BoxTest.main...原因分析 最初大家可能会疑惑,抛出异常的代码都没有对象的方法调用,怎么会出现空指针呢? 这中间主要涉及到的就是一个自动拆箱操作。是否是拆箱导致的呢?我们来通过字节码看一下。...相当于: long primitive = value.longValue(); test(promitive); 对照最开始的代码,如果value为null的话,那么在调用longValue方法时便会抛出...装箱时通常会调用包装类的valueOf方法,而拆箱时通常会调用包装类的xxxValue()方法,其中xxx为类似boolean/long/int等。...在Java中null是一个特殊的值,可以赋值给任何引用类型,也可以转化为任何引用类型。
迭代器模式: 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部表现。...由于Java内置对迭代器的支持,我们利用javautil.Iterator包来实现。...public interface Menu{ public Iterator createIterator(); } 从煎饼屋开始,由于ArrayList默认有iterator()方法,所以直接调用就行...-1] = null; } } } 然后现在如果有一个方法需要对这两个对象进行遍历,它完全可以使用一种方法遍历,而不用考虑其内在数据结构的区别。...迭代器将遍历聚合的工作封装进一个对象中。 迭代器提供了一个通用接口,让我们遍历聚合项,当我们编码使用聚合的项时,就可以使用多态机制。
类是对某一类事物的抽象描述,而对象用于表示现实中该类事物的个体。...: 类名 对象名称 = new 类名(); 空对象 一个引用变量没有通过new分配内存空间,这个对象就是空对象,Java使用关键字null表示空对象。...当调用一个空对象的实例变量或实例方法时,会抛出空指针异常NullPointException String str = null; System.out.println(str.length...当一个对象被创建后,对象保存在堆内存中,Java程序不允许直接访问堆内存的对象,不管是数组还是对象,当程序访问引用变量的成员值或者方法时,实际上是访问引用变量的所指向的数组或者对象的成员变量或者方法。...关键字this this指向对用调用该方法的对象,主要作用让类中的方法可以访问类中的另一个方法或者实例变量 对象的打印和比较 (1)toString()方法 (2)对象的比较操作 ==对于基本数据类型比较的是双方的值
一、Java.util.Iterator Java.util.Iterator 接口描述的是以统一的方式对各种集合元素进行遍历 / 迭代的工具,也称“迭代器”。...GOF 给出的定义为:提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。...Objects.requireNonNull(action); while (hasNext()) action.accept(next()); } } iterator通过hasNext(),next()两个方法定义了对集合迭代访问的方法...,而具体的实现方式依赖于不同的实现类,具体的集合类实现Iterator接口中的方法以实现迭代。...当调用next时候,迭代器就越过下一个元素,并返回刚刚越过的那个元素的引用。
接口,完成容器元素的遍历; 抽象聚集(Aggregate)角色:该角色提供创建迭代器角色的接口; 具体聚集(Concrete Aggregate)角色:该角色实现抽象聚集接口,创建出容纳迭代器的对象。...; 迭代器模式封装了遍历算法,使算法独立于聚集角色,调用者无须知道聚集对象的类型,即使聚集对象的类型发生变化,也不会影响遍历过程。...、Stack、HashSet 等集合类都实现了 iterator() 方法,返回一个迭代器 Iterator,用于对集合中的元素进行遍历。...,获得统一的迭代器对象 java.util.Iterator,然后进行循环遍历。...7、总结 迭代器模式是最常用的设计模式之一,已经被广泛应用到 Java 的 API 中,比如在 Java 的集合中,使用 iterator() 方法就可以获得统一的迭代器对象 java.util.Iterator
领取专属 10元无门槛券
手把手带您无忧上云