O que esse programa java está fazendo ? Alguém poderia me ajudar?

import java.io.FileReader;
import java.io.IOException;

public class Estudo {
public static void main(String [] args) {

    FileReader frd;
    char a[] = new char[200];
        try{
            if(args.length == 0){
                System.out.println("Informe o nome do arquivo");
                System.exit(0);
            }
            frd = new FileReader(args[0]);
            fr.close(); 
        }catch (IOException e){
           System.out.println("Arquivo nao existe");
           System.exit(0);
        }
    System.out.println(a); 
}

}

Estou estudando alguns códigos, mais muitos eu não estou entendendo, alguém poderia me ajudar. Será se com tempo eu aprendo a interpretar ???

Normal nao entender, pois está estudando da forma mais complicada. Segue algum material de ensino ou curso. Pesquisa no google “apostila java” ou “curso java” no youtube.

Queria saber o que esse código está fazendo

Concordo com o @javaflex: o código é um tanto completo. E acrescento mais: está incompleto e, portanto, está meio sem sentido. Mas vejamos:

import java.io.FileReader;
import java.io.IOException;

public class Estudo {
	public static void main(String [] args) {

		FileReader frd; //#1
		char a[] = new char[200]; //#2
			try{ //#3
				if(args.length == 0){ //#4
					System.out.println("Informe o nome do arquivo");
					System.exit(0);
				}
				frd = new FileReader(args[0]); //#5
				a[0] = frd;
				frd.close(); //#6
			}catch (IOException e){ //#7
			   System.out.println("Arquivo nao existe");
			   System.exit(0);
			}
		System.out.println(a); //#8
	}
}

1- FileReader (“Leitor de arquivos”): Lê texto de caracteres, ou seja, arquivos onde os dados são armazenados como caracteres e não como bytes. As operações de leitura e escrita realizadas por meio de fluxos baseados em caracteres.
Um fluxo baseado em caracteres é aquele em que o fluxo corresponde a um sequência de caracteres. Um fluxo de bytes, por sua vez, corresponde a uma sequência de bytes. O primeiro tipo é conhecido como arquivos de texto, enquanto o segundo, arquivos binários.
A classe FileReader, que como já se viu, destina-se à leitura de arquivos de texto e pertence ao pacote java.io (Java input/output) que provê várias outras classes para a manipulação de arquivos.
De posse dessas informações, pode-se entender que o programa tem o objetivo de ler dados de um arquivo de texto ao declarar um objeto frd do tipo FileReader.

[Fonte 1: JCP8, cap. 17, pág. 554]
[Fonte 2: Documentação do Java - Oracle Docs - FileReader Class]

2 - É uma declaração de criação de um array de caracteres. Cria um a array de tamanho 200.

3 - Try/Catch (“Tentar/Pegar”): o binômio try/catch é uma declaração que permite tratar exceções. Sempre que se tem um trecho de código passível de gerar um “evento de exceção”, deve-se ‘circundar’ esse trecho de código com a declaração try/catch. Nesse caso, o código que pode lançar a exceção fica dentro do bloco try e a exceção possível, é capturada no bloco catch. Funciona mais ou menos assim:

3.1 - Ler um arquivo de texto pode lançar uma exceção. Logo, o trecho de código que pode gerar uma exceção, deve vir dentro do bloco try;

3.2 - Então a JVM “tenta” fazer a operação. Se ocorrer algum erro, como arquivo não encontrado ou privilégio de acesso insuficiente, o bloco catch “pega” a exceção lançada pela operação.

3.3 - De posse da exceção pode-se tratá-la, como, por exemplo, informando ao usuário que um erro ocorreu e a possível causa.

É claro que existem outras declarações que permitem tratar exceções. Por exemplo, como complementar ao binômio try/catch, existe o bloco finally. Quando o finally é usado temos o trinômio try/catch/finally. Especificamente e métodos, pode-se usar a cláusula throws que especifica as exceções que o método pode lançar.

[Fonte 1: JCP8, cap. 10, pág. 334-355]
[Fonte 2: Tutoriais de Java - Java Tutorials - Exceptions]

4 - É um controle de fluxo condicional que verifica se foi passado algum argumento por linha de comando (args). De uma maneira simplista, argumentos de linha de comando são um conjunto de string separadas por espaço, um array, na verdade, passadas diretamente à JVM para serem utilizadas no programa em tempo de execução. Exemplo:

javac -encoding UTF-8 Estudo.java (compilação)
java Estudo Alpha Beta Gamma (execução com os argumentos “Alpha”, “Beta” e “Gama”)

Logo, se o tamanho de args (args.length == 0), então nada foi passado por linha de comando.

[Fonte 1: JCP8, cap. 6, pág. 158, 218-219]

5 - Se a condição for falsa, ou seja, foi passado ao menos um argumento de linha de comando, então instancia-se um objeto do tipo FileReader passando o primeiro argumento (posição zero do array args) para o construtor da classe FileReader. Daí passa a executar o item #8.

6 - Se nenhuma exceção for lançada, então fecha-se o leitor.

7 - Se uma exceção de input/output for lançada, imprime "Arquivo não existe" e finaliza o programa com System.exit(0);.

8 - Imprime o array a.