Heim > Java > javaLernprogramm > Hauptteil

Beispiele für die Analyse variabler Parametertypen von Java-Methoden

高洛峰
Freigeben: 2017-01-22 10:58:10
Original
1352 Leute haben es durchsucht

Der variable Parametertyp in Java-Methoden ist ein sehr wichtiges Konzept und hat ein sehr breites Anwendungsspektrum. Dieser Artikel analysiert dies anhand von Beispielen. Die Details sind wie folgt:

Wenn viele Java-Anfänger den folgenden Code sehen, stellen sie im Allgemeinen eine Frage: Was sind die drei kleinen Punkte in der DealArray-Methode?

public class TestVarArgus {
  public static void dealArray(int... intArray){
      
  }
    
  public static void main(String args[]){
      
  }
}
Nach dem Login kopieren


Das wird in diesem Artikel besprochen: variable Parametertypen, auch unbestimmte Parametertypen genannt. Die englische Abkürzung lautet varargus und bedeutet variabler Argumenttyp. Aus dem Namen ist leicht ersichtlich, dass die Anzahl variabel ist, wenn diese Methode Parameter empfängt. Okay, rufen wir diese Methode jetzt auf. Bitte schauen Sie sich den Code und die Ausgabe an:

public class TestVarArgus {
  public static void dealArray(int... intArray){
    for (int i : intArray)
      System.out.print(i +" ");
      
    System.out.println();
  }
    
  public static void main(String args[]){
    dealArray();
    dealArray(1);
    dealArray(1, 2, 3);
  }
}
Nach dem Login kopieren

Ausgabe:

1
1 2 3

Sie können diesen variablen Parameter über den Aufruf im Hauptmenü sehen Methode Sie kann entweder keine Parameter haben (leere Parameter) oder eine variable Länge haben. Jeder, der das sieht, wird wahrscheinlich verstehen, dass dieser Parameter variabler Länge eigentlich einem Array-Parameter ziemlich ähnlich ist. Tatsächlich ist dies tatsächlich der Fall. Der Compiler wandelt diesen letzten formalen Parameter stillschweigend in einen Array-Parameter um und setzt eine Markierung in die kompilierte Klassendatei, um anzuzeigen, dass es sich um eine Methode mit einer variablen Anzahl tatsächlicher Parameter handelt. Bitte schauen Sie sich den Code an:

dealArray(); //dealArray(int[] intArray{});
dealArray(1); //dealArray(int[] intArray{1});
dealArray(1, 2, 3); //dealArray(int[] intArray{1, 2, 3});
Nach dem Login kopieren

Nachdem Sie das gesagt haben, können Sie ihn überprüfen, um zu sehen, ob dieser variable Parameter ein Array-Klassenparameter ist? Schauen Sie sich den Code an:

public class TestVarArgus {
  public static void dealArray(int... intArray){
    for (int i : intArray)
      System.out.print(i +" ");
      
    System.out.println();
  }
    
  public static void dealArray(int[] intArray){//会有Duplicate method dealArray(int[]) in type TestVarArgus的错误
    for (int i : intArray)
      System.out.print(i +" ");
      
    System.out.println();
  }
    
  public static void main(String args[]){
    dealArray(); 
    dealArray(1);
    dealArray(1, 2, 3);
  }
}
Nach dem Login kopieren

Wie aus dem obigen Code ersichtlich ist, stehen diese beiden Methoden in Konflikt und können nicht überladen werden. Hier machen wir ein weiteres interessantes Experiment:

Code 1:

public class TestVarArgus {
  public static void dealArray(int... intArray){
    for (int i : intArray)
      System.out.print(i +" ");
      
    System.out.println();
  }
    
  public static void main(String args[]){
    int[] intArray = {1, 2, 3};
      
    dealArray(intArray); //通过编译,正常运行
  }
}
Nach dem Login kopieren


Code 2:

public class TestVarArgus {
  public static void dealArray(int[] intArray){
    for (int i : intArray)
      System.out.print(i +" ");
      
    System.out.println();
  }
    
  public static void main(String args[]){
    dealArray(1, 2, 3); //编译错误
  }
}
Nach dem Login kopieren


Wie aus den beiden obigen Codeteilen ersichtlich ist, sind variable Parameter mit Array-Klassenparametern kompatibel, Array-Klassenparameter jedoch nicht mit variablen Parametern. Tatsächlich weiß der Compiler für den zweiten Teil des Codes nicht, was veränderlich und unveränderlich ist. Aus seiner Sicht muss er eine Methode der Klasse dealArray(int, int, int) definieren. Daher ist es natürlich unmöglich, Array-Klassenparameter mit der DealArray-Methode abzugleichen.

Da die Java-Methode variable Parameter empfängt, schauen wir uns den folgenden Code an:

public class TestVarArgus {
  public static void dealArray(int count, int... intArray){
      
  }
    
  public static void dealArray(int... intArray, int count){//编译报错,可变参数类型应该作为参数列表的最后一项
      
  }
    
  public static void main(String args[]){
       
  }
}
Nach dem Login kopieren


Dieser Code veranschaulicht das: Der variable Parametertyp muss das letzte Element in der Parameterliste sein und kann nicht vor dem Parameter fester Länge platziert werden. Sie denken wahrscheinlich an das Wort „Priorität“. Da es keine genaue Erklärung gibt, können Sie das Wort „Priorität“ verwenden, um es hier zu verstehen:

public class TestVarArgus {
  public static void dealArray(int... intArray){
    System.out.println("1");
  }
    
  public static void dealArray(int count, int count2){
    System.out.println("2");
  }
    
  public static void main(String args[]){
    dealArray(1, 2);
  }
}
Nach dem Login kopieren


Code Jeder, der es gepostet hat, weiß wahrscheinlich, dass die Ausgabe 2 und nicht 1 ist. Hier müssen Sie bedenken, dass, wenn eine Methode mit fester Länge abgeglichen werden kann, diese Methode zuerst abgeglichen wird. Die überladene Methode mit variablen Parametern ist die zuletzt ausgewählte.

Schließlich weiß jeder, dass der Parameter der Hauptmethode ein Array-Typ ist, sodass er tatsächlich in einen unbestimmten Parametertyp geändert werden kann. Probieren Sie es aus und prüfen Sie, ob Kompilierungsfehler vorliegen.

Ich glaube, dass das, was in diesem Artikel beschrieben wird, einen gewissen Referenzwert für das Erlernen der Java-Programmierung für jeden hat.

Weitere verwandte Artikel zur Instanzanalyse variabler Parametertypen von Java-Methoden finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage