The OCA Java SE8 Programmer I Certification is the first essential certificate to have before taking the OCP Exam. One is expected to sit for OCA first before taking the OCP. As a beginner questions can be tricky. You are coming from the world of Javascript and do not know anything about Java. This post has you covered.
Here we want to discuss some of the tricky questions that can be asked in the OCA exam with the intention to help those who want to sit for the exam. Don't forget to share some of the questions you consider tricky in the comments. Let's help one another.
Here is the one I always see in most past braindumps.
Question type 1 Includes simple code but tricky or confusing answer options.
Here is the code example:
class JavaCertQType1 {
public static void main(String... cmd) {
main("private", cmd);
}
private static void main(String type, String[] args) {
System.out.println(args[0] + args[1]);
}
}
QSN -> What is the output when the class JavaCertQType1
is executed using the following command (choose 1 option):
java JavaCertQType1 1 11 EJava Guru
1
1 11
111
12
1 11 EJava Guru
compilation Error
Runtime Exception
How many of you got the answer right before checking the answer?
If you check correctly, you can see that the main method is overloaded and it is totally fine in Java. Main methods in Java can be private, but they won't serve as the entry point for the program execution when you try to run the class directly with the Java ClassName command.
Yes you are used to seeing this
public static void main(String[] args)
but this
private static void main(String[] args)
is also allowed.
Now let's get to the answer
111
Here is the explanation
I see four command-line arguments 1
11
EJava
Guru
. These arguments are passed to the main(String... cmd)
method as an array cmd
, which will contain {"1", "11", "EJava", "Guru"}
. The overloaded main method executes the print
method. We read arguments from index 0
, so the args[0]
is "1"
, and args[1]
is "11"
.
You might wonder why we didn't choose 1 11
as the answer. The reason is that in Java, command-line
arguments passed during program execution are always treated as strings.
These are strings, so the + operator performs string concatenation
"1" + "11"
and the answer is
111
.
What would have happened if we had removed the private main method but still called it our main method?🤔
class JavaCertQType1 {
public static void main(String... cmd) {
main("private", cmd); // Calls the overloaded private main method
}
}
Execution Command:
java JavaCertQType1 1 11 EJava Guru
The JVM would look for the public static void main(String... cmd) method to start the program. Seeing that the code inside the public main method
calls another method named main
, it would have tried to find the overloaded main method and failed to find it. Since there is no matching signature, it fails to compile leading to a
Compilation Error
NB
A main
method can be private, but it cannot serve as the entry point for program execution by the JVM
. It is useful for method overloading or internal logic but must be invoked by another method (like the public main
)
Thank you for reading my article, and don't forget to share more tricky questions in the comments. Bring them here, and let's discuss them.
Top comments (0)