Résumer les différences entre l'écriture C # et Java

Préface

Je développe généralement en C #, mais je n'ai pas encore d'interface pour C # dans l'API à utiliser, alors j'ai commencé à développer en Java. Je n'ai pas beaucoup touché Java, alors j'ai essayé de résumer "xxxx" en C # par "xxxx" en Java. Il se concentre sur les mots réservés et les méthodes de mise en œuvre que j'utilise souvent. Par conséquent, toutes les différences ne sont pas couvertes.

Différences entre les mots réservés C # et Java et les méthodes d'implémentation

Différence de mots réservés

J'ai résumé les différences entre les mots réservés en C # et Java, et les points qui ne changent pas. Comparons côte à côte les mêmes articles et des articles similaires.

différence C# Java Remarques
namespace package
using import
Aucun class class
: extends Héritage de classe
Aucun interface interface
Aucun abstract abstract
virtual Aucun Si vous souhaitez que la fonction soit remplaçable à la destination de l'héritage, C#はvirtualを付与、JavaはAucun
override @Override C#Est inclus dans la définition, mais Java est une annotation(C#Attribut, attribut)
readonly final Champ en lecture seule
const final constant
sealed final Héritage de classe interdit, Java également utilisé comme remplacement de fonction interdit
Aucun Enum Enum Type d'énumération
struct Aucun Structure

Java n'avait pas de "struct", "virtual". Il ne semble y avoir aucun problème car "struct" peut être remplacé comme ça par class, mais cela semble un peu gênant sans "virtuel". Pour «virtuel», creusez à la fin de la page avec le titre ci-dessous. ・ "C # virtuel et Java final"

De plus, le "final" de Java contenait plusieurs fonctionnalités C #. Non seulement cela, mais il n'y a que l'utilisation de Java, donc je vais creuser cette différence à la fin de la page avec le titre ci-dessous. ・ "Différences dans la déclaration des constantes et la méthode de réglage"

Différence de méthode de montage

J'ai essayé de résumer la méthode d'implémentation en C #, la méthode d'implémentation en Java et la méthode d'implémentation qui ne peut être trouvée que dans l'un ou l'autre. Comparons les mêmes éléments que je pensais similaires côte à côte.

Chose que tu veux faire C# Java
Attribut self-made Héritage d'attribut @Définition de classe dans l'interface
Méthode d'extension public static class Aucun
Implémentation par défaut de l'interface ~~Aucun~~
C#8.0 (.NET Core 3.0)Ajouter avec
Hériter de l'interface et définir les membres par défaut
Libération automatique des ressources using(Stream stream = new Stream()) try-with-resources
Contraintes de paramètre de type where T: int <T extends Number>
Exemple ci-dessus)void Test<T>(T arg) void Test<T>(T arg) where T : int <T extends Number> void Test(T arg)
Déclaration de tolérance nulle Nullable<T>,T? Optional<T>
Style Lambda ()=>{ } ()->{ }
Aucun argument de rappel Action Runnable
Idem ci-dessus 1 argument Action<T> Consumer<T>
Idem que ci-dessus 2 arguments Action<T1,T2> BiConsumer<T,U>(Jusqu'à 2 arguments)
Identique à ci-dessus Il y a une valeur de retour Function<R> Supplier<T>
~~Spécification APIInterface fonctionnelleAucune limite à voir~~
Idem ci-dessus, 1 argument, avec valeur de retour Function<T,R> Function<T,R>
Idem ci-dessus, 2 arguments, avec valeur de retour Function<T1,T2,R> BiFunction<T,U,R>(Jusqu'à 2 arguments)

En ce qui concerne les fonctions répertoriées cette fois, il a été constaté que C # et Java ont les mêmes fonctions, bien que l'utilisabilité soit différente.

De plus, comme vous l'avez souligné dans la section des commentaires, la fonction d'implémentation par défaut de l'interface a été ajoutée à C # depuis C # 8.0. J'étais confus à propos de l'abstrait et de l'interface et je l'ai implémenté dans ce dernier, mais je suis sûr qu'il y a des gens qui ont la même implémentation dans la destination d'héritage. ~~ Je suis ~~ Je veux vraiment en profiter.

De plus, la facilité d'utilisation de "Action" et "Function" en C #, appelées callbacks, semble être assez différente. Pour "rappel", creusez à la fin de la page avec le titre ci-dessous. ・ Différences dans la façon d'utiliser les rappels

Plongez dans les similitudes et les différences entre C # et Java

Nous approfondirons les trois listés dans «Différences entre les mots réservés» et «Différences dans les méthodes de mise en œuvre».

C # virtuel et Java final

En C #, «virtual» active le remplacement (implémenté comme une méthode virtuelle pour être exact) et Java interdit le remplacement avec «final». En d'autres termes, si vous n'ajoutez pas "final" à une fonction Java, elle sera toujours implémentée en tant que "virtuelle" au sens de C #. Il a été annulé avant que je le sache! ?? Si vous ne voulez pas être dans une telle situation, vous devez absolument ajouter "final". ..

Différences dans la façon d'utiliser les rappels

La différence entre les rappels C # et Java est à peu près comme ça. Si vous comprenez cette différence, vous ne serez pas confus par C # et Java.

※1 Les rappels Java mentionnés dans cet article ne peuvent prendre que des types de référence comme arguments. Par conséquent, contrairement à C #, Java ne peut pas prendre un type numérique comme argument. ~~ J'étais confus parce que je ne pouvais pas définir la valeur ~~ Au lieu de cela, il existe un rappel pour le type numérique, qui est défini par le nom ci-dessous, alors utilisez-le. ・ Consommateur de type "numérique" ・ Obj Consommateur de type numérique ・ "Fonction numérique" ・ Vers la fonction "Type numérique" ・ Vers la BiFuction "Type numérique"

Différences dans la déclaration de constante et la méthode de réglage

Nous avons résumé les différences lors de l'utilisation de C # "const", "readonly" et Java "final" comme constantes et lecture seule.

Déclaration de constante, méthode d'affectation const readonly final
Déclaration en champ constant
Affectation à un champ constant autre que l'emplacement déclaré × 〇 ※1 ×
Déclaration avec des variables locales ×
Affectation autre que l'emplacement de la déclaration dans la variable locale × ×
Accorder à l'argumentation × ×
Restrictions de type au moment de la déclaration Oui * 2 Aucun Aucun

Hormis ce qui précède, la fonction «finale» est interdite de réaffectation, comme indiqué dans les commentaires. Puisque C # ne peut fondamentalement pas effectuer d'affectations autres que dans l'emplacement de déclaration, il n'y a pas de fonction correspondante. Si vous le forcez, est-ce quelque chose comme "lecture seule" qui peut être déclaré même avec des variables locales? Bien sûr, une telle fonction n'existe pas, donc je la veux vraiment en C #.

Page référencée

finalement

J'ai entendu dire que C # et Java sont similaires car ils ont la même base de langage. Au cours de mes recherches, j'ai senti que de nombreux mots réservés étaient les mêmes et qu'ils étaient certainement similaires. De plus, il y avait des différences que je ne remarquerais pas à moins que j'écrive réellement le code (de petites différences telles que les mots réservés qui vont et viennent), donc j'ai senti l'importance non seulement d'accumuler des connaissances mais aussi d'en sortir. Cependant, bien qu'il soit écrit de la même manière, il peut se comporter différemment, je voudrais donc éviter de l'ajuster lorsqu'une erreur se produit.

Et surtout, des mises à jour d'informations. .. Merci à tous ceux qui l'ont souligné.

Recommended Posts

Résumer les différences entre l'écriture C # et Java
Différences dans l'écriture des classes Java, C # et Javascript
Différences entre Java "débutant" et Kotlin
Différence entre Java, C # et JavaScript (comment trouver le degré d'obésité)
Différences entre Java et .NET Framework
Pensez aux différences entre les fonctions et les méthodes (en Java)
Voyons les différences entre les sous-chaînes Java et les sous-chaînes C #, et comment les porter.
[Java] Différences entre les variables d'instance et les variables de classe
[Java] Comprendre la différence entre List et Set
Une note sur les différences entre les interfaces et les classes abstraites en Java
Organisez la différence de confort d'écriture entre l'expression lambda Java et l'expression lambda Kotlin.
Langage Java du point de vue de Kotlin et C #
[Java] Différence entre == et égal
Différences entre IndexOutOfBoundsException et ArrayIndexOutOfBoundsException
Histoire de remplacement C # et Java
[Apprentissage Java Bronze] Différence entre l'encapsulation, le masquage des données et le masquage des informations
J'ai essayé de résumer les bases de kotlin et java
Différence entre Java et JavaScript (comment trouver la moyenne)
[Java] Vérifiez la différence entre orElse et orElseGet avec IntStream
Différences dans la gestion des chaînes entre Java et Perl
[Java] Différence entre Hashmap et HashTable
Une personne écrivant C ++ a essayé d'écrire Java
[JAVA] Différence entre abstrait et interface
[Java] Relation entre H2DB et JDBC
À propos de la différence entre la classe Applet et la classe JApplet
[Java] Différence entre array et ArrayList
[Java] Différence entre fermable et fermable automatiquement
[Java] Différence entre StringBuffer et StringBuilder
Crypter avec Java et décrypter avec C #
[Java] Différence entre longueur, longueur () et taille ()
La relation entre la vérification stricte de la date Java et l'heure d'été
À propos de la relation entre l'opérateur d'égalité de chaîne Java (==) et l'initialisation. Débutants
J'ai essayé de résumer les méthodes de Java String et StringBuilder
[Java] Quelle est la différence entre form, entity et dto? [Haricot]
Conversion entre Kotlin nullable et Java facultative
Relation entre les modificateurs d'accès kotlin et java
Différence entre final et immuable en Java
noyau java: compilateur HotSpot et tas C
Lier le code Java et C ++ avec SWIG
Différence entre la préface et le suffixe des opérateurs
Le contenu de la valeur de retour de executeBatch est différent entre 11g et 12c
[Pour les débutants] Différence entre Java et Kotlin
Interpréter la relation entre les méthodes Java et les arguments en formules biochimiques
[Java] Lecture et écriture de fichiers avec OpenCSV
Ayons une idée approximative des différences entre protocoles, classes et structures!
[Note] Coopération entre Java et DB (basique)
[Java 7] Divisez la liste Java et exécutez le processus
À propos de la différence entre irb et pry
L'histoire de l'écriture de Java dans Emacs
Différence entre les chaînes de caractères et les symboles Ruby [Débutant]
[Java] Différence entre la plage Intstream et la plageClosed
Comprendre la différence entre int et Integer et BigInteger en java et float et double
[Java8] Recherchez le répertoire et récupérez le fichier
La direction de Java dans "C ++ Design and Evolution"
De Java à C et de C à Java dans Android Studio
Lire et écrire des fichiers gzip en Java
Différence entre int et Integer en Java
HashMap # putAll () se comporte différemment entre Java 7 et Java 8