Dans Talend, j'écrivais un petit code, une classe dans la zone "Code" de Metadata, on peut coder la classe Java puis dans le composant Tjavawaow, on peut appeler les méthodes de la classe.
donc je a couru dans la situation lorsque j'ai fait la classe et a écrit dans Tjavarow le nom de la classe, le dialogue du contexte qui est arrivé n'a pas montré les méthodes, mais a montré le mot-clé «Ce» avec d'autres choses. Je décide d'utiliser "ceci" puis de mettre un point puis de la boîte de dialogue contextuelle est arrivé pour montrer les méthodes de la classe. P>
Ma question est le mot-clé "ceci" avoir la capacité d'instancer implicitement une classe Dans un objet, et c'est pourquoi j'ai pu voir les méthodes de la classe? p>
Je viens de décider de changer l'une de mes méthodes à une méthode statique et l'utiliser de cette façon. P>
Donc, si c'est correct que le mot clé "Ceci" peut instancer une classe à un objet sans utiliser "Nouveau" mot-clé pour instancier la classe Java à un objet? P>
J'ai fait des recherches sur ceci, je trouvé cette liste de choses que le mot clé 'ceci' peut faire. P>
Utilisation de ce mot-clé P> blockQuote> blockquote>
xxx pré>
afin de mettre un exemple de code pour illustrer: Disons que nous avons une classe appelée mysphere, et nous avons des méthodes mysurfacearea et myvolume, pourrions-nous appeler la méthode de cette manière: p>
mySphere.this.mysurfacearea (); p>
mySphere.this.myvolume (); p> blockQuote>
saisie est apprécié! p>
Je viens de créer mon propre code sur ceci et j'ai eu une erreur, et j'ai eu une erreur: p>
public class MyClass { public static void main(String args[]) { int x=10; int y=25; int z=x+y; int w; System.out.println("Sum of x+y = " + z); w = MyClass.this.myAreaCalc(x); System.out.println("Area Calc is = " + w); } public int myAreaCalc(int A){ return A*A; } } Error: /MyClass.java:9: error: non-static variable this cannot be referenced from a static context w = MyClass.this.myAreaCalc(x); ^ 1 error
3 Réponses :
Je pense que je vois ce que vous êtes après ici. Utilisation de alors quelque chose comme: p> Ceci code> sur la "Classe actuelle" signifie toujours que vous devez appeler
nouveau code>. À partir d'une classe, vous pouvez utiliser
ce code> pour faire référence aux membres de l'instance. ("Instance" vaut mieux que de dire "la classe actuelle" car vous avez besoin d'une instance, vous ne pouvez pas utiliser le type de classe.)
Merci pour cette marque Mark Espace, mais je suis au courant de cette utilisation. Mais je pensais en fait que l'on pouvait utiliser la classe avec "ce" mot-clé et, dans l'arrière-plan, il créerait un objet, puis à partir du point de vue du code, on dirait que nous utilisons la méthode dans le même style de syntaxe que Méthode statique. C'est ce que je pensais que ce mot clé peut faire.
Ce que j'ai posté ci-dessus est essentiellement tout ce code> peut faire. Il y a quelques autres options de syntaxe, mais vous devez avoir un contexte d'instance comme tout le monde dit. L'accès à un constructeur est un peu différent et l'accès à une classe interne ou externe) est un peu différent, mais utilisez également le mot clé code>. Aucun de ceux qui instancient directement (font une instance de) une classe.
Je pense que la ligne que vous êtes confuse est en référence à cet exemple que j'ai mis dans le code ci-dessous: dans un contexte non statique, vous pouvez appeler une méthode utilisant .method () code>, mais
ceci code> est implicitement appelé et peut simplement être utilisé comme méthode
() code> de la même classe code>. p>
ceci code> de em> une méthode statique ou vous obtiendrez une erreur et utilisez-la Pour em> appeler une méthode statique d'une méthode non statique vous donnera un avertissement. P> p>
Puisque vous êtes dans le contexte statique de Votre code doit instancier un objet de la classe et utiliser ses méthodes non statiques à l'objet d'instance. Utilisation de
Public statique Void Main Code> Vous ne pouvez pas accéder aux instances non statiques d'ici. P>
A ao = new A();
B b = ao.new B();
Ok Marcos, vous le mettez clairement ici: '' '
et son utilisation, je ne me souviens d'aucune autre utilisation de cela au lieu de distinction sur les noms de variable et de méthode avec des contextes imbriqués
Je ne savais pas que c'était seulement pendant que vous êtes dans le contexte de la classe et que vous ne pouvez pas l'utiliser dans la méthode principale d'une classe qui est le point d'entrée du programme, car la méthode principale est une méthode statique.
Je suppose que cela explique pourquoi ce que je faisais ne pouvait pas travailler. Merci d'avoir refusé cela. La langue existe-t-il en termes de tutoriels n'est pas très clair sur cette région.
Je vais marquer votre réponse comme réponse à cette question. Merci beaucoup, apprécie vraiment ça.
J'espère que tu l'as eu
Le mot clé "ceci" a-t-il la capacité d'instancier implicitement une classe dans un objet, CODE>.
MySphere.Chis.myvolume (); Code> Je ne comprends pas ce contexte. Y compris le code où vous définissez
mySphere code> aiderait. De plus, si ce code est à l'intérieur d'une méthode dans
mySphere code> ou ailleurs.
Ok, merci Markspace. J'ai effectivement créé un exemple de code que j'ai couru sur une IDE Java en ligne et j'ai eu une erreur. Via cet exemple, vous comprendrez ce que je pense à cela. Je vais ré-modifier ma question et mettre dans cet exemple que j'ai.
Merci Markspace pour me dire que c'est «non» pour: instancier implicitement d'une classe dans un objet.
D'accord. Mais qu'en est-il de cette déclaration de ce que le mot clé "ceci" peut faire: ** Il peut être utilisé pour invoquer la méthode de classe actuelle (implicitement) ** **
Comment l'on invoque la méthode de classe actuelle implicitement?
Vous voulez dire:
Il peut être utilisé pour invoquer la méthode de classe actuelle (implicitlicitly) code> d'abord, vous n'avez pas de "classe actuelle" tant que vous n'appelez pas
Nouveau code>. Deuxièmement que la phrase précise me confondre, je pense que ce qu'elles veulent dire par "implicitement", c'est que vous n'avez pas à fournir
ce code> lorsqu'il invoque une méthode sur la classe actuelle, c'est facultatif.
Ok, alors oui, c'est comme si vous avez dit déroutant, le libellé qui est utilisé là-bas.