




























































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Um tutorial bom para quem pretende programar em Java.
Tipologia: Notas de estudo
1 / 126
Esta página não é visível na pré-visualização
Não perca as partes importantes!





























































































”
a
a
Ó Copyright 1996- IC - UNICAMP. Este texto e documentos relacionados são protegidos por copyright. Esta publicação é apresentada como está sem garantia de erros e mudanças, sejam nos endereços (URL’s) , texto ou do código reutilizado nos programas exemplo. Para obter a última versão deste texto consulte http://www.dcc.unicamp.br/~aacesta ou http://www.dcc.unicamp.br
Marcas Registradas:
Sun, o logotipo da Sun, Sun Microsystems, Solaris, HotJava e Java são marcas registradas de Sun Microsystems, Inc. nos Estados Unidos e em alguns outros países. O personagem “Duke” é marca registrada de Sun Microsystems. UNIX é marca registrada nos Estados Unidos e outros países, exclusivamente licenciada por X/Open Conpany, Ltd.. Netscape Navigator é marca registrada de: “NetscapeErro! Indicador não definido. Communications Corporation”.
Este texto faz parte de um estudo comparativo de linguagens de programação orientadas a objetos. O conteúdo deste estudo também está disponível na “World Wide Web”, área multímidia da internet, sob o endereço http://www.dcc.unicamp.br/~aacesta. Neste endereço, você pode complementar seu aprendizado, rodando exercícios iterativos, acessando “links” para outros hipertextos sobre linguagens de programação, vendo exemplos de programas e interagindo com aplicações para a internet. A diferença entre este estudo e outros textos que você possa encontrar sobre o mesmo assunto é o caráter prático. Exemplos completos, dicas de programação, explicações sobre detalhes normalmente ignorados em livros, tornarão seu aprendizado mais fácil, principalmente na segunda parte onde tratamos da construção de aplicações para a internet. No inicio, os exemplos podem ser considerados fáceis, mas eles vão se complicando cada vez mais de modo que é importante que o leitor acompanhe o texto fazendo os exercícios. Forneceremos uma série de idéias de programas simples para que você possa testar seu conhecimento. Estes programas simples podem ser melhorados através do uso de interfaces gráficas, assunto que não é coberto neste tutorial.
Qualquer leitor que tenha experiência com pelo menos uma linguagem de programação.
DIAGRAMAÇÃO DESTE TEXTO
Apesar de Java ser uma linguagem que serve para vários propósitos, o seu sucesso atual (época do seu lançamento) se deve a possibilidade de elaboração de aplicações para a internet. Dada a importância deste aspecto da linguagem, este texto está organizado de maneira semelhante as páginas encontradas na WWW, frequentemente você encontrará diagramas como o seguinte:
http://www.dcc.unicamp.br/~aacesta “Estudo comparativo de linguagens de programação orientadas a objetos”. Nesta página você encontrará tutoriais sobre diversas linguagens orientadas a objetos, dentre elas: C++, Modula-3, Java. Quanto a Java, você terá a oportunidade de ver código de programas e testá-los, além de poder adquirir a versão mais nova deste texto.Encontrará também links para sites sobre orientação a objetos.
Este diagrama representa um hipertexto que pode ser acessado de modo a complementar seu estudo. A parte escrita em letra maior é o endereço, o texto em itálico faz um resumo do conteúdo desta página. Usando estes “links” ou diagramas você encontrará uma maneira ordenada de aprender sem se perder no mar de informações da internet.
URL: “Uniform Resource Locator”, é o endereço de um computador na internet
O diagrama acima aparecerá toda vez que introduzirmos uma palavra nova. Caso você encontre alguma palavra desconhecida, basta usar o índice remissivo para obter sua definição. É importante lembrar que os hipertextos citados neste tutorial, não são de nossa responsabilidade. Como eles estão sujeitos a mudanças, contamos com a sua ajuda para efetuarmos atualizações, conte você também com a nossa ajuda na internet. Os programas exemplo deste texto são apresentados em caixas retangulares, e todo código é escrito em fonte diferente da usada neste texto comum. O trechos de código que aparecem
Um ambiente de programação Java é normalmente composto de um kit de desenvolvimento de aplicações Java e um “browser compatível com esta linguagem (recomendável). Se você não tem acesso a esse ambiente de programação, tente estes endereços:
“DOWNLOAD” JAVA
http://Java.sun.com
. Raiz do hipertexto montado pelos criadores da linguagem. Sob este endereço você pode obter o compilador e outras ferramentas de desenvolvimento de aplicações Java para a sua plataforma de programação. Fique atento! Outros desenvolvedores estão criando ambientes de programação Java.
“DOWNLOAD” “BROWSERS”
http://www.netscape.com Raiz do hipertexto montado pelos criadores do Netscape Navigator Ô. Sob este endereço você pode obter o browser “Java compatible” da “Netscape Comunications INC’.. Outros desenvolvedores estão lançando “browsers” compatíveis com Java.
“DOWNLOAD” “BROWSERS”
http://www.microsoft.com A microsoft Ô licenciou a tecnologia Java e a incorporou em seu novo browser: Internet Explorer versão 3.0 ou superior.
BROWSERS: São uma categoria de programas que permitem você visualizar um documento criado em um certo padrão, no caso html (hipertext markup language). Atualmente os browsers tem se tornado complexos devido a quantidade de padrões existentes (ex. imagens .gif .jpg, etc). A linguagem Java pode contribuir para minimizar esta complexidade.
CARACTERÍSTICAS DA LINGUAGEM
Parecida com C, C++:
Java tem a aparência de C ou de C++, embora a filosofia da linguagem seja diferente. Por este motivo estaremos frequentemente fazendo comparações alguma destas linguagens. O leitor que programa em qualquer uma delas, ou em uma linguagem orientada a objetos, se sentirá mais a vontade e se tornará um bom programador Java em menos tempo. Java também possui características herdadas de muitas outras linguagens de programação: Objective-C, Smalltalk, Eiffel, Modula-3, etc. Muitas das características desta linguagem não são totalmente novas. Java é uma feliz união de tecnologias testadas por vários centros de pesquisa e desenvolvimento de software.
Compilada:
Um programa em Java é compilado para o chamado “byte-code”, que é próximo as instruções de máquina, mas não de uma máquina real. O “byte-code” é um código de uma máquina virtual idealizada pelos criadores da linguagem. Por isso Java pode ser mais rápida do que se fosse simplesmente interpretada.
Portável:
Java foi criada para ser portável. O “byte-code” gerado pelo compilador para a sua aplicação específica pode ser transportado entre plataformas distintas que suportam Java (Solaris 2.3Ò, Windows-NTÒ, Windows-95Ò, Mac/Os etc). Não é necessário recompilar um programa para que ele rode numa máquina e sistema diferente, ao contrário do que acontece por exemplo com programas escritos em C e outras linguagens.
Esta portabilidade é importante para a criação de aplicações para a heterogênea internet. Muitos d os programas exemplo deste tutorial foram escritos e compilados numa plataforma Windows-95Ò e rodaram perfeitamente quando simplesmente copiados para uma plataforma Solaris 2.3Ò. Em Java um inteiro por exemplo, tem sempre 32 bits, independentemente da arquitetura. O próprio compilador Java é escrito em Java, de modo que ele é portável para qualquer sistema que possua o interpretador de “byte-codes”. Um exemplo de programa escrito em Java é o browser hotjava.
Orientada a Objetos:
A portabilidade é uma das características que se inclui nos objetivos almejados por uma linguagem orientada a objetos. Em Java ela foi obtida de maneira inovadora com relação ao grupo atual de linguagens orientadas a objetos. Java suporta herança, mas não herança múltipla. A ausência de herança múltipla pode ser compensada pelo uso de herança e interfaces, onde uma classe herda o comportamento de sua superclasse além de oferecer uma implementação para uma ou mais interfaces. Java permite a criação de classes abstratas. Outra característica importante em linguagens orientadas a objetos é a segurança. Dada a sua importância o tópico foi escrito a parte.
Segura:
A presença de coleta automática de lixo, evita erros comuns que os programadores cometem quando são obrigados a gerenciar diretamente a memória (C , C++, Pascal ). A eliminação do uso de ponteiros, em favor do uso de vetores, objetos e outras estruturas substitutivas traz benefícios em termos de segurança. O programador é proibido de obter acesso a memória que não pertence ao seu programa, além de não ter chances de cometer erros comuns tais como “reference aliasing” e uso indevido de aritmética de ponteiros. Estas medidas são particularmente úteis quando pensarmos em aplicações comerciais desenvolvidas para a internet. Ser “strongly typed” também é uma vantagem em termos de segurança, que está aliada a eliminação de conversões implícitas de tipos de C++. A presença de mecanismos de tratamento de exceções torna as aplicações mais robustas, não permitindo que elas abortem, mesmo quando rodando sob condições anormais. O tratamento de exceções será útil na segunda parte para modelar situações tais como falhas de transmissão e formatos incompatíveis de arquivos.
Suporta concorrência:
A linguagem permite a criação de maneira fácil, de vários “threads” de execução. Este tópico será útil quando você estudar animações, e é particularmente poderoso nos ambientes em que aplicações Java são suportadas, ambientes estes que geralmente podem mapear os threads da linguagem em processamento paralelo real.
Eficiente:
Como Java foi criada para ser usada em computadores pequenos, ela exige pouco espaço, pouca memória. Java é muito mais eficiente que grande parte das linguagens de “scripting” existentes, embora seja cerca de 20 vezes mais lenta que C, o que não é um marco definitivo. Com a evolução da linguagem, serão criados geradores de “byte-codes” cada vez mais otimizados que trarão as marcas de performance da linguagem mais próximas das de C++ e C. Além disso um dia
PROGRAMAÇÃO ORIENTADA A OBJETOS
A leitura deste hipertexto é fortemente recomendada para os programadores que tem “C” ou ”C++” como sua principal linguagem de programação, mesmo antes de iniciar a leitura deste tutorial:
“DOWNLOAD” “BROWSERS”
http://www.dcc.unicamp.br/~aacesta/java/group.html (Clique em brewing Java tutorial) “Brewing Java: A Tutorial”, Um tutorial de Java que segue o estilo do livro inicial sobre “C”, escrito por Kernighan & Ritchie [[2]], é a referência básica para este texto. Cobre principalmente sintaxe de loops e outros assuntos fáceis não abordados aqui.
Iniciaremos com um pouquinho de teoria sobre orientação a objetos. Se você quiser algum hipertexto para aprofundamento ou para ler em paralelo com esta introdução sobre classes e objetos e use:
“TUTORIAIS”
http://www.dcc.unicamp.br/~aacesta/java/group.html “Esta é a homepage do grupo de estudos em Java”. Você vai encontrar links atualizados para diversos lugares na internet onde se estuda Java.
Uma classe é um tipo definido pelo usuário que contém o molde, a especificação para os objetos, algo mais ou menos como o tipo inteiro contém o molde para as variáveis declaradas como inteiros. A classe envolve, associa, funções e dados, controlando o acesso a estes, definí-la implica em especificar os seus atributos (dados) e seus métodos (funções). Um programa que utiliza uma interface controladora de um motor elétrico provavelmente definiria a classe motor. Os atributos desta classe seriam: temperatura, velocidade, tensão aplicada. Estes provavelmente seriam representados na classe por tipos como int ou float. Os métodos desta classe seriam funções para alterar a velocidade, ler a temperatura, etc. Um programa editor de textos definiria a classe parágrafo que teria como um de seus atributos uma String ou um vetor de Strings, e como métodos, funções que operam sobre estas strings. Quando um novo parágrafo é digitado no texto, o editor cria a partir da classe Parágrafo um objeto contendo as informações particulares do novo texto. Isto se chama instanciação ou criação do objeto.
Suponha um programa que controla um motor elétrico através de uma saída serial. A velocidade do motor é proporcional a tensão aplicada e esta proporcional aos bits que vão para saída serial e passam por um conversor digital analógico. Vamos abstrair todos estes detalhes por enquanto e modelar somente a interface do motor como uma classe, a pergunta é que métodos e que atributos deve ter nossa classe, que argumentos e valores de retorno devem ter os métodos?
Representação da velocidade:
A velocidade do motor será representada por um atributo inteiro (int). Usaremos a faixa de bits que precisarmos, caso o valor de bits necessário não possa ser fornecido pelo tipo , usaremos então o tipo long, isto depende do conversor digital analógico utilizado.
Representação da saída serial:
O motor precisa conhecer a sua saída serial, a sua ligação com o “motor do mundo real”. Suponha uma representação em hexadecimal do atributo endereço de porta serial, um possível nome para o atributo: enderecomotor. Não se preocupe em saber como usar a representação hexadecimal.
Alteração do valor da velocidade:
Internamente o usuário da classe motor pode desejar alterar a velocidade, cria-se então o método: public void altera_velocidade(int novav);. O código anterior corresponde ao cabeçalho do método ele é definido junto com a classe motor, associado a ela. O valor de retorno da função que “implementa” o método é void, poderia ser criado um valor de retorno (boolean) que indicasse se o valor de velocidade era permitido e foi alterado ou não era permitido e portanto não foi alterado. O ato de invocar um método também é chamado de passar uma mensagem para o objeto que está executando este método. Não faz sentido usar, chamar, este método separado de uma variável do tipo motor, mas então porque na lista de argumentos da função não se encontra um motor? Este pensamento reflete a maneira de associar dados e código (funções) das linguagens procedurais. Em linguagens orientadas a objetos o código e os dados são ligados de forma diferente, a própria declaração de um tipo definido pelo usuário já engloba as declarações das funções inerentes a este tipo, isto será explicado em 1.2. O objeto ao qual é aplicado o método é passado de outra forma. Note que não fornecemos o código do método, isto não é importante, por hora a preocupação é com a interface definida pela classe: seus cabeçalhos de métodos e atributos. Apenas pense que sua interface deve ser flexível de modo a não apresentar entraves para a criação do código que seria feita numa outra etapa. Nesta etapa teríamos que imaginar que o valor numérico da velocidade deve ir para o conversor onde irá se transformar numa diferença de potencial a ser aplicada nos terminais do motor, etc.
Um diagrama simplificado da classe motor com os atributos e métodos:
Este e outros diagramas deste texto foram elaborados com uma ferramenta case para “object oriented modeling and design” segundo a metodologia descrita em [[1]]
Exercícios:
Lembre-se de algum programa em que você trabalhou, cite que tipos de classes seriam criadas se esse programa fosse escrito em Java, que atributos e que métodos estariam associados a esses objetos?
O leitor não acostumado com o paradigma de orientação a objetos, pode achar estranhas as afirmações acima, e a pergunta mais comum neste momento é: “Mas então como você sabe aonde vai começar o programa?”. Antes da resposta a essa pergunta, leia o primeiro programa exemplo, que é semelhante ao primeiro programa em C, “Hello World”, presente em [[2]].
Este exemplo visa apresentar um programa simples para imprimir uma mensagem na tela, este provavelmente será seu primeiro programa em Java.
COMPILANDO UM PRIMEIRO PROGRAMA:
1 -Certifique-se de ter adicionado a sua lista de path’s o path do compilador e interpretador Java. Javac e Java respectivamente.
2 -Crie o arquivo ao lado em um diretório qualquer (“folder” para usuários mac) e salve com o nome: HelloInternet.Java
3 -Chame o compilador Java para este arquivo: Javac HelloInternet.Java
4 -Seu diretório deve ter recebido um novo arquivo após essa compilação: HelloInternet.class
5 -Chame o interpretador Java para este arquivo (omita a extensão .class de arquivo): Java HelloInternet
6 -Observe o resultado na tela: Hello Internet!
//Comentario de uma linha
public class HelloInternet {
public static void main (String args[]) {
System.out.println("Hello Internet!");
}
Hello Internet!
Resolvendo os eventuais problemas: Compile este programa. Você pode decidir por não prosseguir enquanto não compilá-lo. Se você for como eu, e principalmente se tiver digitado tudo ao envés de usar “copy and paste”, é bem provável que ele não compile, se isto ocorrer, leia atentamente o programa. Você não esqueceu o ponto e vírgula? E as chaves? Hellointernet começa com letra maiúscula, e isso faz diferença^1 , você foi coerente com a convenção adotada de letras maiúsculas e minúsculas para seus identificadores? Você estava no mesmo diretório de HelloInternet.java quando chamou o compilador? E quando chamou o interpretador? Também? Se ainda não der certo, não se desespere, leia as explicações passo a passo do programa e depois recorra a um usuário mais experiente. Normalmente a Java é muito fácil de se programar, e você precisará de pouca ajuda, o seu interesse o fará cada vez mais familiar com esta linguagem.
Explicação passo a passo do programa exemplo:
//Comentario de uma linha
(^1) Identificadores em letras maiúsculas e minúsculas são diferentes, a linguagem é “case-sensitive”.
Comentários em Java seguem a mesma sintaxe de C++, “//” inicia uma linha de comentário, todo o restante da linha é ignorado. Existe também um outro tipo de comentário formado por /* Insira aqui o texto a ser ignorado */ , este tipo de comentário pode ser intercalado em uma linha de código. Comentários são tratados como espaços em branco.
public class HelloInternet { class é a palavra reservada que marca o inicio da declaração de uma classe. Public é um especificador, por enquanto guarde public class como o início da declaração de uma classe. Toda classes serão declaradas assim até o tópico encapsulamento de atributos e métodos com packagesencapsulamento de classes com packages.
HelloInternet É o nome dado a esta classe. O “abre chaves” marca o início das declarações da classe que são os atributos e métodos. Esta classe só possui uma declaração, a do método main, note que um método, ao contrário de C++, só pode ser declarado {internamente} a classe a qual pertence, evitando as confusões sobre “escopo”. Desta forma, todo pedaço de código em Java deve pertencer ao abre chaves, fecha chaves da definição de uma classe.
public static void main (String args[]) { System.out.println("Hello Internet!"); }
public É um qualificador do método que indica que este é acessível externamente a esta classe (para outras classes que eventualmente seriam criadas), não se preocupe com ele agora, apenas declare todos os métodos como public. Voltaremos a este assunto em 1.5. encapsulando métodos e atributos
static É um outro qualificador ou “specifier”, que indica que o método deve ser compartilhado por todos os objetos que são criados a partir desta classe. Os métodos static podem ser invocados, mesmo quando não foi criado nenhum objeto para a classe, para tal deve-se seguir a sintaxe:
Curiosidade:
Se você gosta de paradoxos e já conhece um pouco de orientação a objetos, pense que se o método main tivesse que ser chamado para um objeto (o que não é o caso) este objeto teria que ter sido criado em algum outro lugar então este lugar seria o início do programa e main^1 deixaria de ter esta finalidade. A linguagem de programação Eiffel adota uma técnica diferente para resolver este problema: todo programa começa com a criação de um objeto (e não mais a chamada automática de main), este objeto é chamado ROOT, ele pode conter atributos que são inicializados e um método de inicialização, construtor do objeto, que é o início do código do programa.
void
(^1) main, do inglês: Principal.
No programa anterior, não observamos a criação de nenhum objeto, apenas a declaração da classe HelloInternet que continha o método main. O nosso programa funcionou, porque o método main não precisa de um objeto específico para ser invocado. Este exemplo declara uma classe (Circulo) e em seguida cria um objeto deste tipo em main e altera o conteúdo desta variável. Uma classe é parecida com um record de Pascal, a nossa representa um círculo com os atributos raio e x , y, que são coordenadas cartesianas. Note que este objeto não possui métodos ainda. A classe círculo é especificada em um arquivo separado do arquivo da classe que contém o método main (início do programa), um arquivo neste texto é representado pelo retângulo envolvendo um trecho de código, até o tópico encapsulamento de classes com packages cada classe será especificada em um arquivo. É importante entender este exemplo, quando você estudar interfaces gráficas, poderá usar a classe círculo pré-definida na linguagem para desenhar círculos que se movem na tela. Embora não tenhamos explicado com detalhes os tipos básicos da linguagem, usaremos neste exemplo o tipo float (real), e nas explicações o tipo String e o tipo int (inteiro). No final deste tópico forneceremos uma explicação detalhada sobre tipos.
//Classe circulo, arquivo Circulo.Java
public class Circulo { //so atributos entre as chaves
public float raio; //atributo raio do circulo public float x; //posicoes em coordenadas cartesianas public float y;
}
//Classe principal, Arquivo Principal.Java
public class Principal {
public static void main(String args[]) { Circulo umcirc; //declaracao de uma variavel circulo no metodo main. umcirc=new Circulo(); //alocacao dessa variavel System.out.println("("+umcirc.x+","+umcirc.y+","+umcirc.raio+")"); umcirc.x=umcirc.x+17; System.out.println("("+umcirc.x+","+umcirc.y+","+umcirc.raio+")"); }
}
Porque os matemáticos não gostam de C, C++, Java e Basic:
A declaração umcirc.x=umcirc.x+17 presente em nosso programa deixa os matemáticos doidos pois de você subtrair umcirc.x de cada um dos lados da “igualdade” a expressão se torna 0=17. Ocorre que = não é o operador de teste de igualdade e sim de atribuição, ele tem a mesma função do := de Pascal a qual os matemáticos adoram. O operador de teste de igualdade em Java é : ==
Mais sobre arquivos:
Como pode ser observado, cada arquivo texto do programa está envolvido em uma moldura retangular. Neste caso as duas classes criadas: Circulo e Principal, estão em arquivos separados. A sequência de alterações em seu diretório ou folder é:
Inicio: Após Javac AsDuasJuntas.Java:
O compilador deve ser chamado para ambos arquivos. Ou você pode usar os chamados “wildcards”^1 javac *.java.
Sem Includes:
(^1) Wild-Card, do inglês: Coringa , carta de baralho. O * substitui os nomes de todos os arquivos, assim como o coringa
pode susbtituir todas as cartas em jogos de baralho.
A desalocação do objeto é feita pela linguagem, (“automatic garbage collection”), você não precisa se preocupar com ela. Após o fecha chaves de main, a memória do objeto umcirc já pode ser liberada, o que normalmente não ocorre de imediato, pois o ambiente da linguagem executa um “tread” em baixa prioridade que libera de tempos em tempos os espaços inutilizados de memória, tirando proveito por exemplo de eventuais pausas de iteração do usuário com o programa. Por executar em um “tread” entenda paralelamente ou quase paralelamente, voltaremos a este tópico mais adiante.
Acesso aos atributos e métodos e alterações dos atributos:
O acesso aos atributos da variável (objeto) umcirc deve ser feito usando o nome do objeto e o nome do atributo deste, separados por um ponto: umcirc.raio=10.0;. Note que raio sozinho não faz sentido no programa, precisa-se especificar de que objeto se deseja alterar ou obter o raio. A sintaxe de chamadas de métodos é semelhante a sintaxe descrita acima, só que ao envés de nome do atributo temos o nome do método seguido dos parênteses que podem conter zero ou mais argumentos. Volte ao primeiro programa (HelloInternet) e verifique a declaração do método main, onde chamamos o método println() para o objeto System.out.
Imprimindo variáveis do tipo float e inteiro (int) na tela:
System.out.println("("+umcirc.x+","+umcirc.y+","+umcirc.raio+")"); O argumento de println que conhecemos é uma única variável do tipo String, no entanto o código acima mistura nos argumentos desse método os seguintes elementos: Strings: “(“, operadores : +, e variáveis float: umcirc.y. Fica muito fácil de você entender porque isto funciona se pensar que + é também operador de concatenação de Strings e que os argumentos int ou float e de outros tipos básicos desse método são convertidos para Strings.
Importante aos que não programam em C ou C++, os operadores = e ==:
Em Java, C, e C++ o operador = (igual) tem a função de atribuição e o operador == (igual igual) tem a função de comparação entre valores, retornando o valor booleano verdadeiro se estes valores forem idênticos. Alguns podem não achar esta escolha de operadores sensata, principalmente os matemáticos, mas com um pouco de uso da linguagem ela se tornará automática.
CURIOSIDADE (só para programadores C e C++), eliminação do problema que ocorre em C e C++ com os operadores = e == :
Em C, C++ e também em Java é permitido escrever: int i,j,k; i=0; j=k=i+3; //final, j vale 3, k vale 3 e i continua valendo 0 Essas atribuições em cadeia permitem escrever código mais compacto, elas fazem sentido porque atribuições nessas linguagens possuem valores, assim k=i+3; no final tem o valor de k que é igual a i+3. O valor de j=... .no nosso exemplo é descartado, ignorado pois não há nada a esquerda desta atribuição. Em C e C++ existe um problema grave que é frequentemente uma cilada para os programadores Pascal e outros. O problema é que nessas duas linguagens (C e C++) não existe o tipo boolean, no lugar deste tipo é usado o tipo int (inteiro), onde 1 significa verdadeiro e 0 falso. Assim em C e C++ (mas não em Java) a==a tem valor 1 com o significado dado pelo programador de true ou verdadeiro,
mas a=1+0; também tem como resultado o valor 1, mas agora com o significado inteiro, numérico. O compilador não sabe distinguir entre os significados numérico e booleano. Essa ambiguidade faz com que programadores (C ou C++) não acostumados com esta convenção de operadores = e ==, incorram no erro de escrever j=1 quando na verdade queriam dizer j==1, mas para o compilador ambas as expressões tem valor inteiro de modo que se esse engano ocorrer num teste de parada de um loop, pode ocorrer que ele nunca pare, pois 1 tem o mesmo valor de true. Java elimina este tipo de erro introduzindo o tipo boolean com os valores true e false, que não tem nenhuma relação com o tipo int e qualquer outros tipos.
(para nossa sorte os tipos básicos são os mesmos para qualquer ambiente de programação Java, porque a linguagem é portável):
char Caractere UNICODE 16-bit
O tipo char (caractere UNICODE) é representado com 16-bits sem sinal, o que permite endereçar de 0 a 65535. O objetivo desta opção é permitir internacionalização da linguagem, bem como a padronização. Constantes do tipo caractere aparecem entre apóstrofes: ‘a’, ‘ 1 ’, ‘$’.
Tabela de caracteres especiais: (ao contrário de C/C++, não existe um caractere especial para o som de beep ou bell ) Representação visual: Função, significado:
\n Pula linha, linefeed \r Retorno de carro \b Backspace \t Tabulação \f Formfeed \’ Apóstrofe \” Aspas \ Barra inversa \u223d Caractere unicode \gfa Octal \fff Hexadecimal
boolean Valor true ou false, diferente representação de C++, sem conversão em outros tipos.
O tipo boolean não tem relação nenhuma com outros tipos (coerção). Eliminando problemas que surgiram por exemplo em C++ que usa inteiros para representar valores booleanos. Os possíveis valores são true e false que são os resultado dos testes lógicos. boolean pertenceAoConjunto; //declara variavel pertenceAoConjunto=true; //exemplo
byte Inteiro 8-bit , complemento de 2, faixa:-128 até 127 short (^) Inteiro 16-bit, complemento de 2, faixa:-32768 até 32767 int (^) Inteiro 32-bit, complemento de 2, faixa:-2147483648 até 2147483647
long Inteiro 64-bit, compl. de 2, faixa:-9223372036854775808 até 9223372036854775807