Anterior Java Class reflexo de classe que introduziu a categoria chave da Classe reflexão java,
reflexão é mapeado por uma classe java para obter uma classe java .
Então, nós naturalmente pensar, deve haver uma classe que atribui a estar aqui, por exemplo, as pessoas com o nome ea idade propriedades, todos de uma classe Pessoa terá um nome, idade essas duas propriedades, da mesma forma, há também uma classe construtores, campos, métodos e outras propriedades.
Em seguida, vamos primeiro entender o construtor, crie um construtor objeto refletido de forma dinâmica.
[A] a classe Construtor
Construtor objeto representa um construtor, então o objeto deve ser o que maneiras nós acho que não vai ter o nome desse construtor, para obter o construtor da classe pertence, produz um objeto e outros métodos pelo construtor.
documento jdk a partir de onde você pode ver getName) método construtor (para obter o nome, getDeclaringClass () classe para obter a sua classe, newInstance () para criar o objeto.
No desenvolvimento, que muitas vezes newInstance () para criar dinamicamente classe Construtor objetos.
[Di] Construtor objecto obtido
Antes do método da classe Construtor apresentação, primeira descreve como obter Construtor, e da mesma classe, Construtor nem pode novo diretamente.
O acima dois métodos é documento jdk classe Classe, estes dois métodos são os métodos para a configuração especificada e o acesso a todos os construtores.
Então, nós sabemos, deseja obter Construtor objeto, você deve primeiro obter um objeto de classe. Vamos demonstrar o seguinte
[Três] de demonstração
Nós ainda obter a classe String fazer apresentações.
Como pode ser visto a partir da figura, classe String há muitos construtores.
apresentação castanha
1. Obter todos os construtores
public static void main(String[] args) throws Exception {
Class cls = Class.forName("java.lang.String");
//获取所有构造方法
Constructor[] constructor = cls.getConstructors();
for(Constructor cons : constructor){
System.out.println(cons);
}
}
resultados:
public java.lang.String(byte[],int)
public java.lang.String(byte[],int,int,java.nio.charset.Charset)
public java.lang.String(java.lang.StringBuffer)
public java.lang.String(byte[])
public java.lang.String(byte[],int,int)
public java.lang.String(byte[],java.nio.charset.Charset)
public java.lang.String(byte[],java.lang.String) throws java.io.UnsupportedEncodingException
public java.lang.String()
public java.lang.String(java.lang.StringBuilder)
public java.lang.String(byte[],int,int,int)
public java.lang.String(int[],int,int)
public java.lang.String(char[],int,int)
public java.lang.String(char[])
public java.lang.String(java.lang.String)
public java.lang.String(byte[],int,int,java.lang.String) throws java.io.UnsupportedEncodingException
Pode adivinhar a partir da saída, a classe deve ter os métodos de construtor, pode ser obtido antes de métodos de construção modificadoras, parâmetros, e similares exceção lançada.
2. O método de obtenção de uma estrutura única
public static void main(String[] args) throws Exception {
Class cls = Class.forName("java.lang.String");
//获取单个构造方法
Constructor constructor = cls.getConstructor(StringBuffer.class);
String constructorName = constructor.getName();
System.out.println(constructorName);
}
resultados:
java.lang.String
Java assim como métodos sobrecarregados, determinação de sobrecarga de método e diversos parâmetros com base no número de diferentes tipos de parâmetros, o método é configurado para obter um método particular de obtenção do tipo de configuração correspondente de acordo com o número de parâmetros, os parâmetros.
Original tipo de classe parâmetro do método como um parâmetro do método GetConstructor de entrada, para se obter o parâmetro construtor correspondente. Da mesma forma o acesso a outros métodos de construção são os mesmos.
3. Criar um objeto via o construtor
public static void main(String[] args) throws Exception {
Class cls = Class.forName("java.lang.String");
//获取单个构造方法
Constructor constructor = cls.getConstructor(StringBuffer.class);
//由于在编译时,无法检测到是什么类型的Constructor所以需要进行类型强转
String str = (String)constructor.newInstance(new StringBuffer("abc"));
//拿到反射出来的对象,调用charAt方法测试
System.out.println(str.charAt(2));
}
resultados:
c
Aqui estão alguns dos meus amigos podem este erro:
public static void main(String[] args) throws Exception {
Class cls = Class.forName("java.lang.String");
//获取单个构造方法
Constructor constructor = cls.getConstructor(StringBuffer.class);
//由于在编译时,无法检测到是什么类型的Constructor所以需要进行类型强转
String str = (String)constructor.newInstance("abc");
//拿到反射出来的对象,调用charAt方法测试
System.out.println(str.charAt(2));
}
resultados:
Exception in thread "main" java.lang.IllegalArgumentException: argument type mismatch
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at club.leyvan.muzile.ConstructDemo.main(ConstructDemo.java:12)
Tipo de lote sem erros, ou seja, o código acima é o construtor parâmetro correspondente a esse construtor StringBuffer, e passar no parâmetro objeto StringBuffer não é, ele será dado.
Resumo: método de utilização de obter o tipo de aula, para utilizar o mesmo tipo da instância de objecto acima ao chamar o método.
[Tetraquis] newInstance Classe em () Método
Também na classe método Classe newInstance, ver o código fonte da classe Classe pode saber, quando este método chama o construtor padrão sem argumentos para criar objetos usando mecanismo de cache, o construtor sem argumento em cache quando chamando o método newInstance, remover o construtor sem argumentos para criar o objeto do cache.
E em que a diferença no construtor, o método newInstance de construtor da classe sem argumentos é chamado, não pode ser chamado de parâmetro de configuração.
Em seguida, dizer que o membro reflexão da reflexão Java de variáveis