SlideShare une entreprise Scribd logo
1  sur  22
Télécharger pour lire hors ligne
Módulo 1
Programación Java

                Clase 1

     • Repaso Java
     • Estándares de codificación Java
     • Buenas prácticas



      Alejandro González Orellana
Temario
• Repaso Java
• Estándares de codificación Java
• Buenas prácticas
Temario
• Repaso Java
• Estándares de codificación Java
• Buenas prácticas
Estándares de codificación Java

                      Normas básicas
• Evitar archivos de más de 2000 líneas
• Estructura de un archivo:
    Comentario inicial
    Declaración de package
    Declaración de imports
    Doc-comment de la clase o interfaz
    Implementación
• Simple utilizar packages
• Utilizar imports explícitos
Estándares dede codificación Java
   Estándares codificación Java
/*
 * CustomerData.java
 *
 * Last Modification            Comentario inicial, puede incluir datos
 * Author:   Agonzalez         de la última modificación, empresa, etc.
 * Date: 08-jun-2005
 *
 * JaNoX Software Inc.
 */

package org.janox.customers.data;            Siempre utilizar packages

import java.util.Map;           Evitar imports del tipo java.util.*
import java.util.HashMap

/**
 * Represents the basic data of a customer
 *                            Doc-comment, aparecerá
 * @author Agonzalez          en el Javadoc de la clase
 *
 */
public class CustomerData {
Estándares de codificación Java

                       Indentación
• Evitar líneas de más de 80 caracteres de largo, son
  incompatibles con algunas herramientas. Si una línea es
  muy larga dividirla
• Se utilizan cuatro espacios como unidad de indentación
Estándares de codificación Java

              Nomenclatura de nombres
• Nombres de paquete: Completamente en minúsculas, el
  nombre debe seguir el estandar. Ej:
  com.janox.customers, com.janox.customers.data
• Nombres de clase e interfaces: La primera letra de cada
  palabra debe ser mayúscula. Ej: Item, CustomerData
• Nombres de métodos y variables: La primera palabra en
  minúsculas, y el resto comenzando en mayúsculas. Ej:
  addItem(), itemNumber, setName(), getName()
• Nombres de constantes: Deben estar completamente en
  mayúsuculas, las palabras se separan con _ (underscore).
  Ej: MAX_ITEM_NUMBER, DEFAULT_PREFIX
Estándares dede codificación Java
     Estándares codificación Java

                Declaración de variables
• Hacer una declaración por línea, permite poner
  comentarios
• Dar un valor inicial a la variable
• Siempre hacer declaraciones al inicio de un bloque
• Utilizar nombres significativos
Estándares de codificación Java

                         Sentencias
• Separar con un espacio la sentencia del paréntesis
  izquierdo
• Utilizar SIEMPRE llaves ({ y })
• Las sentencias vacías se escriben en una sola línea
• Si se desea ignorar una excepción indicarlo explícitamente
Estándares de codificación Java
                                               Utilizar llaves, aunque
for (int i = 0; i < MAX_VALUE; i++) {
                                                     se trate de
   doSomething();                           sentencias de una sola línea.
}

                             Si la sentencia es vacía usar una
while (checkCondition());                sola línea


try {
                                 El nombre de la excepción indica
   // do something...             que no es un error la sentencia
                                               vacía
} catch (Exception ignored) {}

if (condition) {
   // do something...
} else if (condition 2) {        Los else están en la misma línea
   // do something...                 que la llave de cierre
} else {
   // do something...
}
Temario
• Repaso Java
• Estándares de codificación Java
• Buenas prácticas
Buenas prácticas

                  El nombre es importante
• Error clásico: Utilizar nombres que no indican nada sobre
  la variable o método
• Solución: Utilizar nombres descriptivos
   // WRONG!!!
   private String ln;

   private int calculate(int amount) {
   ...
   }

   // RIGHT
   private String lastName;

   private int calculateTax(int amount) {
   ...
   }
Buenas prácticas

                    El null es tu enemigo
• Error clásico: NullPointerException comparando
  objetos con literales
• Solución: Usar el literal primero

   // UNSAFE!!!
   if (myString.equals(“”)) {
      // do something...
   }

   // SAFE
   if (“”.equals(myString)) {
      // do something...
   }
Buenas prácticas

                    El null es tu enemigo
• Error clásico: NullPointerException comparando
  objetos
• Solución: Utilizar comparaciones nullsafe

   if (a != null && a.equals(b)) {
      // do something...
   }

   // Also true if both are null
   if ( a != null ? a.equals(b) : b == null ) {
      // do something...
   }
Buenas prácticas

                    El null es tu enemigo
• Error clásico: Se envían parámetros nulos a los métodos
• Solución: Realizar métodos nullsafe o simplemente lanzar
  excepciones
   // Nullsafe
   public boolean myMethod(String p_str) {
      boolean result = false;
      if (p_str != null) {
          // do something...
      }
      return result;
   }

   // With exceptions
   public boolean myMethod(String p_str) {
      if (p_str == null) {
          throw new NullPointerException(“p_str can not be null!”);
      }
      // ...
   }
Buenas prácticas

                    El null es tu enemigo
• Error clásico: Se envían colecciones o arreglos nulos a
  métodos
• Solución: Utilizar las facilidades de Java
   // Empty collections

   Collections.EMPTY_LIST
   Collections.EMPTY_MAP
   Collections.EMPTY_SET

   // Zero size arrays
   int[] myArray = new int[0];
   final String[] EMPTY_STRING_ARRAY = new String[0];
Buenas prácticas

                                 Ciclos
• Error clásico: Se evalua una condición en cada iteración
  de un ciclo
• Solución: Evaluar antes del ciclo
   // WRONG!!!
   for (int i = 0; i < myString.length(); i++) {
      // do something...
   }

   // RIGHT
   int length = myString.length();

   for (int i = 0; i < length; i++) {
      // do something...
   }
Buenas prácticas

                                 Ciclos
• Error clásico: Se concatenan String en un ciclo
• Solución: Usar StringBuffer
   // WRONG!!!
   String str = “”;

   for (int i = 0; i < MSG_NUMBER; i++) {
       str = str + messages[i];
   }

   // RIGHT
   StringBuffer sb = new StringBuffer();

   for (int i = 0; i < MSG_NUMBER; i++) {
       sb.append(messages[i]);
   }

   String str = sb.toString();
Buenas prácticas

                            Colecciones
• Error clásico: Amarrar una colección a una
  implementación específica
• Solución: Usar las interfaces de la API collections
   // WRONG!!!
   ArrayList list = new ArrayList();

   // RIGHT
   List list = new ArrayList();

   // Sometimes better...
   Collection itemCollection = new LinkedList();
Buenas prácticas

                            Colecciones
• Error clásico: Usar Vector o HashTable cuando no se
  necesita sincronización
• Solución: Usar las clases de la API collections
   // Lists
   List myList1 = new ArrayList();
   List myList2 = new LinkedList();

   // Maps
   Map myMap1 = new HashMap();
   Map myMap2 = new TreeMap();

   // With synchronization
   List synchronyzedList = Collections.synchronizedList(myList1);

   // Unmodifiable
   Map unmodifiableMap = Collections.unmodifiableMap(myMap1);
Buenas prácticas

                               “Magia”
• Error clásico: Utilizar números o strings “mágicos”
• Solución: Usar constantes con nombre
   // WRONG!!!
   for (int i = 0; i < 10; i++) {
       str = str + messages[i];
   }

   // RIGHT
   for (int i = 0; i < MSG_NUMBER; i++) {
       str = str + messages[i];
   }

   public static final DEFAULT_PREFIX = “_”;
Buenas prácticas

                               Números
• Error clásico: Utilizar números de punto flotante para
  sumas monetarias
• Solución: Usar la clase BigDecimal
   // WRONG!!!

   public static final double TAX = 0.19;
   double monto = 123.23;
   ...
   result = monto * TAX;

   // RIGHT
   public static final BigDecimal TAX = new BigDecimal(“0.19”);
   BigDecimal monto = new BigDecimal(“123.23”);
   ...
   result = monto.multiply(TAX);

Contenu connexe

Tendances

Pointers in c
Pointers in cPointers in c
Pointers in c
Mohd Arif
 

Tendances (20)

Python oop class 1
Python oop   class 1Python oop   class 1
Python oop class 1
 
Funciones recursivas en C++
Funciones recursivas en C++Funciones recursivas en C++
Funciones recursivas en C++
 
Arreglos
ArreglosArreglos
Arreglos
 
ITFT-Constants, variables and data types in java
ITFT-Constants, variables and data types in javaITFT-Constants, variables and data types in java
ITFT-Constants, variables and data types in java
 
03 java poo_parte_2
03 java poo_parte_203 java poo_parte_2
03 java poo_parte_2
 
Operators in java
Operators in javaOperators in java
Operators in java
 
Equivalencia de autómatas finitos y expresiones regulares.
Equivalencia de autómatas finitos y expresiones regulares.Equivalencia de autómatas finitos y expresiones regulares.
Equivalencia de autómatas finitos y expresiones regulares.
 
Presentation on pointer.
Presentation on pointer.Presentation on pointer.
Presentation on pointer.
 
Programación Orientada a Objetos para Python
Programación Orientada a Objetos para PythonProgramación Orientada a Objetos para Python
Programación Orientada a Objetos para Python
 
POO - 11 - Prática de Herança
POO - 11 - Prática de HerançaPOO - 11 - Prática de Herança
POO - 11 - Prática de Herança
 
Arboles de expresion
Arboles de expresionArboles de expresion
Arboles de expresion
 
clean code
clean codeclean code
clean code
 
Clean code
Clean codeClean code
Clean code
 
Pointers in c
Pointers in cPointers in c
Pointers in c
 
Funciones en C++
Funciones en C++Funciones en C++
Funciones en C++
 
Comandos de Raptor, Java y C# Sharp
Comandos de Raptor, Java y C# SharpComandos de Raptor, Java y C# Sharp
Comandos de Raptor, Java y C# Sharp
 
Exception handling in python
Exception handling in pythonException handling in python
Exception handling in python
 
Pointers in C
Pointers in CPointers in C
Pointers in C
 
Pointer to function 1
Pointer to function 1Pointer to function 1
Pointer to function 1
 
Bad Code Smells
Bad Code SmellsBad Code Smells
Bad Code Smells
 

Similaire à Programación Java

2introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate022introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate02
Krizztiina Pacheko
 

Similaire à Programación Java (20)

Javascript continuación
Javascript   continuaciónJavascript   continuación
Javascript continuación
 
LibreríAs De Java
LibreríAs De JavaLibreríAs De Java
LibreríAs De Java
 
Ruby
Ruby Ruby
Ruby
 
Ruby 01
Ruby 01Ruby 01
Ruby 01
 
C sharp intro1
C sharp intro1C sharp intro1
C sharp intro1
 
Semana9b Vbr
Semana9b VbrSemana9b Vbr
Semana9b Vbr
 
Introducción a Swift
Introducción a SwiftIntroducción a Swift
Introducción a Swift
 
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitaciónJava1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
 
Java introduccion conceptos basicos una mira
Java introduccion conceptos basicos una miraJava introduccion conceptos basicos una mira
Java introduccion conceptos basicos una mira
 
C sharp intro1
C sharp intro1C sharp intro1
C sharp intro1
 
C sharp intro1
C sharp intro1C sharp intro1
C sharp intro1
 
Programar java
Programar javaProgramar java
Programar java
 
Programar java
Programar javaProgramar java
Programar java
 
Best Practices
Best PracticesBest Practices
Best Practices
 
Programación java 2
Programación java 2Programación java 2
Programación java 2
 
Act 2 y 3
Act 2 y 3Act 2 y 3
Act 2 y 3
 
2introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate022introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate02
 
INTRODUCCION LENGUAJE JAVA
INTRODUCCION LENGUAJE JAVAINTRODUCCION LENGUAJE JAVA
INTRODUCCION LENGUAJE JAVA
 
2) introduccion al lenguaje java
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje java
 
Generics C#
Generics C#Generics C#
Generics C#
 

Plus de Jano González

Plus de Jano González (15)

Spring jdbc
Spring jdbcSpring jdbc
Spring jdbc
 
Vim FTW!
Vim FTW!Vim FTW!
Vim FTW!
 
Ruby
RubyRuby
Ruby
 
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
JRuby: Ruby en un mundo enterprise RubyConf Uruguay 2011
 
JRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterpriseJRuby: Ruby en un mundo enterprise
JRuby: Ruby en un mundo enterprise
 
Programación Políglota en la JVM
Programación Políglota en la JVMProgramación Políglota en la JVM
Programación Políglota en la JVM
 
A Little RSpec
A Little RSpecA Little RSpec
A Little RSpec
 
JRuby ¿Lo mejor de dos mundos?
JRuby ¿Lo mejor de dos mundos?JRuby ¿Lo mejor de dos mundos?
JRuby ¿Lo mejor de dos mundos?
 
Un emulador de Game Boy escrito en Ruby (parte 1)
Un emulador de Game Boy escrito en Ruby (parte 1)Un emulador de Game Boy escrito en Ruby (parte 1)
Un emulador de Game Boy escrito en Ruby (parte 1)
 
Taller de Unit Testing y TDD en Java: Parte 1
Taller de Unit Testing y TDD en Java: Parte 1Taller de Unit Testing y TDD en Java: Parte 1
Taller de Unit Testing y TDD en Java: Parte 1
 
Curso de Spring: Transacciones
Curso de Spring: TransaccionesCurso de Spring: Transacciones
Curso de Spring: Transacciones
 
Análisis y Diseño OO 2
Análisis y Diseño OO 2Análisis y Diseño OO 2
Análisis y Diseño OO 2
 
Análisis y Diseño OO 1
Análisis y Diseño OO 1Análisis y Diseño OO 1
Análisis y Diseño OO 1
 
Curso de Spring: Beans
Curso de Spring: BeansCurso de Spring: Beans
Curso de Spring: Beans
 
Un newbie conoce a Sinatra
Un newbie conoce a SinatraUn newbie conoce a Sinatra
Un newbie conoce a Sinatra
 

Dernier

redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
nicho110
 

Dernier (11)

How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
redes informaticas en una oficina administrativa
redes informaticas en una oficina administrativaredes informaticas en una oficina administrativa
redes informaticas en una oficina administrativa
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
investigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXIinvestigación de los Avances tecnológicos del siglo XXI
investigación de los Avances tecnológicos del siglo XXI
 
Buenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptxBuenos_Aires_Meetup_Redis_20240430_.pptx
Buenos_Aires_Meetup_Redis_20240430_.pptx
 
Guia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos BasicosGuia Basica para bachillerato de Circuitos Basicos
Guia Basica para bachillerato de Circuitos Basicos
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 

Programación Java

  • 1. Módulo 1 Programación Java Clase 1 • Repaso Java • Estándares de codificación Java • Buenas prácticas Alejandro González Orellana
  • 2. Temario • Repaso Java • Estándares de codificación Java • Buenas prácticas
  • 3. Temario • Repaso Java • Estándares de codificación Java • Buenas prácticas
  • 4. Estándares de codificación Java Normas básicas • Evitar archivos de más de 2000 líneas • Estructura de un archivo:  Comentario inicial  Declaración de package  Declaración de imports  Doc-comment de la clase o interfaz  Implementación • Simple utilizar packages • Utilizar imports explícitos
  • 5. Estándares dede codificación Java Estándares codificación Java /* * CustomerData.java * * Last Modification Comentario inicial, puede incluir datos * Author: Agonzalez de la última modificación, empresa, etc. * Date: 08-jun-2005 * * JaNoX Software Inc. */ package org.janox.customers.data; Siempre utilizar packages import java.util.Map; Evitar imports del tipo java.util.* import java.util.HashMap /** * Represents the basic data of a customer * Doc-comment, aparecerá * @author Agonzalez en el Javadoc de la clase * */ public class CustomerData {
  • 6. Estándares de codificación Java Indentación • Evitar líneas de más de 80 caracteres de largo, son incompatibles con algunas herramientas. Si una línea es muy larga dividirla • Se utilizan cuatro espacios como unidad de indentación
  • 7. Estándares de codificación Java Nomenclatura de nombres • Nombres de paquete: Completamente en minúsculas, el nombre debe seguir el estandar. Ej: com.janox.customers, com.janox.customers.data • Nombres de clase e interfaces: La primera letra de cada palabra debe ser mayúscula. Ej: Item, CustomerData • Nombres de métodos y variables: La primera palabra en minúsculas, y el resto comenzando en mayúsculas. Ej: addItem(), itemNumber, setName(), getName() • Nombres de constantes: Deben estar completamente en mayúsuculas, las palabras se separan con _ (underscore). Ej: MAX_ITEM_NUMBER, DEFAULT_PREFIX
  • 8. Estándares dede codificación Java Estándares codificación Java Declaración de variables • Hacer una declaración por línea, permite poner comentarios • Dar un valor inicial a la variable • Siempre hacer declaraciones al inicio de un bloque • Utilizar nombres significativos
  • 9. Estándares de codificación Java Sentencias • Separar con un espacio la sentencia del paréntesis izquierdo • Utilizar SIEMPRE llaves ({ y }) • Las sentencias vacías se escriben en una sola línea • Si se desea ignorar una excepción indicarlo explícitamente
  • 10. Estándares de codificación Java Utilizar llaves, aunque for (int i = 0; i < MAX_VALUE; i++) { se trate de doSomething(); sentencias de una sola línea. } Si la sentencia es vacía usar una while (checkCondition()); sola línea try { El nombre de la excepción indica // do something... que no es un error la sentencia vacía } catch (Exception ignored) {} if (condition) { // do something... } else if (condition 2) { Los else están en la misma línea // do something... que la llave de cierre } else { // do something... }
  • 11. Temario • Repaso Java • Estándares de codificación Java • Buenas prácticas
  • 12. Buenas prácticas El nombre es importante • Error clásico: Utilizar nombres que no indican nada sobre la variable o método • Solución: Utilizar nombres descriptivos // WRONG!!! private String ln; private int calculate(int amount) { ... } // RIGHT private String lastName; private int calculateTax(int amount) { ... }
  • 13. Buenas prácticas El null es tu enemigo • Error clásico: NullPointerException comparando objetos con literales • Solución: Usar el literal primero // UNSAFE!!! if (myString.equals(“”)) { // do something... } // SAFE if (“”.equals(myString)) { // do something... }
  • 14. Buenas prácticas El null es tu enemigo • Error clásico: NullPointerException comparando objetos • Solución: Utilizar comparaciones nullsafe if (a != null && a.equals(b)) { // do something... } // Also true if both are null if ( a != null ? a.equals(b) : b == null ) { // do something... }
  • 15. Buenas prácticas El null es tu enemigo • Error clásico: Se envían parámetros nulos a los métodos • Solución: Realizar métodos nullsafe o simplemente lanzar excepciones // Nullsafe public boolean myMethod(String p_str) { boolean result = false; if (p_str != null) { // do something... } return result; } // With exceptions public boolean myMethod(String p_str) { if (p_str == null) { throw new NullPointerException(“p_str can not be null!”); } // ... }
  • 16. Buenas prácticas El null es tu enemigo • Error clásico: Se envían colecciones o arreglos nulos a métodos • Solución: Utilizar las facilidades de Java // Empty collections Collections.EMPTY_LIST Collections.EMPTY_MAP Collections.EMPTY_SET // Zero size arrays int[] myArray = new int[0]; final String[] EMPTY_STRING_ARRAY = new String[0];
  • 17. Buenas prácticas Ciclos • Error clásico: Se evalua una condición en cada iteración de un ciclo • Solución: Evaluar antes del ciclo // WRONG!!! for (int i = 0; i < myString.length(); i++) { // do something... } // RIGHT int length = myString.length(); for (int i = 0; i < length; i++) { // do something... }
  • 18. Buenas prácticas Ciclos • Error clásico: Se concatenan String en un ciclo • Solución: Usar StringBuffer // WRONG!!! String str = “”; for (int i = 0; i < MSG_NUMBER; i++) { str = str + messages[i]; } // RIGHT StringBuffer sb = new StringBuffer(); for (int i = 0; i < MSG_NUMBER; i++) { sb.append(messages[i]); } String str = sb.toString();
  • 19. Buenas prácticas Colecciones • Error clásico: Amarrar una colección a una implementación específica • Solución: Usar las interfaces de la API collections // WRONG!!! ArrayList list = new ArrayList(); // RIGHT List list = new ArrayList(); // Sometimes better... Collection itemCollection = new LinkedList();
  • 20. Buenas prácticas Colecciones • Error clásico: Usar Vector o HashTable cuando no se necesita sincronización • Solución: Usar las clases de la API collections // Lists List myList1 = new ArrayList(); List myList2 = new LinkedList(); // Maps Map myMap1 = new HashMap(); Map myMap2 = new TreeMap(); // With synchronization List synchronyzedList = Collections.synchronizedList(myList1); // Unmodifiable Map unmodifiableMap = Collections.unmodifiableMap(myMap1);
  • 21. Buenas prácticas “Magia” • Error clásico: Utilizar números o strings “mágicos” • Solución: Usar constantes con nombre // WRONG!!! for (int i = 0; i < 10; i++) { str = str + messages[i]; } // RIGHT for (int i = 0; i < MSG_NUMBER; i++) { str = str + messages[i]; } public static final DEFAULT_PREFIX = “_”;
  • 22. Buenas prácticas Números • Error clásico: Utilizar números de punto flotante para sumas monetarias • Solución: Usar la clase BigDecimal // WRONG!!! public static final double TAX = 0.19; double monto = 123.23; ... result = monto * TAX; // RIGHT public static final BigDecimal TAX = new BigDecimal(“0.19”); BigDecimal monto = new BigDecimal(“123.23”); ... result = monto.multiply(TAX);