import java.lang.Exception;

class UserDefinedException extends Exception 
{
	UserDefinedException() { super(); }
	UserDefinedException(String s) { super(s); }
}
class TestException 
{
	public static void main(String[] args) 
	{
		String s[] = { "divide", "null", "array", "user" };
		for (int i = 0; i < s.length; i++) 
		{
			try 
			{
				exceptionGenerator(s[i]);
				System.out.println("TestException \"" + s[i] + "\" nie zgłosił wyjątku");
			} 
			catch (Exception e) 
			{
				System.out.println("TestException \"" + s[i] + "\" zgłosił wyjątek " + e.getClass());
				System.out.println("        informujący o: " + e.getMessage());
			}
		}
	}
	static int exceptionGenerator(String s) throws UserDefinedException 
	{
		try 
		{
			if (s.equals("divide")) 
			{
				int i = 0;
				return i/i;
			}
			if (s.equals("null")) 
			{
				s = null;
				return s.length();
			}
			if (s.equals("array")) 
			{
				int [] ia = {1, 2 ,3 ,4};
				return ia[ia.length];
			}
			if (s.equals("user"))
				throw new UserDefinedException("UserDefinedException zgłoszony przez exceptionGenerator");
			return 0;
		} 
		finally 
		{
			System.out.println("[exceptionGenerator(\"" + s + "\") zakończył pracę]");
		}
	}
}