I was curious of when to use System.exit(0); and its necessity
Using System.exit() is usually done to cover up problems where you program isn't running (or ending) correctly. It's not a great solution, but in real life time is money so sometimes you've got to pick a crummy solution which "works" because the "ideal" solution would take too long to implement properly. There are rare cases where it does make sense that near-immediate program termination is required. Personally I find many of these cases to also be somewhat dubious and a different solution usually can be found. Just avoid it whenever possible, and only use it if you can't find another solution.
I'm assuming you are talking about variable names in formal parameters of my methods rather than the actual parameter variable names?
Kind of, of course formal parameters should make sense in the context of the method. Actual parameters are a bit trickier because they don't have a name per-say (they're a value, not a variable). However, all names should make sense, whether they are class names, paremeters/variables, methods, etc. The idea is can you give your code to someone else (even if that's you in two years) and have them understand what that code is suppose to do without having to stare at it.
String x = "hello"; // probably a bad name
System.out.println(x); // passing x as an actual parameter, there's nothing wrong with the actual parameter because it doesn't have a name
// However, x is still a bad variable name as noted above.
String greeting = "hello"; // a good variable name
System.out.println(greeting + " is " + x); // same logic as above, the actual parameter has no name (it's a temporary), greeting is a well named variable and x is not.
public static void doit(String x) // bad formal parameter x, and bad method name doit, too.
public static double distance(double x1, double y1, double x2, double y2) // here x's/y's makes sense, so this is likely fine.
public class A // bad class name
{}
public class Point // good class name
{}