Applet game method invocation order

Hi there
I am new here as well as game dev. After three years of programming i have finally zeroed in on what i want to do i.e. develop games.
Enough of the introduction, I need your help to figure out the order of execution of an applet program.I am developing my first GUI based game using Applet(I am following a tutorial). So here it is


public class StartingPoint extends Applet implements Runnable {

	
	private Image i;
	private Graphics double_G;
	Ball b;
	
	public void run() 
	{	
		while(true)
		{
						
			repaint();
			
			try
			{
				Thread.sleep(17);
			}
			catch(InterruptedException ie)
			{
				ie.printStackTrace();
			}
		}
	}
	
	public void init()
	{
		setSize(800,600);
	}
	
	public void start()
	{
		b= new Ball();
		Thread t=new Thread(this);
		t.start();
	}
	
	public void update(Graphics g)
	{
		b.update(this);
		if(i==null)
		{
			i=createImage(this.getWidth(),this.getHeight());
			double_G=i.getGraphics();
		}
		double_G.setColor(getBackground());
		double_G.fillRect(0, 0, this.getWidth(), this.getHeight());
		paint(double_G);
		g.drawImage(i, 0, 0, this);
	}
	
	public void paint(Graphics g)
	{
		b.paint(g);
	}
	
	public void stop()
	{}
	
	public void destroy()
	{}

}

public class Ball 
{
	private int x=0,y=0;
	private double dx=20,dy=0;
	private int radius=30;
	private double gravity=15,energyloss=0.65,dt=0.2,xFriction=0.9;
	
	public void update(StartingPoint sp)
	{
		if(x+dx>sp.getWidth()-radius-1)
		{
			x=sp.getWidth()-radius-1;
			dx=-dx; 
		}
		
		else if(x+dx<0)
		{
			x=0;
			dx=-dx;
		}
		
		else
		{
			x+=dx;
		}
		
		if(y==sp.getHeight()-radius-1)
		{
			dx*=xFriction;
			if(Math.abs(dx)<0.8)
				dx=0;
		}
		
		//ball hits the ground
		if(y>sp.getHeight()-radius-1)
		{
			y=sp.getHeight()-radius-1;
			dy*=energyloss;
			dy=-dy;
		}
		
		else
		{
			//change in displacement
			dy+=gravity*dt;
			//new position of the ball
			y+=dy*dt+0.5*gravity*dt*dt;
		}

	}
	
	public void paint(Graphics g)
	{
		g.setColor(Color.BLUE);
		g.fillOval(x, y, radius, radius);
	}
}

i am a little confused about the order of execution of the above code.
Here is what i think it should be
init()
start()
run()–>repaint()(which actually calls paint() and paint() calls update())
Am I correct?
If I am correct and the update() gets called before the paint(), when the applet runs the first how does it obtain the graphics context/Canvas to print upon?
Also, initially I assign x and y, the value 0, because i want it start at 0,0 but since the update method is called before paint the x and y values get updated before the first paint().
I think the source code I have posted is really long.I am sorry for that.It would be really kind if someone would help me.
Thanks in advance