Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Introdução a java, Notas de estudo de Informática

LINGUAGEM DE PROGRAMAÇÃO JAVA

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 13/01/2010

luiz-paulo-31
luiz-paulo-31 🇧🇷

1 documento

1 / 77

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Introdução à
Linguagem Java
por Christian Cleber Masdeval Braz
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d

Pré-visualização parcial do texto

Baixe Introdução a java e outras Notas de estudo em PDF para Informática, somente na Docsity!

Introdução à

Linguagem Java

por Christian Cleber Masdeval Braz

Sumário

1 – Introdução ao Java

A linguagem Java foi desenvolvida pela Sun Microsystems em 1995. Apesar de relativamente nova, a linguagem obteve uma espetacular aceitação por programadores do mundo inteiro, tendo se difundido como nunca antes ocorreu com uma linguagem de programação. Um fator que colaborou com isso, é o fato da linguagem possuir vantagens agregadas tais como: orientação a objetos, independência de plataforma, multitarefa, robusta, segura e distribuída. Com o advento da Internet, que tornou ainda mais necessário a comunicação entre plataformas heterogêneas, estes fatores fizeram com que o Java fosse a tecnologia perfeita para este novo cenário.

1.1 - Histórico da Linguagem

No início da década de 90, um pequeno grupo de projeto da Sun pretendia criar uma nova geração de computadores portáteis inteligentes, que pudessem se comunica entre si de diversas formas. Para isso, decidiu-se criar uma plataforma de desenvolvimento onde o software pudesse ser executado em diversos tipos de equipamentos. Para o desenvolvimento desta plataforma foi escolhida a linguagem de programação C++.

A linguagem C++ não permitia realizar com facilidade tudo o que o grupo pretendia. Neste ponto, James Gosling, coordenador do projeto, decidiu criar uma nova linguagem de programação que pudesse atendê-los em suas necessidades.

A criação dos chips inteligentes foi abandonada devido ao alto custo de produção. Posteriormente, a explosão da Internet no mundo todo fez surgir a necessidade de uma tecnologia onde computadores de diferentes plataformas pudessem conversar. Surge daí, baseada na linguagem criada para o projeto de Gosling, a linguagem Java.

1.2 – Características da Linguagem

  • Orientada a Objetos : Paradigma atual mais utilizado na construção de softwares. Dentre suas vantagens, podemos citar reaproveitamento de código e aumento da manutenibilidade dos sistemas assim desenvolvidos.
  • Simples e Robusta : Java representa em muitos aspectos um aperfeiçoamento da linguagem C++. Ela possui certas características que permitem a criação de programas de forma mas rápida, pois tiram do programador a possibilidade de cometer erros que são comuns de ocorrer em C++. Algumas dessas características são o tratamento obrigatório de exceções e o gerenciamento automático de memória.
  • Gerenciamento Automático de Memória : Em Java não existe ponteiros, isto é, não é permitido ao programador acessar explicitamente uma posição de memória. Java automaticamente gerencia o processo de alocação e liberação de memória, ficando o programador livre desta atividade. O mecanismo responsável pela liberação de memória que não está mais sendo utilizada é conhecido como Garbage Collector.
  • Independência de Plataforma : Um dos elementos chave da linguagem Java é a independência de plataforma. Um programa Java escrito em uma plataforma pode ser utilizado em uma outra distinta da original. Este aspecto da linguagem é geralmente referenciado como “ write once, run anywhere ”. Isto é conseguido através da utilização da Java Virtual Machine (JVM) a qual roda numa plataforma específica e interpreta um programa Java para código de máquina específico da plataforma em questão. Como os programas em Java executam sob o controle da JVM, eles podem rodar em qualquer plataforma que possua uma disponível.
  • Multi-threading : Um programa Java pode conter múltiplas threads para realizar várias tarefas em paralelo.

1.3 – Plataformas JAVA

A tecnologia Java está organizada em três plataformas com objetivos específicos:

  • Java 2 Standard Edition (J2SE ): ferramentas e APIs (Application Program Interface) essenciais para qualquer aplicação Java (inclusive para as outras plataformas). É suficiente a utilizarmos se quisermos desenvolver aplicações desktop com ou sem interface gráfica.
  • Java 2 Enterprise Edition (J2EE ): ferramentas e APIs para o desenvolvimento de aplicações distribuídas. Engloba tecnologias tais como RMI, EJB, CORBA, JMS, etc.
  • Java 2 Micro Edition (J2ME ): ferramentas e APIs para o desenvolvimento de aplicações para aparelhos portáteis (palms, celulares, eletrodomésticos).

Neste curso, será suficiente para nós utilizarmos apenas a plataforma J2SE, já que nosso objetivo principal é aprender a linguagem Java.

1.4 – Java 2 System Development Kit (J2SDK)

O J2SDK corresponde ao produto disponibilizado pela SUN que implementa a plataforma J2SE, provendo o ambiente básico necessário para o desenvolvimento de aplicações. Ele pode ser obtido no site da SUN no endereço http://java.sun.com.

O J2SDK consiste de:

 JRE (Java Runtime Environment): ambiente para execução de aplicações  Ferramentas para desenvolvimento: compilador, debugger, gerador de documentação, empacotador JAR, etc  Conjunto de APIs e código fonte das classes

1.5 – A Máquina Virtual Java

O JRE é um conjunto de programas que possibilita executar aplicações Java. O coração do JRE é a Máquina Virtual Java ou Java Virtual Machine (JVM). É a JVM que possibilita uma das características mais impressionantes da linguagem Java, a portabilidade do código. Vamos compreender um pouco como isso funciona

  • No processo de compilação, ao invés do programa ser compilado para código de máquina da plataforma que vai ser executado, o programa é compilado para bytecode
  • O bytecode é genérico, isto é, não é específico para nenhum sistema operacional em particular
  • Quando um programa Java é executado, o arquivo bytecode é interpretado pelo interpretador da tecnologia java, que é denominado Java Virtual Machine. Existe uma JVM diferente para cada plataforma onde a tecnologia Java pode ser executada e deverá existir uma instalada no computador no qual será executado um programa Java. Os browsers, por exemplo, incorporam uma JVM para a execução de applets.

1.7 – Produtos e Terminologias da Tecnologia Java

Produto Descrição Java Virtual Machine (JVM) Interpreta arquivos. class (bytecode) para instruções específicas de plataforma. Java Runtime Environment (JRE) Somente o JVM não é suficiente para uma aplicação Java ser executada. O JRE consiste do JVM mais núcleo de classes da plataforma Java e arquivos de suporte. O JRE é o que deve estar instalado para a execução de uma aplicação Java. Application Program Interface (API) Biblioteca de classes e interfaces que auxiliam no desenvolvimento das aplicações. Java Developer`s Kit (JDK) Corresponde ao nome da tecnologia Java até Novembro de 1999. JDK 1.1 foi a última versão. É composto por : JVM, JRE, compilador, ferramentas e APIs. Java 2 Platform, J2SE (Standard Edition ) É o nome da tecnologia a partir de Novembro de 1999. Corresponde ao JDK 1. na antiga terminologia. É composto por : JVM, JRE, compilador, ferramentas e APIs. Javadoc Corresponde a documentação das APIs. A última versão pode ser encontrada em http://java.sun.com/j2se/1.4.2/docs/api/. A ferramenta Javadoc auxilia na criação da documentação das classes.

2 – Estrutura básica de um programa

O desenvolvimento de aplicações Java sempre é feito através de classes. A definição de uma classe Java deve respeitar a seguinte sintaxe :

class { <Declaração das Variáveis de Instância (Atributos)> <Declaração de Métodos> public static void main( String args[] ) { //corpo principal do programa } }

Exemplo 1 : Modificador de Acesso public class Exemplo1 Nome da Classe { Variável de Instância String mensagem = “Meu primeiro programa em Java!”;

public void Imprime_Msg() { //Mostra um texto na tela Definição de Métodos System.out.println(mensagem); }

public static void main (String [] args) { Imprime_Msg(); Corpo do Programa } }

2.1 – Princípios Básicos da Linguagem

  • Java é case-sensitive
  • As classes, métodos ou blocos de código sempre estarão delimitados por um abrir ( { ) e fechar ( } ) de chaves.
  • Um comando deve sempre ser finalizado por um ponto e vírgula ( ; )
  • Dois tipos de comentário : // Comentário de uma linha e /* Comentário de Várias */
  • Nomes de variáveis, classes e métodos devem sempre começar por letras , $ ou _

2.2 – Membros de uma Classe

As variáveis de instância formam os atributos de um objeto e, juntamente com os métodos, são os elementos básicos para a formação de uma classe. Eles são denominados membros da classe. Os atributos são espaços em memória reservados para armazenar informações durante a execução da classe. Eles consistuem o estado interno de um objeto. Os atributos são inicializados no início da execução da classe e ficam disponíveis para utilização por

2.6 – Compilação e Execução de Programas

Para compilarmos e executarmos um programa Java é necessário que a máquina possua o J2SE instalado.

Para compilarmos um programa na linha de comando, fazemos:

prompt> javac Exemplo1.java

  • Saída do Compilador – prompt>

Se não ocorrer nenhum erro de compilação após a execução do comando, será gerado o arquivo Exemplo1. class. Para o executarmos fazemos :

prompt> java Exemplo1 Perceba que omiti-se a extensão .class Meu primeiro programa em Java! prompt>

Isto irá chamar a JVM que carregará o arquivo Exemplo1. class e tentará chamar seu método main (). Se o Exemplo1. class chama métodos em outras classes, a JVM carregará estas outras classes somente quando for necessário.

2.7 - Passagem de Parâmetros na Linha de Comando

Aplicações Java permitem que se passe parâmetros através da linha de comando. Os parâmetros são separados por espaços em branco. Para passar um parâmetro que contém ele próprio espaços em branco deve-se colocá-lo entre aspas duplas.

Os parâmetros são passados para as aplicações através do vetor de strings do método main. Através do método length pode-se verificar o número de parâmetros passados. O acesso é feito indicando-se a posição no array, sempre iniciando em 0.

Exemplo 2 :

class ParametroLinhaComando { public static void main( String [] args ) { System.out.println(“Meu nome é : ” + args[0] + “e tenho ” + args[1] + " anos." ); System.out.println("Tamanho do segundo parametro : " + args[1].length() + " Número de parametros : " + args.length); } } A seguinte chamada a este programa

prompt> java ParametroLinhaComando Maria 18

gerará a seguinte saída :

prompt> Meu nome é Maria e tenho 18 anos. Tamanho do segundo parametro : 2 Número de parametros : 2

Exercícios :

1 – Siga os passos abaixo para criar e executar sua primeira aplicação Java. Ela possui alguns erros do jeito que está. Tente descobrir e corrigi-los antes de compilar. Caso não consiga, compile e tente descobrir os erros a partir da saída apresentada.

a) Abrir um editor de textos e escrever o programa

class PrimeiraApp { public void main( String args ) { System.out.println(“Primeira aplicação.”) } }

b) Salvar o arquivo dando a ele o mesmo nome da classe e com a extensão “.java”.

c) Compilar o arquivo

prompt> javac PrimeiraApp.java

Se a compilação foi com sucesso, ela gerou um arquivo “PrimeiraApp. class ”, que é o arquivo a ser executado.

d) Execute o programa utilizando o interpretador java

prompt> java PrimeiraApp

2 – Examine o código abaixo e responda as questões que seguem.

public class HelloWorld {

private int age; private String telephone; private String address; public static void main (String[] args){ showMessage(“Hello World!”); } static void showMessage(String msg) { int messageNumber = 0; int messagePriority =; messageNumber = messageNumber + 1; System.out.println(msg + “ ” + messageNumber); }

}

3 – Variáveis e Operadores

Uma variável é um nome simbólico para uma “porção de memória” na qual um valor pode ser armazenado. Toda variável tem as seguintes características :

  • Deve ser declarada antes de ser utilizada;
  • Possui um tipo, um identificador e um escopo;
  • Podem ser locais, quando declaradas dentro de métodos, ou atributos, quando declaradas no corpo da classe;
  • Podem ser inicializadas;

Como Java é uma linguagem fortemente tipada, todas as variáveis devem ser declaradas antes de serem usadas. O tipo de uma variável determina o tipo de informação que pode ser armazenada nela. Variáveis em Java podem ser declaradas como atributos , no corpo da classe, ou podem ser declaradas localmente em qualquer parte da implementação de um método. Variáveis também possuem um escopo , o qual determina onde no programa ela estará visível e poderá ser acessada.

A declaração de variáveis no Java segue a seguinte sintaxe :

tipo identificador [= valor] [, identificador [= valor]];

3.1 – Nome de Variáveis

O nome de uma variável deve começar com uma letra (a-z/A-Z), um underscore ( _ ), ou um sinal de dólar ( $ ). Os caracteres subsequentes podem incluir os dígitos de 0 a 9. Como não existe restrição quanto ao tamanho dos nomes das variáveis, é recomendado que se escolha nomes significativos e que representem a real intenção de uso para a variável ou constante. Resumindo :

  • Convenção : Escolha nomes que indiquem o uso pretendido da variável. Utilize a primeira letra do nome minúscula e a inicial das outras palavras que formam o nome maiúscula. Exemplos : customerName, customerCreditLimit

Exemplos de nomes para variáveis :

Legais ✔ Ilegais ✗

Palavras-Chaves

Toda linguagem tem um grupo de palavras que o compilador reserva para seu próprio uso. Essas palavras-chaves não podem ser usadas como identificadores em seus programas. Em Java, as palavras reservadas são :

String msg = “Exemplos de declaração de variáveis ”; int umInteiro, UmInteiro; float umFloat = 0.5; char caracter = ‘i’; boolean flag = false; umInteiro = 90;

a item_Cost itemCost _itemCost item$Cost itemCost

item#Cost item-Cost item*Cost sem% 2itemCost

abstract do implements package throw boolena double import private throws break else *inner protected transient byte extends instanceof public try case final int *rest *var *cast finally interface return void *catch float long short volatile char for native static while class *future new super *const generic null switch continue *goto operator synchronized default if *outer this

*os itens marcados com asterisco são para implementações futuras da linguagem.

3.2 – Tipos de Dados

Uma variável em Java pode ser de um dos quatro tipos de dados : classes, interfaces, arrays e tipos primitivos. No momento da compilação, o compilador classifica cada variável como uma referência ou um valor primitivo. Uma referência é um ponteiro para algum objeto. As classes, interfaces e os arrays são armazenados como referências. Os tipos primitivos são diretamente armazenados e seu tamanho é fixo. O tamanho e as características de cada tipo primitivo são consistentes entre as plataformas, não há variações dependentes de máquina como em C e C++, um benefício da portabilidade do Java.

Tipos Primitivos de Dados

Java possui 8 tipos primitivos onde 6 são tipos numéricos, um tipo char para caracteres e um tipo booleano.

Categoria Tipo Tamanho

Inteiro byte 8 bits Inteiro short 16 bits Inteiro int 32 bits Inteiro long 64 bits Ponto Flutuante float 32 bits Ponto Flutuante double 64 bits Caracter char 16 bits Lógico boolean true / false

  • Inteiro

Os tipos de dados dessa categoria armazenam valores numéricos inteiros, isto é, números sem casas decimais. O Java possui 4 tipos primitivos desta categoria e o que diferencia um do outro é a sua capacidade de armazenamento.

Java utiliza o padrão UNICODE para armazenar as variáveis do tipo char. Nesse padrão, cada caracter ocupa 16 bits, podendo representar até 32.768 caracteres diferentes.

Os literais dessa categoria podem representar caracteres imprimíveis ou não. Abaixo segue uma relação de alguns deles :

‘a-z’ – Uma letra de a - z ‘\r’ – Retorno de carro ‘A-Z’ – Uma letra de A- Z ‘\b’ – Retrocesso do cursor ‘\n’ – Nova linha ‘\u006F’ – Valores Unicode ‘\”’ – Aspas duplas ‘\t’ – Tabulação ‘\’’ – Aspas simples

  • Lógico

Essa categoria também possui apenas um tipo de dado que é o tipo boolean. Uma variável do tipo boolean pode armazenar apenas dois valores lógicos : true ou false. O Java não associa valores numéricos para true e false como ocorre em outras linguagens de programação.

Tipos de Dados Armazenados por Referência

Os tipos podem ser primitivos ou de referência. Os primitivos representam valores numéricos, caracteres individuais e valores booleanos. Os tipos de referência são representados por Classes, Interfaces e Arrays e podem ser definidos pelo usuário. A principal diferença entre os tipos primitivos e de referência é a memória que deve ser alocada, em tempo de execução, para uma variável de referência, pois o ambiente de execução não sabe quanta memória será necessária.

Na lista de tipos primitivos não encontramos um para tratar de strings de caracteres, isto porque em Java strings são manipuladas através de uma classe específica para isso, a classe String. Veremos mais sobre ela posteriormente.

Todo programa em Java possui dois tipos de memória : principal (stack) e auxiliar (heap). Uma variável do tipo primitivo armazena o seu conteúdo diretamente na memória principal. Já uma variável do tipo referência armazena o seu conteúdo na memória auxiliar e armazena na memória principal apenas o endereço onde foi armazenado o conteúdo da variável. Abaixo segue uma representação gráfica desse esquema : Memória Stack Memória Heap

(Tipo Primitivo) Var

(Tipo Referência) Var

valor

endereço

valor(es)

3.3 – Escopo de Variáveis

O escopo de uma variável é o bloco de código dentro do qual ela é acessível e determina quando a variável é criada e destruída. O bloco é determinado por “ { ” e “ } ”.

De maneira geral, uma variável em Java pode ser um atributo , quando declarada na classe, ou uma variável local a um método, quando declarada dentro deste. Um atributo pode ser acessado por qualquer método de uma classe e só são destruídos quando todo o objeto for. Uma variável local pode ser acessada apenas dentro do método onde ela foi definida.

Mais especificamente, o escopo de uma variável está diretamente relacionada ao bloco onde ela está contida. Uma variável será visível apenas dentro do bloco imediatamente superior a ela. O exemplo abaixo ilustra essa regra :

void metodo () { Início do bloco de x int x;

{ Início do bloco de y int y; x = 10; OK! A variável x está sendo acessada dentro de seu bloco! } Fim do bloco de y

y = 20; ERRO! A variável y está sendo acessada fora de seu bloco!

} Fim do bloco de x

3.4 - Conversões Entre Tipos Primitivos de Dados

A conversão entre tipos primitivos de dados é uma prática bastante comum e necessária, porém, deve-se ter cuidado ao efetuá-la para não perder informações e obter um resultado não esperado.

Java automaticamente converte um valor de um tipo numérico para outro tipo de maior capacidade de armazenamento. Por exemplo, se tentarmos atribuir um byte para um short, o compilador automaticamente converte o byte em short antes de realizar a atribuição. O esquema abaixo simboliza as conversões automáticas :

O contrário não é verdadeiro. Para efetuarmos uma conversão de um tipo maior para outro de menor capacidade é necessário usar um mecanismo chamado type cast , caso contrário um erro será lançado. Isso é feito colocando-se o tipo pretendido para conversão entre parênteses em frente da expressão ou variável. Quando fazemos isso, forçamos o compilador a realizar a conversão. É importante estar ciente que isto pode resultar em perda de dados e em resultados imprevisíveis. Exemplo :

byte b1 = 127, b2 = 127, b3;

byte short^ int

long

 Se a operação envolve um long em um dos argumentos do operador, então o argumento do outro lado é promovido para long e o resultado também será um long.

  • Operadores Relacionais

Operador Nome Exemplo Resultado = = Igual x = = 10 != Diferente 3 != 2 true < Menor 10 < 10 false

Maior 10 > 6 true = Maior ou igual 3 >= 3 true <= Menor ou igual 7 <= 6 false

  • Operadores Lógicos

Operador Nome Exemplo Resultado && AND (0 < 2) && ( 10 > 5) true || OR ( 10 >11 ) || (10 < 12 ) true ! NOT !( 1= = 4 ) true ^ XOR ( 1!= 0) ^ ( 2< 3 ) false

  • Atribuição Composta

Operador Nome Exemplo (x = 10;) Resultado += mais igual x += 10; 20 -= menos igual x -= 10; 10 *= vezes igual x *= 10; 100 %= módulo igual x %= 10; 0 /= dividido igual x /= 10; 0

  • Incremento e Decremento

 Operador ++ incrementa de um. Ex : int var1 = 4; var1++; //var1 = 5  Operador -- decrementa de um Ex : int var1 = 4; var1--; //var1 = 3  Este decremento ou incremento pode ser feito antes ou depois da utilização da variável. Colocando–se antes, primeiramente será somado/subtraído 1 da variável e depois ela será utilizada. Ao contrário, se o operador vier após a variável, primeiramente ela será utilizada na expressão e o incremento ou decremento será feito depois disso. Ex : int var1 = 2, var2; var2 = var1++; //var2 vale 2 var2 = ++var1; //var2 vale 3

Precedência de Operadores

A precedência refere-se a ordem na qual os operadores são executados. Operadores de mesma precedência são executados de acordo com sua associatividade. Por exemplo, considere a seguinte linha de código :

int j = 3 * 10 % 7;

Os operadores * e % possuem a mesma precedência e associatividade da esquerda para direita. Assim, o * é executado primeiro, produzindo o resultado 2. Se fosse colocado um parênteses para modificar a precedência desta forma int j = 3 * (10 % 7), o resultado final seria completamente diferente ( 9 ).

A tabela baixo mostra os operadores Java em ordem de precedência, onde a linha 1 tem a mais alta precedência. Com exceção dos operadores unários, condicionais e o operador de atribuição, os quais são associativos da direita para esquerda, todos os outros operadores com a mesma precedência são executados da esquerda para direita.

Precedência Operador Comentários Associatividade 1 ++ --! Operadores Unários R 2 * / % Multi., Divi., Resto L 3 + - Add, Sub. L 4 << >> Shift L 5 < > <= >= Relacionais L 6 = = != Igualdade L 7 & Bit/Loginal AND L 8 ^ XOR (ou exclusivo) L 9 | Bit/Logical OR L 10 && AND L 11 || OR L 12 ?: Condicional R 13 = op= Atribuição R

R = Direita L = Esquerda

3.6 – Constantes

Uma constante pode tanto ser definida como um atributo de classe como uma variável local. Uma constante uma vez que foi declarada e atribuído um valor para a mesma, não é permitido que outra atribuição seja efetuada, ocasionando um erro de compilação caso isso ocorra. A atribuição do valor inicial pode ser feita no momento da declaração, ou posteriormente em outra parte do programa.

Para declarar uma variável do tipo constante, devemos utilizar o modificador final dessa forma :

final [= valor];

Declare constantes com nomes descritivos, escritos com todas as letras em maiúsculo. Separe nomes internos com underscores ( _ ). Exemplos :

final double MIN_WIDTH = 100.0; final long MAX_NUMBER_OF_TIMES;