HackerRank #9 | Static Initializer Block | 🇧🇷
Tags: java, static, try, catch
Published: 2021-08-25 20:16:19

[Este problema](https://www.hackerrank.com/challenges/java-static-initializer-block/problem) pede para que seja calculada a área de um paralelograma com largura B e altura H. Caso B <= 0 e H <=0, o console deve retornar a mensagem "java.lang.Expection: Breadth and height must be positive".

###Static

Além disso, é importante que seja usado um bloco <code>Static</code> de inicialização. A vantagem do <code>private static methods</code> é a reutilização se for necessário reinicializar a classe variável.

A sintaxe de uma inicialização static é:

<code>
public class staticTest {

	static String s;
	static int n;
	static double b;

	static {
		s = "Eu sou estático";
		n = 500;
		d = 4000.0001;
	}
}
</code>



O código oferecido no problema é o seguinte:

<code>

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {


		//... espaço para escrever o código


public static void main(String[] args){
		if(flag){
			int area=B*H;
			System.out.print(area);
		}
		
	}//end of main

}//end of class

</code>

### Try / Catch

Para resolver o problema, é importante usar tanto o bloco <code>static</code> quanto o <code>try / catch</code>. Toda vez que temos uma <code>CheckedException</code>, podemos usar o <code>try / catch</code> para desviar os erros, mantendo o funcionamento dos comandos.

A sintaxe do Try / Catch é:

<code>
try {
	
} catch (Exception ex) {

}
</code>

Às vezes precisamos usar um <code>throw new Exception("mensagem")</code>, para especificar qual exceção queremos passar e facilitar a correção de bugs futuros.

Dessa forma, a resolução do problema se dá nos seguintes passos:

* Dentro da classe Solution, passar variáveis que sejam <code>static</code>.
* Criar um <code>Scanner</code> para fazer input dos números.
* Validar, através de um <code>boolean</code>, o flag que já estava especificado na main do problema.
* Passar as variáveis B e H para calcular a o paralelograma.
* Abrir o bloco <code>static{}</code>
* Introduzir o bloco <code>try / catch</code>, especificando que se <code>(if)</code> a flag seja <code>false</code>, é necessário aplicar o <code>throw new Exception()</code> e imprimir a exceção que foi pedida.

Sendo assim, a solução final, dentro da classe Solution, fica:

<code>
        static Scanner sc = new Scanner(System.in);
        static boolean flag = true;
        static int B = sc.nextInt();
        static int H = sc.nextInt();

static {

        try{
            if(B <= 0 || H <= 0){
                flag = false;
                throw new Exception("Breadth and height must be positive");
            }
            } catch (java.lang.Exception ex){
            System.out.println(ex);
        }
</code>


==========
##Referências

**Static**

Documentação oficial:
- https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

Exemplo de sintaxe:
- https://stackoverflow.com/questions/9379426/java-when-is-a-static-initialization-block-useful

**Try / Catch**

Exceções e sintaxe
- https://www.devmedia.com.br/blocos-try-catch/7339

============

Essa publicação faz parte de uma série de exercícios resolvidos em Java no HackerRank. Acesse a série completa:

- [HackerRank #6 | Scanner e End-of-file](https://dev.to/beatrizmaciel/hackerrank-6-scanner-e-endoffile-462c)
- [HackerRank #7 | Int to String / String to Int](https://dev.to/beatrizmaciel/hackerrank-7-int-em-string-e-vice-versa-4n1e)
- [HackerRank #8 | Date and Time](https://dev.to/beatrizmaciel/hackerrank-8-date-and-time-1f78)
- HackerRank #9 | Static Initializer Block
- [HackerRank #10 | Currency Formatter](https://dev.to/beatrizmaciel/hackerrank-10-currency-formatter-22oj)
- [HackerRank #11 | DataTypes](https://dev.to/beatrizmaciel/hackerrank-11-datatypes-2e9h)
- [HackerRank #12 | Strings Introduction](https://dev.to/beatrizmaciel/hackerrank-12-strings-introduction-2d1n)
- [HackerRank #13 | Substring Comparisons](https://dev.to/beatrizmaciel/hackerrank-13-substring-comparisons-57ha)
- [HackerRank #14 | Abstract Class](https://dev.to/beatrizmaciel/hackerrank-14-abstract-class-3h5d)
- [HackerRank #18 | BigInteger](https://dev.to/beatrizmaciel/hackerrank-18-biginteger-4jad)
- [HackerRank #19 | Loops II](https://dev.to/beatrizmaciel/hackerrank-19-loops-ii-385n)
- [HackerRank #20 | String Reverse](https://dev.to/beatrizmaciel/hackerrank-20-string-reverse-nec)
- [HackerRank #23 | Instanceof keyword](https://dev.to/beatrizmaciel/hackerrank-23-instanceof-keyword-3lh6)
- [HackerRank #26 | Generics](https://dev.to/beatrizmaciel/hackerrank-26-generics-55p8)
- [HackerRank #27 | 1D Array](https://dev.to/beatrizmaciel/hackerrank-27-1d-array-5f80)
- [HackerRank #28 | Anagrams](https://dev.to/beatrizmaciel/hackerrank-28-anagrams-boi)
- [HackerRank #33 | Arraylist](https://dev.to/beatrizmaciel/hackerrank-33-arraylist-2lj1)
- [HackerRank #34 | Exception Handling Try / Catch](https://dev.to/beatrizmaciel/hackerrank-34-exception-handling-try-catch-144f)
- [HackerRank #36 | Exception Handling](https://dev.to/beatrizmaciel/hackerrank-35-exception-handling-44e)
- [HackerRank #37 | List](https://dev.to/beatrizmaciel/hackerrank-37-list-4gmj)
- [HackerRank #38 | SubArray](https://dev.to/beatrizmaciel/hackerrank-38-subarray-1693)
- [HackerRank #39 | HashSet](https://dev.to/beatrizmaciel/hackerrank-39-hashset-3jb3)
- [HackerRank #40 | Java Dequeue](https://dev.to/beatrizmaciel/hackerrank-40-java-dequeue--497h)