Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

297
Views
¿Quién está en lo correcto y quién está equivocado? Certificación Oracle OCP. Inconsistencia en la elección de las respuestas.

¿Qué imprime el siguiente programa?
`

 public class Deer { enum Food {APPLES, BERRIES, GRASS} protected class Diet { private Food getFavorite() { return Food.BERRIES; } } public static void main(String[] seasons) { switch(new Diet().getFavorite()) { case APPLES: System.out.print("a"); case BERRIES: System.out.print("b"); default: System.out.print("c"); } } }

` ingrese la descripción de la imagen aquí

La imagen de respuesta es del banco de pruebas OCP, en el que preparo mi examen de certificación de Oracle

Mi problema es que no puedo estar de acuerdo con la respuesta, que la empresa Oracle considera correcta

Creo que la opción más correcta y precisa es D .

Mi argumento : el método principal no es culpable de la declaración incorrecta de la clase Diet. Se produce un error cuando escribimos esta clase en la declaración de cambio incorrectamente, en el momento de la declaración de la clase

Incluso la respuesta completa en la imagen explicó que

Creé esta pregunta porque cada puntaje en un examen pagado está en juego

Pensé que la empresa de comercio profesional trata la redacción de preguntas con cuidado.

¿Cómo un participante del examen puede hacer frente a esta situación?

Por favor, dígame, ¿es común tener respuestas tan ambiguas en los exámenes de certificación de TI?

¡Gracias por adelantado!

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

La respuesta E es la correcta. No importa cuál crea que debería ser la respuesta, cuando compilo el código usando javac (Java 8 y Java 16), el único error de compilación está en el método main .

 $ javac Deer.java Deer.java:9: error: non-static variable this cannot be referenced from a static context switch(new Diet().getFavorite()) { ^ 1 error $

El mensaje de error de compilación es un poco extraño... pero está claramente en el método main . Puedes repetir este experimento por ti mismo.


Usted afirma que piensa que la declaración de la Diet es inapropiada, pero no veo nada inapropiado al respecto. Parece una declaración de clase interna normal.

El problema en el código NO está en la declaración de Diet , sino en la forma en que el método main intenta crear la instancia de Diet . La forma correcta (sintácticamente) sería escribir algo como esto (en main ):

 switch(new Deer().new Diet().getFavorite()) {

Esto dice:

  • crear una instancia de la clase externa Deer
  • crear una instancia de Diet en la instancia Deer
  • llama al método getFavorite() en la instancia de Diet .

Así que... claramente... main lo está haciendo mal, y ahí es donde está el error. Y el compilador está de acuerdo.

Y la especificación del lenguaje Java ( JLS 15.9.2 ) lo confirma:

Si C es una clase de miembro interno, entonces:

  • Si la expresión de creación de instancia de clase no está calificada, entonces:

    • Si la expresión de creación de instancia de clase se produce en un contexto estático, se produce un error en tiempo de compilación.

(No encontrará nada en el JLS que respalde su afirmación de que la declaración de Diet es incorrecta... porque no es incorrecta. Pero siéntase libre de investigar esto, si lo desea).


Metaconsejo: antes de despotricar sobre los (supuestos) problemas con los exámenes de certificación de TI y las empresas que los administran... es recomendable asegurarse de que tiene los datos correctos.

El lenguaje Java tiene todo tipo de rincones oscuros, e incluso después de más de 20 años de usarlo, sigo encontrando cosas sobre el lenguaje que no me di cuenta (o que he olvidado). Es una mala idea asumir que tiene razón... frente a la posible evidencia de lo contrario.

over 4 years ago · Santiago Trujillo Report

0

No hay nada malo con la declaración de la clase Diet . Es el uso de la clase Diet , no su declaración o definición, lo que causa el problema, y ese uso está en main() . Como señala la pregunta, hacer new Deer().new Diet().getFavorite() estaría bien, por lo que la clase Diet se compiló correctamente.

Creo que lo que te estás equivocando aquí es la palabra "declaración". Esto no es ambiguo : tiene un significado muy específico y técnico en lenguajes compilados como C y Java.

  • La declaración de un objeto es cuando se declara que existe por código. A menudo esto se combina con
  • la definición de un objeto describe qué es (casi siempre combinada con la declaración, en Java; en C/C++, la declaración y la definición a menudo se dividen entre archivos .h y .c ).
  • La creación de instancias de un objeto es cuando se invoca la definición para crear una instancia del objeto/variable en la memoria. Cada instancia (puede haber múltiples) se ajustará a la misma definición.

La declaración y definición de Diet están bien, solo la instanciación es incorrecta. Por lo tanto, la respuesta (D) es incorrecta.


Además, como se señaló en la otra respuesta, si intenta compilar este código con javac , el único error de compilación está en el método main , nuevamente, porque es el uso de la clase Diet lo que causa el problema, no la definición .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!