Database
 sql >> Baza danych >  >> RDS >> Database

Używanie JShell w Javie 9 w NetBeans 9.0, część 3

JShell to narzędzie wiersza polecenia do uruchamiania fragmentów kodu w środowisku powłoki bez konieczności kompilowania i uruchamiania kompletnej aplikacji. JShell to nowa funkcja w Javie 9. JShell może być używany do testowania i debugowania fragmentów kodu podczas tworzenia aplikacji. Dane wejściowe JShell powinny mieć postać pełnego fragmentu kodu. Wprowadziliśmy JShell w dwóch artykułach:„Using JShell in Java 9 in NetBeans 9.0, Part 1” oraz „Using JShell in Java 9 in NetBeans 9.0, Part 2”, w których omówiliśmy uruchamianie importu oświadczenie, deklarowanie i używanie zmiennych, porównywanie String s, oraz uruchamianie instrukcji. W dalszej części artykułu będziemy uruchamiać fragmenty kodu dla metod Java. Ten artykuł ma następujące sekcje:

  • Ustawianie środowiska
  • Korzystanie z metod
  • Modyfikowanie definicji metody
  • Przeciążanie metody
  • Tworzenie odniesienia do metody
  • Metody wystawiania list
  • Modyfikatory niedozwolone w deklaracjach metod najwyższego poziomu
  • Wniosek

Ustawianie środowiska

Pobierz i zainstaluj NetBeans, jak omówiono we wcześniejszym artykule. Uruchom JShell, wybierając Narzędzia>Otwórz powłokę platformy Java , jak pokazano na rysunku 1.


Rysunek 1: Narzędzia>Otwórz powłokę platformy Java

Korzystanie z metod

metoda jest deklarowana w JShell tak samo, jak w aplikacji Java, z kilkoma różnicami, które są również omówione w tej sekcji. Jako przykład zadeklaruj metodę triple(int) co zajmuje int argument i zwraca int wartość.

int triple(int i) {
   return i*3;
}

Uruchom fragment kodu w JShell, a metoda zostanie utworzona.

[10]-> int triple(int i) {
   return i*3;
}
|  created method triple(int)

Wywołaj metodę potrójna z int wartość jako ar.

triple(1)

Wartość argumentu jest potrojona i zwrócona.

[11]-> triple(1)
|  $13 ==> 3
[12]->

Metoda ma zwracany typ i parametry, ale nie ma modyfikatora dostępu, takiego jak public , prywatne lub chronione . Dzieje się tak, ponieważ deklaracja metody najwyższego poziomu, podobnie jak wszystkie deklaracje najwyższego poziomu, jest niejawnie publiczna. Każdy modyfikator dostępu w deklaracji metody najwyższego poziomu jest ignorowany. Wszystkie poniższe deklaracje metod są równoważne z poprzednią deklaracją metody.

[1]-> private int triple(int i){
   return 3*i;
}
|  created method triple(int)
[2]-> protected int triple(int i){
   return 3*1;
}
|  replaced method triple(int)
[3]-> public int triple(int i){
   return 3*i;
}
|  replaced method triple(int)
[4]->

JShell wyświetla błędy czasu kompilacji, jeśli występują. Jako przykład, zwróć typ metody potrójny jako Ciąg i wyświetlany jest komunikat o błędzie.

[10]-> String triple(int i) {
   return i*3;
}
|  Error:
|  incompatible types: int cannot be converted to java.lang.String
|     return i*3;
|     ^-^

Modyfikowanie definicji metody

Komunikat wyjściowy, który nie zostałby wygenerowany przez aplikację Java i został już dwukrotnie wymieniony w tej sekcji, to „metoda zastąpiona…”. Komunikat wskazuje, że definicja metody została zmodyfikowana. Przepis dotyczący zastąpienia/zmodyfikowania deklaracji metody i innych deklaracji ma na celu ułatwienie testowania.

Aby zmodyfikować lub zastąpić metodę bez definiowania nowej metody, nie wolno modyfikować sygnatury metody, która jest ustawiana przez nazwę metody i parametry metody, w tym liczbę parametrów oraz ich typ i kolejność. Jako przykład zadeklaruj metodę cześć z typem zwrotu void i Ciąg typ parametru.

[4]-> void hello(String s){
}
|  created method hello(String)

Następnie zadeklaruj tę samą metodę cześć ze zwracanym typem String , ciąg parametr typu i zwrotna instrukcja. Poprzednia deklaracja metody dla cześć zostanie wymieniony.

[5]-> String hello(String s){
   return "Hello " + s;
}
|  replaced method hello(String)
[6]->

Wywołaj metodę hello(String) a druga definicja metody jest wywoływana w celu wyświetlenia komunikatu „Hello John”.

[6]-> hello("John")
|  $5 ==> "Hello John"
[7]->

W razie potrzeby argumenty metody są łączone w wywołaniu metody, jak w poniższym fragmencie.

[7]-> hello("John"+" & "+"Johnny")
|  $22 ==> "Hello John & Johnny"
[8]->

W poprzednim przykładzie modyfikacji metody zastąpiliśmy zwracany typ void z ciągiem . Return nie musi być modyfikowany, aby zastąpić metodę. Jako przykład zdefiniuj metodę cześć w następujący sposób.

[15]-> String hello(String str1, String str2){
   return str1+str2;
}
|  created method hello(String,String)

Następnie zmodyfikuj tylko return oświadczenie. Metoda hello(String,String) zostanie wymieniony.

[16]-> String hello(String str1, String str2){
   return "Hello"+str1+str2;
}
|  replaced method hello(String,String)

Jako kolejny przykład uruchomienia fragmentu kodu metody, zdefiniuj metodę hello(String str1, String str2) ze zwracanym typem String[] .

[17]->
String[] hello(String str1, String str2){
   return new String[]{str1,str2};
}
|  created method hello(String,String)

Wywołaj metodę z dwoma argumentami, aby zwrócić tablicę.

[18]-> hello("John","Michael")
|  $39 ==> String[2] { "John", "Michael" }

Przeciążanie metody

Metoda może być przeciążona, tak jak w aplikacji Java. Zadeklaruj metodę hello(String s) .

[1]-> String hello(String s){
   return "Hello  " + s;
}
|  created method hello(String)

Wywołaj metodę, aby wyświetlić wiadomość.

[2]-> hello("John")
|  $1 ==> "Hello John"

Zadeklaruj inną metodę hello(String,String) .

[3]-> String hello(String str1, String str2){
   return str1+str2;
}
|  created method hello(String,String)

Wywołaj metodę, aby wyświetlić wiadomość.

[5]-> hello("Hello"," John")
|  $16 ==> "Hello John"

Tworzenie odniesienia do metody

JShell obsługuje tworzenie odwołań do metody. odniesienie do przodu wywołuje metodę, która nie została jeszcze zdefiniowana. Zadeklaruj metodę main(String) która tworzy odniesienie do metody hello(String) , który nie został jeszcze zdefiniowany. Metoda main(String) zostanie utworzony, ale nie można go wywołać, dopóki metoda hello(String) jest zdefiniowany.

[1]-> String main(String str){
   return "Hello "+hello(str);
}
|  created method main(String), however, it cannot be invoked until
|  method hello(java.lang.String) is declared

Wywołaj metodę main(String) a komunikat otrzymuje wyjście wskazujące, że nie można go wywołać.

[2]-> main("Michael")
|  attempted to call method main(String) which cannot be invoked
|  until method hello(java.lang.String) is declared

Zadeklaruj metodę hello(String) do którego odwołuje się main(String) .

[3]-> String hello(String name){
   return name;
}
|  created method hello(String)

Następnie wywołaj metodę main(String) ponownie i zostanie wywołany.

[4]-> main("Michael")
|  $1 ==> "Hello Michael"

Ten ";" jest dodawany niejawnie, jeśli nie jest dodawany w deklaracjach zmiennych najwyższego poziomu i deklaracjach metod, które są dodawane po jednym w wierszu. Ale ";" nie jest niejawna w instrukcjach w ramach metody. Jako przykład zadeklaruj następującą metodę, a błąd zostanie wypisany.

[1]-> int average(int i,int j){
   return (i+j)/2
}
|  Error:
|  ';' expected

Metody wystawiania list

Metody zdefiniowane w danej sesji JShell są wymienione w /methods Komenda. Aby zademonstrować, zdefiniuj kilka metod.

[1]-> int triple(int i) {
   return i*3;
}
|  created method triple(int)
[2]-> String hello(String s){
   return "Hello" + s;
}
|  created method hello(String)
[3]-> String hello(String str1, String str2){
   return str1+str2;
}
|  created method hello(String,String)
[4]-> int average(int i,int j){
   return (i+j)/0;
}
|  created method average(int,int)

Uruchom /metody polecenie, a wszystkie dodane metody zostaną wyświetlone.

[5]-> /methods
|    printf (String,Object...)void
|    triple (int)int
|    hello (String)String
|    hello (String,String)String
|    average (int,int)int
[5]->

Modyfikatory niedozwolone w deklaracjach metod najwyższego poziomu

Podczas gdy modyfikatory public , prywatne i chronione w deklaracjach metod najwyższego poziomu są ignorowane, a definicja metody jest tworzona niejawnie z dostępem publicznym, niektóre inne modyfikatory nie są ignorowane i nie są dozwolone w deklaracji metody najwyższego poziomu. Te modyfikatory nie są dozwolone na najwyższym poziomie, ponieważ mają znaczenie w określonym kontekście i nie są odpowiednie w kontekście JShell, który służy do testowania fragmentów kodu.

Modyfikator statyczny ma znaczenie, gdy jest używany z metodą w kontekście klasy lub interfejsu, ale nie na najwyższym poziomie. Jako przykład uruchom następującą deklarację metody, która zawiera static .

[1]-> static String hello(String name){
   return "Hello "+name;
}
|  Warning:
|  Modifier 'static' not permitted in top-level declarations,
|  ignored
|  static String hello(String name){
|    ^----^
|  created method hello(String)

statyczny modyfikator jest ignorowany, wyświetlane jest ostrzeżenie, ale metoda zostaje utworzona. Metoda może zostać wywołana.

[2]-> hello("John")
|  $1 ==> "Hello John"
[3]->

Podobnie modyfikator final nie ma znaczenia na najwyższym poziomie, czy to w deklaracji metody, czy jakiejkolwiek innej deklaracji, ponieważ JShell jest przeznaczony do dynamicznego uruchamiania fragmentów kodu i deklarowania metody (lub zmiennej lub klasy) final uniemożliwiłoby modyfikację fragmentu. Jako przykład dodaj końcowy modyfikator do metody. finał modyfikator jest ignorowany, generowane jest ostrzeżenie, a definicja metody jest tworzona bez końcowego .

[2]-> final int triple(int i){
   return 3*i;
}
|  Warning:
|  Modifier 'final' not permitted in top-level declarations,
|  ignored
|  final int triple(int i){
|    ^---^
|  created method triple(int)

Wywołaj metodę i wypisz wynik.

[3]-> triple(5)
|  $1 ==> 15
[4]->

Niektóre inne modyfikatory również nie są dozwolone na najwyższym poziomie, czy to w metodzie, czy w jakiejkolwiek innej deklaracji. Podczas gdy modyfikatory statyczne i końcowy są ignorowane i tworzona jest definicja metody, modyfikatory abstract i natywny w metodzie najwyższego poziomu generuje błąd i metoda nie jest tworzona.

[1]-> abstract String hello(String s){
   return "Hello "+s;
}
|  Error:
|  Modifier 'abstract' not permitted in top-level declarations
|  abstract String hello(String s){
|    ^------^
[1]->

[1]-> native String hello(String s){
   return "Hello "+s;
}
|  Error:
|  Modifier 'native' not permitted in top-level declarations
|  native String hello(String s){
|    ^----^

Modyfikatory domyślne i zsynchronizowane w deklaracji metody najwyższego poziomu lub jakiejkolwiek innej deklaracji również są niedozwolone i generują błąd.

Wniosek

W tym artykule omówiliśmy uruchamianie fragmentów kodu dla metod Java w JShell. W kolejnym artykule omówimy uruchamianie fragmentów kodu dla klas Java, interfejsów i tablic.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Diagramy ER w IRI Workbench

  2. Mit, że DROP i OBCIĄŻ TABELĘ nie są rejestrowane

  3. Samouczek DBMS:Kompletny kurs Crash na DBMS

  4. Łączenie AnySQL Maestro z Salesforce.com

  5. Twórz niesamowite listy samodzielnie lub GitHub jako notatnik