/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

public class Main {
    static class ArrayObj {
        int[] array;

        int getArrayElement(int i) throws NullPointerException {
            return array[i];
        }
    }

    public static void main(String[] args) {
        ArrayObj arrayObj2 = new ArrayObj();
        int sum = 0;
        int exception = 0;

        for (int i = 0; i < 1024; i++) {
            try {
                // A hot method invocation that always encounters exceptions
                sum += arrayObj2.getArrayElement(i);
            } catch (NullPointerException npe) {
                exception++;
            }
        }
        System.out.println("sum = " + sum);
        System.out.println("exception = " + exception);
    }
}
