В C++ общеизвестной и полезной практикой является использование списка инициализации для задания значений массива. При этом крайне удобно инициализировать при помощи фигурных скобок объекты в которых поля являются открытыми. Это либо структуры(struct) либо классы, у которых все поля открыты(перед ними указан access specifier как public).

Рассмотрим обычную структуру :

struct my_unary_function {
    string name;
    string detect_name;
    double (*handler) (double);
};

Объекты можно создавать и инициализировать на лету(конструктор нам не нужен!) :

my_unary_function sin_func = {"Синус", "sin", sin};

Обратите внимание на синтаксис - во-первых, наличие фигурных скобок. Во-вторых - строгий порядок перечисления значений , соответствующий порядку определения переменных в структуре. У нового объекта - name=”Синус”, detec_name=”sin”, handler=”&sin”.

Теперь, собственно массивы, которые удобно инициализировать также как объекты :

my_unary_function math_functions[] = {
    {"Синус", "sin", sin},
    {"Косинус", "cos", cos},
    {"Тангенс", "tan", tan}
};

Добавив всего-лишь одну строчку расширится функционал программы. Если пишется калькулятор с поддержкой простейших математических вычислений - то все функции можно определять по полю detect_name в этом массиве, а обработчик определяется полем handler.

Java - встроенная инициализация статических массивов из объектов. В Java - немного другая история. Чаще всего используются статические массивы, тип элементов которых объявлен рядом с ними.

Пример такого определения :

public class InnerClassTest {
	static class Employee {
		private String name;
		private double salary;
		public Employee(String n, double s) {
			name = n;
			salary = s;
		}
		public void print() {
			System.out.println(name + " " + salary);
		}
	}
	static Employee[] staff = new Employee[] {
		new Employee("Harry Hacker", 3500),
		new Employee("Carl Cracker", 7500),
		new Employee("Tony Tester", 3800),
		};
	public static void main(String[] args) {
		for (Employee e: staff) {
			e.print();
		}
	}
}

А можно было бы разделить инициализацию и поместить её в специальный static-блок :

public class Main {
  static Integer[] integerArray;
  static {
    integerArray = new Integer[] { new Integer(1), new Integer(2) };
  }
  public static void main(String args[]) {
    for (int i = 0; i < integerArray.length; i++) {
      System.out.println(integerArray[i]);
    }
  }
}

Такой static-блок является функциональным блоком и в нём также можно выполнять любые действия :

    static ArrayList<String> list = new ArrayList<String>();
    static {
	    list.add("Bart");
	    list.add("Lisa");
	    list.add("Marge");
	    list.add("Barney");
	    list.add("Homer");
	    list.add("Maggie");
	    System.out.print("Hello!");
    }

На самом деле для инициализации ArrayList можно использовать метод java.util.Arrays.asList :

public static final List<String> favorites =
        Arrays.asList("EJB", "JPA", "Glassfish", "NetBeans");