Compilando diversos arquivos java para um único programa

Cordiais saudações.

Estou tentando compilar os seguintes arquivos de código java com extensão java:

  • ICharQ.java
  • FixedQueue.java
  • QueueFullException.java
  • QueueEmptyException.java
  • QExcDemo.java

Mas está dando erro no arquivo FixedQueue.java, e o erro é o seguinte:

FixedQueue.java:22: error ';' expected
throws QueueEmptyException() {
                          ^

Essa linha no programa é maior, ela é composta integralmente pelo código abaixo:

    public char get()
        throws QueueEmptyException() {

Veja que foi dividido em duas linhas porque é uma linha grande, e o erro apontado acima fica na posição dos parenteses (). Revisei o código mas não vejo onde possa colocar mais um ponto e vírgula. Durante a compilação do arquivo QExcDemo.java ocorre a chamada a um erro semelhante, não havendo a formação do respectivo .class. Acho que o erro do FixedQueue.java provoca o erro do QExcDemo.java. Veja como esta o erro durante a compilação do QExcDemo.java:

.\FixedQueue.java:22: error ';' expected
throws QueueEmptyException() {
                          ^

Vou listar abaixo o código deste dois arquivos. Por favor, alguém poderia me dizer porque este erro está ocorrendo. Qual a solução?

Obrigado,
Ronaldo

    // Classe de fila de tamanho fixo para caracteres que usa exceções.
    class FixedQueue implements ICharQ {
        private char q[]; // esse array contém a fila
        private int putloc, getloc; // índices put e get

        // Constrói uma fila vazia dado seu tamanho.
        public FixedQueue(int size) {
            q = new char[size]; // aloca memória para a fila
            putloc = getloc = 0;
        }

        // Insere um caractere na fila.
        public void put(char ch) throws QueueFullException {

            if(putloc == q.length) throw new QueueFullException(q.length);

            q[putloc++] = ch;
        }

        //Remove um caracter da fila.
        public char get()
            throws QueueEmptyException() {

            if(getloc == putloc) throw new QueueEmptyException();

            return q[getloc++];
        }
    }
    // Demonstra as exceções de fila.
    class QExcDemo {
        public static void main(String args[]) {
            FixedQueue q = new FixedQueue(10);
            char ch;
            int i;

            try {
                // excede a fila
                for(i = 0; i < 11; i++) {
                    System.out.print("Attempting to store : " + (char) ('A' + i));
                    q.put((char) ('A' + i));
                    System.out.println(" - OK");
                }
                System.out.println();
            }
            catch(QueueFullException exc) {
                System.out.println(exc);
            }
            System.out.println();

            try {
                // tenta acessar elemento em fila vazia
                for(i = 0; i < 11; i++) {
                    System.out.print("Getting next char: ");
                    ch = q.get();
                    System.out.println(ch);
                }
            }
            catch(QueueEmptyException exc) {
                System.out.println(exc);
            }
        }
    }

Tira os parênteses e testa.

2 curtidas

@anyblueangel3 Talvez vc esteja confundindo um código que lança uma exceção com a que diz que tipo de exceção um método pode lançar.

Quando vc quer lançar uma exceção em um método, vc faz:

throw new SuaException();

Quando vc quer dizer quais tipos de exceção um método está lançando, vc usa o throws com a declaração das exceções:

public void seuMetodo() throws Exception1, Exception2 {
}

Repare que o throws servirá apenas para declarar as exceptions. Não há qualquer tipo de invocação usando parênteses.

Lembrando que o throws somente é necessário quando a exceção é checked, ou seja, herda da classe Exception da api do java.

Se fosse uma exceção unchecked, ou seja, herdando de RuntimeException, não seria necessário adicionar a declaração no throws do método.

2 curtidas