Pourquoi n'est-il pas java.lang.Tableau de la classe? Si java tableau est un Objet, il ne devrait pas prolonger l'Objet?
Voici le package java-arbre:
http://docs.oracle.com/javase/7/docs/api/java/lang/package-tree.html
J'ai lu un tutoriel sur Java, qui a déclaré qu'en Java, les tableaux sont des objets.
Où est le tableau de la classe? Comment se fait que nous pouvons faire des tableaux comme ceci:
byte[] byteArr = new byte[];
char[] charArr = new char[];
int[] intArr = new int[];
et les tableaux héritent des méthodes de l'Objet; par exemple:
byte thisByte = 1;
byte thatByte = 2;
byte[] theseBytes = new byte[] {thisByte, thatByte};
int inheritance = theseBytes.length; //inherited 'length' field and some methods
int wasntInWill = thatByte.length; //error
Ce qui se passe ici?
EDIT:
Que par les réponses, je sais maintenant qu'il est un final
classe dans java.lang.reflect
paquet.
J'ai maintenant créé un package java.lang.reflect
dans mon projet Android et ont ajouté une classe appelée Array.java . Pour confirmer ce est dans la manière de la classe d'origine, Eclipse m'a donné le message d'erreur "... existe déjà dans path/to/android.jar"
Si j'écris la même classe que java.lang.reflect.Array
mais le changement le toString()
méthode... cela devrait fonctionner au sein de mon application?
Mal. Il est n'est pas "un
final
classe dans java.lang.reflect
paquet'.OriginalL'auteur Ozzy | 2011-12-17
Vous devez vous connecter pour publier un commentaire.
De JLS:
Ceci est illustré par l'exemple de code suivant:
qui imprime:
où la chaîne
"[I"
est le type à l'exécution de la signature de l'objet de classe"array with component type int"
.Et oui, depuis les types tableau étendre efficacement l'Objet, vous pouvez appeler toString() sur arrayObject également voir l'exemple ci-dessus
Vous êtes les bienvenus, vous n'avez pas de classe dans votre main pour modifier, créer une util méthode qui accepte de la matrice de l'objet et de l'imprimer dans la forme que vous souhaitez
Je sais que je suis juste essayer pour voir si cela peut être fait. Bien sûr, je devrais l'essayer avant de me demander cela, mais il était un peu noob partie de moi qui était inquiet, il ferait exploser mon ordinateur!
Pour le toString() suffit d'utiliser Arryas.asList()
Je suis conscient de cela aussi, mais merci. Je voulais voir si je peux le faire fonctionner pour mes tableaux normalement par écrit la méthode toString ().
OriginalL'auteur Jigar Joshi
Les tableaux sont une fonctionnalité du langage, ils ont une syntaxe spécifique pour la déclaration et de l'accès. Et leur définition de la classe est caché.
Ils ont une représentation dans la refleciton API -
java.lang.reflect.Array
Btw, le
length
champ n'est pas hérité deObject
. Le.getClass()
,.toString()
, etc. les méthodes sont héritées.length
champ n'existe pas, il n'y a pas un tel champ dans un tableau. C'est juste le langage java fonctionnalité qui représenteARRAYLENGTH
opcode de terrain. Techniquement, pratiquement chaque impl. a tel champ dans l'en-tête objet, si. Les tableaux de mettre en œuvre des 2 interfaces:Serializable
etClonable
et de publierclone()
méthode.Non,
java.lang.reflect.Array
n'est-ce pas la définition de la classe. C'est un utilitaire de réflexion de la classe qui n'a rien, mais des méthodes statiques.Des plans pour corriger cette réponse? Vous avez eu de 4,5 ans.
Juste pour donner de la dernière comer plus de clarté. Si vous ne
Integer[] array = new Integer[0]; System.out.println(array.getClass());
, vous devriez voir la classe estclass [Ljava.lang.String;
, pasjava.lang.reflect.Array
OriginalL'auteur Bozho
Légère élaboration du code ci-dessus segment:
Résultats:
Comme on peut le voir, "[I" est le nom de la classe, que l'on appelle, en anglais, "tableau de int". La classe est une "pleine citoyenneté" classe Java qui répond à toutes les méthodes de l'Objet. La seule différence est que le
new
syntaxe est différente et il ne supporte pas l'newInstance()
méthode de Classe.(Les classes "[I", "[C", et al, "pré-définies" dans la JVM -- il n'y a pas .les fichiers de classe correspondante. Java sera également créer implicitement, à la volée, "[MyJavaClass;" class si vous avez un tableau de "MyJavaClass" dans votre programme.)
Cloneable
etSerializable
. 2. Le JLS> et Spécification de la JVM tous deux que tous array classes sont créées dynamiquement. Rien à propos de certains d'entre eux étant intégré.OriginalL'auteur Hot Licks
Il sont tableau des classes, une par type d'élément utilisé dans le programme. À la fois le JLS et la JVM Spec clairement qu'un objet de classe pour un tableau est créé dynamiquement. JLS #10.8 'Objets de la Classe pour les Tableaux' et JVM Spec #5.3.3 " de Créer un Tableau de Classes.
Il ne s'étendent
java.lang.Object.
JLS #10.8 stipule clairement que " la super-classe directe de chaque type de pile est l'Objet.'Veuillez expliquer downvoting une réponse correcte.
Vous n'avez pas trouver la classe n'importe où. Il n'est pas défini n'importe où. Il n'est pas même une seule classe. Il y en a un pour chaque type primitif, par exemple
int[]
, et un pour chaque type d'objet, par exempleObject[],
String[],
etc.dans le JLS 10.8 il est dit que "un type tableau n'est pas une classe" . ainsi est créé dynamiquement la classe, pas classe?
OriginalL'auteur user207421