• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

pedrotuga

class forName

17 mensagens neste tópico

epa... nao percebo um c.... disto...

que raio faz esta porra?

"Returns the Class object associated with the class or interface with the given string name, using the given class loader"

esta porra eh chines para mim... o k eh o class loader?

Alguma expliacao melhor que esta?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Oi pedroTuga,

A resposta que procuras encontra-se em http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html e serve para instanciares uma class simplesmente através do nome.

Este link tem um exemplo simples que mostra como instanciar a classe "java.lang.Thread" através do nome, ao invés de fazer algo como new Thread().

Outro situação onde isto faz sentido é a seguinte:

Tens um programa que se liga a uma base de dados. Queres que este programa se liga a uma BD usando qualquer driver que o utilizador quiser, mas sem que o utilizador tenha que recompilar o código. Se tiveres uma linha de código que instancia uma classe através de um parametro que o utilizador configura, podes ter a seguinte linha de código para carregar QUALQUER driver de BD e executar um método seu.

Class.forName(driverClass).newInstance();

onde driverClass é uma String com o nome do driver.

- Destineo

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou a ver... mas nao me parece assim uma coisa taaaaaaaaao pratica... um ifzito resolvia isso na ausencia do forname... mas ta-se... sou demasiado piquinhas em relacao ao java

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não ... um ifzito não resolvia. Como é que vais ter 10 ou 15 ifs para coisas que nem sequer conheces ou sabes que existem. No caso do driver JDBC, não existe em lado nenhum uma lista exaustiva sobre todos, logo não irias conseguir ter um if para cada um.

E vê as coisas por este prisma, podes instanciar uma classe QUALQUER simplesmente através do nome. Acredita que vai haver situações onde um dia darás graças por haver uma funcionalidade como esta :)

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao percebo isto entao.

isto serve para criar um objecto certo?

eh k ja li e reli e continuo sem perceber que raio é que isto faz.

tipo... qual é a diferenca entre

new classname

e forname(classname)

ps: n sei se algum dia vou aprender java

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olha para o meu exemplo.

Tu crias uma aplicação que faz uma ligação a uma base de dados. E queres que os utilizadores usem a aplicação com qualquer base de dados. Para te ligares a uma base de dados, precisas de criar um objecto driver de base de dados (JDBC driver por exemplo). Como não existe nenhuma forma de tu programas um new classname() para todos os drivers existentes, queres que o utilizador defina qual o driver que pretende usar através de um parâmetro. Ou seja, estás a criar uma classe com base numa variável. Desta forma, o mesmo código Class.forName(driverClass).newInstance(); permite-te criar uma instância de driver de base de dados diferente para cada driver que o utilizador quiser criar.

Imagina o forName como uma forma de template, ou seja, cria uma classe do tipo className que te permite depois utilizá-la.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

deixa cá ver se eu entendi.

cria um objecto de uma classe já definida por mim. Serve para por lá um nome e aquilo criar um objecto ora desta classe, ora daquela, conforme o parametro de entrada. é isso?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, é isso mesmo...

E já conseguiste ver o jeito que isso te permite ? Imagina que constrois uma nova classe qualquer que agora permite ligares-te a uma base de dados chinesa qualquer, basta pores lá a nova classe, e alterar o parametro de qual classe deves carregar e a aplicação funciona, sem teres de a recompilar ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tb tenho uma duvida em relação a este class forName

estou a usar o IDE eclipse e estou a tentar desenvolver a minha 1ª aplicação em Java com Mysql

já instalei o mysql 5 e pelo que percebo o que tenho que fazer em 1º é instanciar o driver certo?

assim?

Class.forName ("com.mysql.jdbc.Driver").newInstance();

mas dá-me este erro

Unhandled exception type ClassNotFoundException

isto acho que quer dizer que não encontra a classe

onde tenho que por o driver, ou o que devo fazer para o encontrar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tb tenho uma duvida em relação a este class forName

estou a usar o IDE eclipse e estou a tentar desenvolver a minha 1ª aplicação em Java com Mysql

já instalei o mysql 5 e pelo que percebo o que tenho que fazer em 1º é instanciar o driver certo?

assim?

Class.forName ("com.mysql.jdbc.Driver").newInstance();

mas dá-me este erro

Unhandled exception type ClassNotFoundException

isto acho que quer dizer que não encontra a classe

onde tenho que por o driver, ou o que devo fazer para o encontrar?

Para pore isso a funcionar (se usas o eclipse).

- Colocas a lib (o .jar) que tem o driver de MySQL dentro da pasta do projecto (normalmente coloca-se numa pasta chamada libs)

- Botao direito sobre o jar e faz addToBuild path

- Nao precisas da Class.forName(""), uma vez que tenhas o driver na Build Path faz

Driver myDriver = new Driver();

CTRL+SHIFT+O para importares a class Driver para o teu .java

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigadão Dabubble acho que foi uma grande ajuda.

Segundo o que percebi devia estar a dar, mas dá-e um erro

dá uma olhadela e vê se me podes ajudar!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

quando carregas sobre os erros (barras vermelhas do lado direito) que mensagem e que ele te da?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se reparares estas a usar uma classe de jva puro (da sun) e uma classe de mysql. Apesar de terem o mesmo nome as classes nao sao iguais. Nao deves ir buscar a ligacao ao DriverManager (que e da sun) e sim a classe Driver que e do mysql.

a sintaxe e;

Driver driver= new Driver();<- Classe da mysql

interface da sun --> Connection conn = driver.connect("stringdeconneccao",propriedades);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tenho que usar todas as classes do driver, mas onde posso encontrar um manual do driver?

No site do mySql nao consigo encontrar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok! Estou a desesperar, para usar Class.forName ("com.mysql.jdbc.Driver").newInstance(); sem dar erro onde devo instalar o driver ou o que devo fazer??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

...Pois é pessoal agora percebi qual era o problema.

Não posso usar classes do pacote sql sem o tratamento de erros!

utizando por exemplo

nome_do_metodo() throws SQLException{

....

}

Fica aqui a dica se alguem esbarrar no mesmo problema

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora