Java 两个方法彼此调用导致java.lang.StackOverflowError

在我自己的Vector类中有一个构造方法:

	public Vector(float[] vector) {
		this.vector = vector;
		this.length = vector.length;
		this.size = VectorUtil.computeVectorSize(vector);
	}

这个构造方法调用VectorUtil的computeVectorSize(float[] vector)方法来计算向量的长度,computeVectorSize(float[] vector)方法如下:

	public static float computeVectorSize(float[] vector) {
		Vector vector2 = new Vector(vector);
		return computeVectorSize(vector2);
	}

因为之前已经写了一个通过传入的Vector对象计算向量长度的方法,所以这里直接用数组构造了一个Vector对象,然后传给另一个方法来计算向量长度。一切看似合理,但是就这样就导致了循环调用:Vector(float[] vector)方法调用computeVectorSize(float[] vector)方法,computeVectorSize(float[] vector)方法调用Vector(float[] vector)方法,Vector(float[]
vector)又调用computeVectorSize(float[] vector)...。然后导致了java.lang.StackOverflowError异常。

所以,平时写代码,要注意方法的循环调用。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-29 19:12:09

Java 两个方法彼此调用导致java.lang.StackOverflowError的相关文章

Android ListView getView()方法重复调用导致position错位

问题现状:Android ListView getView()方法重复调用导致position错位 解决办法:把ListView布局文件的layout_height属性改为fill_parent或者match_parent. <ListView android:id="@+id/myphoto_listview" android:layout_width="match_parent" android:layout_height="match_pare

JAVA 两种方法实现多线程(继承Thread和实现Runnable接口)

1 package h14; 2 3 public class Demo { 4 5 /** 6 * @param args 7 */ 8 public static void main(String[] args) { 9 // TODO Auto-generated method stub 10 Thread cat = new Cat(); 11 cat.start(); 12 Runnable dog = new Dog(); 13 Thread t = new Thread(dog);

Java操作某方法时报错:java.lang.NoSuchMethodError

Caused by: java.lang.NoSuchMethodError: org.apache.poi.xssf.usermodel.XSSFWorkbook.close()V 一开始以为代码写错了,经过查阅,还有其他人也遇到类似的情况:方法后出现V,M等字母 问题原因: jar包引入版本冲突.在项目的另一个路径下有相同的jar包或者不同版本的jar包,导致JVM读取到了错误的class文件. 解决方案: 删除重复jar包,删除错误版本的jar包 参考链接:http://blog.sina

[ 转载 ] Java基础14--创建线程的两个方法

http://www.cnblogs.com/whgw/archive/2011/10/03/2198506.html Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线程,有两种方法: ◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法: ◆实现Runnalbe接口,重载Runnalbe接口中的run()方法.

Java创建线程的两个方法

Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线程,有两种方法: ◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法: ◆实现Runnalbe接口,重载Runnalbe接口中的run()方法. 为什么Java要提供两种方法来创建线程呢?它们都有哪些区别?相比而言,哪一种方法更好呢? 在Java中,类仅支持单继承,

2.Java基础:方法定义和调用

一.方法的定义 1.类的方法代表的是实力的某种行为(或功能) 方法的定义:方法类型 . 方法签名 . 方法体 2.定义类的方法 访问修饰符 类型 方法名(参数列表){ ///方法体 } 3.把方法当作一个模块,是个"黑匣子",完成某个特定的功能,并返回处理解结果 4.方法分类: (1)返回值为空的void的方法: (2)带具体的返回类型的方法: (3)不带参数的方法: (4)带参数的方法 5.方法返回值 (1)如果方法有返回值,方法中必须使用关键字 return 返回该值,返回的值类型

两个category方法相同调用哪个

Category扩展,它是对一个类进行功能的扩展.在项目的开发过程中,在不断的迭代开发过程中,我们的类也不可避免的要根据需求来增加新的功能,而这个时候很多的人可能会新建一个子类,然后在子类中去增加我们的新功能,这确实能够实现我们的目的,但是久而久之,我们会因为新建的类越来越多,导致项目也越来越庞大,而且也很难管理,这个时候Category就派上用场了,我们可以将一组具有相似的功能的扩展放在一个Category里面,这样就可以进行模块化划分功能. Category的调用 首先我们来了解一下类扩展,

如何在Java平台上使用脚本语言做Java开发

如何在Java平台上使用脚本语言做Java开发     最近开始流行区分Java平台和Java语言,但很多Java开发者还是不能确定如何在 Java应用程序开发中结合脚本.本篇文章,Gregor Roth给出了在Java平台上使用脚本的方法.通过这篇文章,你可以了解怎样在你的Java应用程序中使用脚本,是否你要通过使用Groovy和 Jython把不同的Java应用程序模块粘合在一起,或者写一个你自己的基于JRuby的应用程序,适用于Java平台. 作为一个Java开发者,你可能已经注意到了,J

InvocationHandler中invoke()方法的调用问题

转InvocationHandler中invoke()方法的调用问题 Java中动态代理的实现,关键就是这两个东西:Proxy.InvocationHandler,下面从InvocationHandler接口中的invoke方法入手,简单说明一下Java如何实现动态代理的.         首先,invoke方法的完整形式如下: public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {