Ma ti rendi conto che hai creato un codice che neppure io riesco a capire???

Quando inizializzi class1 chiami il costruttore di default, giusto?
Il costruttore di default cosa fa? Crea un nuovo oggetto class2.
Per creare un oggetto class2 viene invocato il corrispondente costruttore di default, che a sua volta crea un nuovo oggetto class1. class1 crea un class2, class2 crea un class1...

Come diavolo ti è riuscito di creare un casino di questo tipo non riesco a spiegarmelo... volevi solo che date 2 classi A e B (iniziale maiuscola, sempre per le classi!!!) la classe A potesse accedere a un metodo di B?

Prova a vedere questo:
Codice PHP:
public class Class1
{
       private 
Class2 cl2;// riferimento a una istanza di Class2

       
public Class1(Class2 cl2)
       {
              
this.cl2 cl2;
       }

       public 
void metodo1()
        {
               
// Puoi accedere a metodo2, ma se ci provi vai in loop
                
System.out.print("ciao");
        }
}


public class 
Class2
{
    private 
Class1 cl1;
    
    public 
Class2()
    {
            
cl1 = new class1(this);  // Passa un riferimento a se stessa
       
}

     public 
void metodo2()
    {
            
System.out.print("ciao");
            
cl1.metodo1();
    }
    
    public static 
void main (String [] arg)
    {
        
Class2 cl2 = new Class2 ();
        
cl2.metodo2();    
    }