开发者

Getting StackOverFlowError in Java

This is program I am writing. I am getting a StackOverFlowError exception when I run it:

public class maininherit {

   maininherit h = new maininherit() {

        @Override
        public void mai() {
            System.out.print("inner");
        }
    };

    public static void main(String[] args){
       maininherit t=new maininherit();
       t.mai();
    }

    public void mai(){
       System.out.print("hellllll");
       h.mai();
    }
  }

Here I am getting StackOverflowErrors only when I am using maininherit class as a reference in the inner class. If I am using other cla开发者_StackOverflow社区sses I am not getting that error. Can anyone clarify this to me?

Sorry i am thank full for your answers but i had a doubt i don't know whether reasonable or not only repetition of initializations can be possible only when i created instance in constructor of that same class know.then how it is possible to have multiple initializations?


Implementation of your inner class is just override part of maininherit class. So... You init class maininherit then variable h were initialized. New operator were called and then... inner class init maininherit again and need to set h variable.

Your code is infinitive loop of initializations h variable.


This line:

maininherit t=new maininherit();

Creates a new maininherit object (I'll call it m0), which has a field of the same type (I'll call that m1)

When m0 is created, m1 is initialized. m1 also has a field, so m2 is initialized. m2 also has a field so m3 is initialized etc.

This would go on forever if the StackOverflowError didn't oocur


The issue here is not with your main and mai functions, but with your initialization of the maininherit h member variable. The problem is that each instance of maininherit is creating a maininherit object (which in turn, creates a maininherit object, etc.). Marking that as a static member will cause a single copy to be shared by all instances, which will solve this issue.


Stackoverflow error will occur whenever you try to create instance of same class as a member variable. So h instance is created infinite times and hence stackoverflow error came.

For e.g. the code you gave, even without inner class it will throw stackoverflow error

public class maininherit {

maininherit h=new maininherit();


public static void main(String[] args){
   maininherit t=new maininherit();
   t.mai();
 }

public void mai(){
    System.out.print("hellllll");
    h.mai();
}}

Avoid creating object of the class itself as a member or field

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜