You can assign something of type A to a variable of type B if A is a subtype of B. Broadly speaking, for non-primitive types, this means that A must support all the operations that B does.
Looking at your examples:
First:
List<Object> objectList = new ArrayList<Integer>();//compile time error
Right, because an ArrayList<Integer> is not a List<Object>; you cannot add an Object to it. Consider:
List<Object> l = new ArrayList<Object>();
List<Integer> l2 = new ArrayList<Integer>();
l.add(new Object()); // ok
l2.add(new Object()); // not ok; `List<Integer>` doesn't support this.
So you see a List<Integer> (or an ArrayList<Integer>) is not a subtype of List<Object> - because it doesn't support all the same operations.
Next:
Object object = new Integer(9);
object = 1.2;// no run time error
In this case, the value 1.2 is auto-boxed into the wrapper type Double (full name java.lang.Double). As this is a subclass of Object the assignment then works fine. What is stored in the variable object is not the primitive double value 1.2, but rather a reference to a Double object which wraps the primitive value.
Finally:
Object objectArr[] = new Integer[1];
objectArr[0] = 1.2;// run time error (Exception in thread "main" java.lang.ArrayStoreException: java.lang.Double)
This is the oddball case. Java considers an array of Integer to be a subtype of an array of Object, though by normal type theory this wouldn't be the case, since you can't store an Object (that isn't also an Integer) into such an array. On the other hand, an array of Integer does at least support all the other operations that an array of Object does - you can retrieve elements and be sure they are a subtype of Object; you can check the array length; etc. So, you can assign new Integer[1] - an Integer array - to a variable of type Object[].
To make this form of sub-typing work, the Integer array needs to implement a "store Object element" operation similar to what Object[] implicitly supports. Since an Integer[] is only supposed to contain Integer objects, however, the store operation must fail - so you get an exception at runtime if you try to store something that isn't an Integer. In your example you're storing 1.2 which is auto-boxed to a Double, not an Integer.