Ponteiro em Java

[color=green]Oh… Não é sobre as conversas de antes de todos. Mas posto aqui neste post, pois vejo que mesmo o post estando antigo, temos várias cabeças com várias opiniões interessantes que já deram a este, um grande conteúdo em conhecimento sobre o assunto.

Vocês mais velhos na linguagem, entendem melhor sobre a linguagem. DE NOVO: Eu não tô aqui para reviver a MESMA QUESTÃO que foi iniciada neste post, estou aqui para aproveitar o grande conteúdo deste, e adicionar algo mais.

Estou ciente de que posts antigos não devem ser revividos. Mas pensem neste papilo antigo como conhecimento. Um conhecimento que foi discutido durante tempos e tempos por profissionais de todas as áreas e muitos que conhecem a essência da linguagem de programação. Então não vejo motivo para não aproveitar este caderninho de anotações e incrementar alguma coisa nele. Acredito que conhecimento não deve ser jogado fóra assim, de maneira tão “crua”. Por isso não acho necessidade em criar um novo post sobre isso. Provavelmente iam vir falando: “lá vem de novo outro com a mesma 2$¨”. Então também foi por isso.

Mas antes que alguém venha com argumentos contra os meus, peço logo desculpa por estar sendo talvez um ignorante e ter achado que poderia aproveitar isso.[/color]

------------------------ MINHA DÚVIDA -------------------------

Acredito que muitos aqui já leram o livro “Java como programar 6ª edição” da editora Deitel. Eu estava começando a estudar o uso da classe RandomAccessFile e notei que na página 526, a classe de nome WriteRandomFile, na linha 84, tem um comando que de acordo com o livro (o autor e, não eu) fala que este comando tem um ponteiro ou uma espécie de ponteiro (eu não sei o que ele quis dizer, essa é minha dúvida. Afinal eu não entendo de ponteiros muito bem). Eu não entendi pois deus e o mundo diz que não existem ponteiros em Java. Eu concordo (pelos argumentos apresentados aqui por todos), mas, eu gostaria de entender qual a intenção do livro de dizer isso por exemplo:

[color=blue]“O aplicativo nas figuras 14.26-14.27 grava os dados em um arquivo que é aberto com o modo rw (para leitura e gravação). Ele utiliza o método seek RandomAcessFile para posicionar a localização exata no arquivo em que um registro das informações é armazenado. O método seek configura o ponteiro de posição no arquivo, como um local específico no arquivo relativo ao começo do arquivo, e o método RandomAcessAccountRecord write gera saída dos dados na posição atual no arquivo. O programa supõe que o usuário não insere números de conta duplicados.”[/color]

Depois no segundo parágrafo da página 528, ele diz isso:

[color=blue]“As linhas 84-85 chamam o método RandomAcessFile seek para posicionar o ponteiro de posição no arquivo na localização do objeto output de acordo com o byte calculado por (accountNumber - 1) * RandomAccessAccountRecord.SIZE. Os números de conta nesse programa estão no intervalor de 1-100. Subtraímos um do número de conta ao calcular a localização de bytes do registro.”[/color]

Olha eu não tô querendo colocar o código da classe toda pois acredito que vocês têm esse livro. Mas eu vou colocar como está a linha 84:

output.seek( ( accountNumber - 1) * RandomAcessAccountRecord.SIZE );

output é um objeto RandomAcessFile.
accountNumber é uma variável criada que receberá um número de 1 a 100 do usuário que deseja criar uma conta.
RandomAcessAccountRecord é uma classe criada anteriormente cujo sua função é ler um registro e/ou armazenar dados ao arquivo (que é gerado depois).

Eu no começo pensei que ele multiplicava, já não tinha entendido. Mas quando ele mencionou a palavra ponteiro, aí piorou…

Se alguém puder me ajudar, eu ficaria realmente feliz e grato. Tô aqui para tirar dúvida, não gerar brigas e etc…

Obrigado pela atenção de todos.

[quote=saoj] public class Exe { int numero; Exe teste1; Exe teste2; }

Java tem ponteiro sim, só que aqui o nome é referencia. Vc só não tem acesso direto ao endereço de memória que ele representa, e por isso vc não pode manipular esse endereço.

A sun pode, através da class sun.misc.Unsafe.

[/quote]

A sun podia liberar isso para nós…

Troque a palavra “ponteiro” (a tradução é realmente infeliz) por “cursor” ou “índice”. Você fica mais à vontade?

[quote=entanglement][quote=Plig]
Eu no começo pensei que ele multiplicava, já não tinha entendido. Mas quando ele mencionou a palavra ponteiro, aí piorou…
[/quote]

Troque a palavra “ponteiro” (a tradução é realmente infeliz) por “cursor” ou “índice”. Você fica mais à vontade?
[/quote]

Acho que apontador seria mais indicado.

[quote=entanglement][quote=Plig]
Eu no começo pensei que ele multiplicava, já não tinha entendido. Mas quando ele mencionou a palavra ponteiro, aí piorou…
[/quote]

Troque a palavra “ponteiro” (a tradução é realmente infeliz) por “cursor” ou “índice”. Você fica mais à vontade?
[/quote]

Oh! Com certeza! Brigado pela ajuda entanglement!!! Tipo, bem… Eu acho que entendi… Na verdade ele meio que estaria escolhendo a posição de cada registro no arquivo? Seria isso?

E qual o motivo dele ter multiplicado todo aquele fuzoê ali? Ele diminuiu o número da conta do usuário por um, e logo em seguida, multiplicou isso por 72 (SIZE tem como valor 72). Um amigo meu me disse que esse 72 serve como valor máximo de cada registro. O livro diz que isso serve como consulta rápida e que os registros ficam melhor organizados e mais fáceis de serem achados em um arquivo (O assunto é Arquivo de acesso aleatório). Mas novamente, não entendi o cálculo que ele fez. De acordo com isso, o resultado seria x - 1 * 72 (onde x está entre 1 e 100. 100 é o máximo número de usuários que podem existir). Juro que não entendi o motivo deste cálculo. Perdão se for algo besta que eu não tenha prestado atenção. Mas eu não entendi. :frowning:

OBS: Estou num exemplo em que ele cria registro e tenta colocar em um arquivo.dat. Ele utiliza várias classes para manipular este arquivo.

Mais uma vez, agradeço a atenção de todos, de coração mesmo.

Abraços!