About Question enthuware.ocajp.i.v7.2.1029 :

Help and support on OCA OCP Java Programmer Certification Questions
1Z0-808, 1Z0-809, 1Z0-815, 1Z0-816, 1Z0-817

Moderator: admin

qmwuzapz
Posts: 3
Joined: Sun Jan 29, 2017 1:54 pm
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1029 :

Post by qmwuzapz »

from the exam explanation:
In an array access, the expression to the left of the brackets appears to be fully evaluated before any part of the expression within the brackets is evaluated. Note that if evaluation of the expression to the left of the brackets completes abruptly, no part of the expression within the brackets will appear to have been evaluated.
Is this the case ?

Code: Select all

class X {
    public static int [] apply(){
       if (Y.i==Y.i)throw new NullPointerException();
        return new int[]{10,8,4,6};
    }
}
public class Y {
    public static int i = 0;
    public static void main(String[] args) {
        try {
            System.out.println(X.apply()[i = 3]);
        } finally {
            System.out.println(i);
        }
    }
}

EricLeesburg
Posts: 3
Joined: Sun Feb 26, 2017 12:35 pm
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1029 :

Post by EricLeesburg »

Code: Select all


     class Test  {

         public static int[ ] getArray() {  return null;  } 

         public static void main(String[] args)    {      
         
               int index = 1;     

               try{         
 
                     getArray()[index=2]++;     //1 
                   
                     } catch (Exception e){  }  //empty catch      
  
             System.out.println("index = " + index);   
             }
      }
For the statement 1, my understanding is that it equals the statements below:

Code: Select all

                 
                int temp= getArray()[index=2];
                
                 temp++;
and getArray()[index=2] actually is a element of the array. So by the explanation " In an array access, the expression to the left of the brackets appears to be fully evaluated before any part of the expression within the brackets is evaluated. Note that if evaluation of the expression to the left of the brackets completes abruptly, no part of the expression within the brackets will appear to have been evaluated.", the getArray () should be evaluated first, then the index=2 statement. In this case, getArray() throws a NullPointerException which leaves the index=2 statement unevaluated. So, what's wrong here?
Last edited by admin on Sun Feb 26, 2017 10:19 pm, edited 1 time in total.
Reason: Please enter code inside [code] [/code] tags

admin
Site Admin
Posts: 10064
Joined: Fri Sep 10, 2010 9:26 pm
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1029 :

Post by admin »

qmwuzapz wrote:from the exam explanation:
In an array access, the expression to the left of the brackets appears to be fully evaluated before any part of the expression within the brackets is evaluated. Note that if evaluation of the expression to the left of the brackets completes abruptly, no part of the expression within the brackets will appear to have been evaluated.
Is this the case ?

Code: Select all

class X {
    public static int [] apply(){
       if (Y.i==Y.i)throw new NullPointerException();
        return new int[]{10,8,4,6};
    }
}
public class Y {
    public static int i = 0;
    public static void main(String[] args) {
        try {
            System.out.println(X.apply()[i = 3]);
        } finally {
            System.out.println(i);
        }
    }
}
Yes, i will remain 0. i = 3 will not be executed.
If you like our products and services, please help us by posting your review here.

admin
Site Admin
Posts: 10064
Joined: Fri Sep 10, 2010 9:26 pm
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1029 :

Post by admin »

Your getArray method doesn't throw a NullPointerException. It returns null. So the statement, "if evaluation of the expression to the left of the brackets completes abruptly," doesn't apply here.
If you like our products and services, please help us by posting your review here.

MariaRoxana
Posts: 2
Joined: Sun Dec 09, 2018 10:33 am
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1029 :

Post by MariaRoxana »

Hello,

Can someone please give an example when it applies this rule "if evaluation of the expression to the left of the brackets completes abruptly"? Meaning in which cases the evaluation completes abruptly?

admin
Site Admin
Posts: 10064
Joined: Fri Sep 10, 2010 9:26 pm
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1029 :

Post by admin »

For example, if the expression to the left of the brackets is a method call and that method throws an exception.
If you like our products and services, please help us by posting your review here.

Mikhail Volkov
Posts: 8
Joined: Mon Jul 29, 2019 11:25 am
Contact:

Re: About Question enthuware.ocajp.i.v7.2.1029 :

Post by Mikhail Volkov »

Guys, I think I understand... It's very easy in fact!
Look at two examples:
1) public static int[ ] getArray() { return null; } // [index=2] will work!!! This is case form question.
2) public static int[ ] getArray() { throw new RuntimeException(); } //[index=2] will not work. RTE - it is abnormal finish!

For 1:
If the array reference expression produces null(!!!!!!) instead of a reference to an array, then a NullPointerException is thrown at runtime, but only(!!!) after all parts of the array reference expression have been evaluated and only if these evaluations completed normally.
return null - it is normal finish!

For 2:
Note that if evaluation of the expression to the left of the brackets completes abruptly, no part of the expression within the brackets will appear to have been evaluated.
RunTimeException - it is abnormal finish!

Post Reply

Who is online

Users browsing this forum: No registered users and 99 guests