In the both examples, the call to System.out.println() calls the specified object's toString() method. In the first case, you've overriddent the toString() method to print "J A V A", so that's what you get. In the second case, you're printing an Array object; the "funky" characters you see are the default string representation of an Array.
System.out.print() and System.out.println() always print Strings no matter what the argument passed to them.
If the argument passed to them is not a String, they attempt to convert it to a String. And to convert an object to its String representation, the object's toString() method is always called. So if you wish to change what is printed with the print methods, just over-ride the toString() method.
The javadoc for PrintStream documents this. Actually it sas that print(Object) uses String.valueOf(Object). The javadoc for String.valueOf(Object) says that it uses Object.toString(). See here and here.
OK, now will you answer a question for me? What does "funda" mean? I gather it means something like "fact," but it seems to be unique to Indian English.