カテゴリーアーカイブ: プログラミング

Java 8forEachのガイド

1。概要 Java 8で導入されたforEachループは、コレクションを反復処理するための新しい簡潔で興味深い方法をプログラマーに提供します。 この記事では、コレクションでforEachを使用する方法、必要な引数の種類、およびこのループが拡張されたforループとどのように異なるかを説明します。 Java 8のいくつかの概念をブラッシュアップする必要がある場合は、役立つ記事のコレクションがあります。 2.forEachの基本 Javaでは、CollectionインターフェースのスーパーインターフェースとしてIterableがあります。Java8以降、このインターフェースには新しいAPIがあります。 void forEach(Consumer action) 簡単に言えば、forEachのJavadocは、「すべての要素が処理されるか、アクションが例外をスローするまで、Iterableの各要素に対して指定されたアクションを実行する」と述べています。 したがって、forEachを使用すると、他のIteratorと同様に、コレクションを反復処理して、各要素に対して特定のアクションを実行できます。 たとえば、文字列のコレクションを繰り返して出力するforルー続きを読む »

Javaでのprintf()によるフォーマット

1.はじめに このチュートリアルでは、printf()メソッドを使用したフォーマットのさまざまな例を示します。 このメソッドはjava.io.PrintStreamクラスの一部であり、Cのprintf()関数と同様の文字列フォーマットを提供します。 2.構文 次のPrintStreamメソッドのいずれかを使用して、出力をフォーマットできます。 System.out.printf(format, arguments); System.out.printf(locale, format, arguments); formatパラメータを使用してフォーマットルールを指定します。ルールは「%」文字で始続きを読む »

Javaの静的キーワードのガイド

1.はじめに この記事では、Java言語のstaticキーワードについて詳しく説明します。キーワードstaticを変数、メソッド、ブロック、ネストされたクラスに適用する方法と、それがどのような違いをもたらすかを説明します。 2.静的キーワードの構造 Javaプログラミング言語では、キーワードstaticは、特定のメンバーがその型のインスタンスではなく、型自体に属していることを示します。 これは、その静的メンバーのインスタンスが1つだけ作成され、クラスのすべてのインスタンスで共有されることを意味します。 キーワードは、変数、メソッド、ブロック、およびネストされたクラスに適用できます。 3.静的フィールド(またはクラス変数) Javaでは、フィールドが静的として宣言されている場合、そのフィールドのコピーが1つだけ作成され、そのクラスのすべてのインスタンス間で共有されます。クラスを何回初期化するかは関係ありません。それに属する静的フィールドのコピーは常に1つだけです。この静的フィールドの値は、異なるクラスの同じオブジェクトのすべてのオブジェクトで共有されます。 メモリの観点から、静的変数はMetaspaceと呼ばれるJVMメモリ内の特定のプールに配置されます(Java 8より前は、このプールはPermanent GenerationまたはPermGenと呼ばれ、完全に削除続きを読む »

Javaで文字列に改行文字を追加する

1。概要 文字列のフォーマットとテキスト出力の生成は、プログラミング中によく発生します。多くの場合、出力をフォーマットするために文字列に改行を追加する必要があります。 改行文字の使用方法について説明しましょう。 2.文字列に改行文字を追加する オペレーティングシステムには、改行の開始を示す特殊文字があります。たとえば、Linuxでは改行は「と表記されて\ n」は、とも呼ばれるラインフィード。Windowsでは、新しい行は「\ r \ n」を使用して示されます。これは、キャリッジリターンとラインフィード、またはCRLFと呼ばれることもあります。 Javaで改行を追加するのは、文字列の最後に「\ n」、「\ r」、ま続きを読む »

SpringBootインタビューの質問

1.はじめに Spring Bootは、導入以来、Springエコシステムの主要なプレーヤーです。このプロジェクトは、自動構成機能により、私たちの生活をはるかに楽にします。 このチュートリアルでは、就職の面接中に出てくる可能性のあるSpringBootに関連する最も一般的な質問のいくつかを取り上げます。 2.質問 Q1。Spring Bootとは何ですか?その主な機能は何ですか? Spring Bootは本質的に、SpringFrameworkの上に構築された迅速なアプリケーション開発のためのフレームワークです。自動構成と組み込みアプリケーションサーバーのサポート、および豊富なドキュメントとコミュニティサポートを組み合わせた、Spring Bootは、現在Javaエコシステムで最も人気のあるテクノロジーの1つです。 ここにいくつかの顕著な特徴があります: スターター–外出続きを読む »

Java –ファイルへの書き込み

1。概要 このチュートリアルでは、Javaを使用してファイルに書き込むさまざまな方法について説明します。私たちは、使用作ってあげるBufferedWriterの、のPrintWriter、たFileOutputStream、DataOutputStreamを、RandomAccessFileの、のFileChannel、およびJava 7ファイルユーティリティクラスを。 また、書き込み中にファイルをロックする方法についても説明し、ファイルへの書き込みに関する最終的なポイントについて説明します。 このチュートリアルは、ここBaeldungのJava「BacktoBasics」シリーズの一部です。 2.書き込みBufferedWriterの 簡単に始めて、BufferedWriterを使用して新しいファイルに文字列を書き込みましょう: public void whenWriteStringUsingBufferedWritter_thenCorrect() throws IOException { String str = "Hello"; BufferedWriter writer = new BufferedWriter(new FileWriter(fileName)); writer.write(str); writer.close(); } ファイルの出力は次のよう続きを読む »

メインクラスエラーを検索またはロードできませんでした

1.はじめに Javaプログラムを実行すると、「メインクラスが見つからないかロードできませんでした」と表示される場合があります。理由は簡単に推測できます。JVMがメインクラスを見つけられず、このエラーが発生しました。しかし、なぜそれができなかったのですか? このチュートリアルでは、メインクラスが見つからない理由として考えられるものについて説明します。また、それらを修正する方法も説明します。 2.サンプルプログラム HelloWorldプログラムから始めます。 public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world..!!!"); } } それでは、コンパイルしてみましょう。 $ javac HelloWorld.java ここで、コンパイラはプログラムの.classファイルを生成します。この.classファイルは同じディレクトリに生成されます。.classファイルは、Javaプログラムで指定されたクラス名と同じ名前を持つことになります。この.classファイルは実行可能です。 次のセクションでは、この.classファイルを実行し、「メインクラスが見つからないかロードでき続きを読む »

Java8ストリームAPIチュートリアル

1。概要 この詳細なチュートリアルでは、Java8ストリームの作成から並列実行までの実際の使用法について説明します。 この資料を理解するには、読者はJava 8(ラムダ式、オプション、メソッド参照)とStreamAPIの基本的な知識を持っている必要があります。これらのトピックに精通していない場合は、以前の記事– Java8の新機能とJava8ストリームの概要をご覧ください。 2.ストリームの作成 さまざまなソースのストリームインスタンスを作成する方法はたくさんあります。作成されると、インスタンスはそのソースを変更しないため、単一のソースから複数のインスタンスを作成できます。 2.1。空のストリーム 空の()メソッドは、空のストリームを作成する場合に使用されるべきです。 Stream streamEmpty = Stream.empty(); そのことが多いという場合、空の()メソッドが返す避けるために、作成時に使用されているヌルをなし要素を持つストリーム用: public Stream streamOf(List list) return list == null 2続きを読む »

SpringFrameworkの面接に関する質問

この記事はシリーズの一部です。•Javaコレクションのインタビューの質問 •Java型システムのインタビューの質問 •Java同時実行インタビューの質問(+回答) •Javaクラスの構造と初期化の面接の質問 •Java8インタビューの質問(+回答) •Javaインタビューの質問でのメモリ管理(+回答) •JavaGenericsの面接の質問(+回答) •Javaフロー制御インタビューの質問(+回答) •Java例外インタビューの質問(+回答) •Javaアノテーションインタビューの質問(+回答) •SpringFrameworkのインタビューに関する上位の質問(現在の記事) 目次 1.はじめに 2.スプリングコア Q1。Spring Frameworkとは何ですか? Q2。Springを使用する利点は何ですか? Q3。どの春のサブプロジェクトを知っていますか?それらを簡単に説明してください。 Q4。依存性注入とは何ですか? Q5。どうすれば春に豆を注入できますか? Q6。豆を注入する最良の方法とその理由 Q7。BeanfactoryとApplicationcontextの違いは何ですか? Q8。春の豆とは何ですか? Q9。Spring FrameworkのデフォルトのBeanスコープは何ですか? Q10。Beanのスコープを定義す続きを読む »

Java 8インタビューの質問(+回答)

この記事はシリーズの一部です。•Javaコレクションのインタビューの質問 •Java型システムのインタビューの質問 •Java同時実行インタビューの質問(+回答) •Javaクラスの構造と初期化の面接の質問 •Java8インタビューの質問(+回答)(現在の記事)•Javaインタビューの質問でのメモリ管理(+回答) •JavaGenericsの面接の質問(+回答) •Javaフロー制御インタビューの質問(+回答) •Java例外インタビューの質問(+回答) •Javaアノテーションインタビューの質問(+回答) •SpringFrameworkの面接に関する上位の質問 1.はじめに この記事では、インタビュー中に出てくる可能性のあるJDK8関連の質問のいくつかを探ります。 Java 8は、新しい言語機能とライブラリクラスが満載のプラットフォームリリースです。これらの新機能のほとんどは、よりクリーンでコンパクトなコードを実現することを目的としており、Javaでサポートされたことのない新機能を追加するものもあります。 2. Java8の一般知識 Q1。Java 8で追加された新機能は何ですか? Java 8にはいくつかの新機能が付属していますが、最も重要なものは次のとおりです。 ラムダ式-アクションをオブジェクトとして扱うことを可能にする新しい言語機続きを読む »

Javaでの配列とリスト間の変換

1。概要 この簡単な記事では、コアJavaライブラリ、GuavaまたはApacheCommonsCollectionsを使用して配列とリストを変換する方法を説明します。 この記事は、ここBaeldungの「Java– BacktoBasic」シリーズの一部です。 2.リストを配列に変換します 2.1。プレーンJavaの使用 プレーンJavaを使用したリストから配列への変換から始めましょう: @Test public void givenUsingCoreJava_whenListConvertedToArray_thenCorrect() { List sourceList = Arrays.asList(0, 1, 続きを読む »

JavaでのhashCode()のガイド

1。概要 ハッシュはコンピュータサイエンスの基本的な概念です。 など- Javaでは、効率的なハッシュアルゴリズムは、私たちが用意して最も人気のあるコレクションのいくつかの後ろに立つのHashMap(での綿密な一見のためのHashMap、この記事をチェックして自由に感じる)とHashSetの。 この記事では、hashCode()がどのように機能するか、コレクションでどのように機能するか、そしてそれを正しく実装する方法に焦点を当てます。 2.データ構造でのhashCode()の使用 コレクションに対する最も単純な操作は、特定の状況では非効率になる可能性があります。 たとえば、これは線形検索をトリガーしますが、これは巨大なサイズのリストには非常に効果的ではありません。 List words = Arrays.asList("Welcome", "to", "Baeldung"); if (words.contains("Baeldung")) { System.out.println("Baeldung is in the list"); } Javaは、この問題を具体的に処理するための多数のデータ構造を提供します。たとえば、いくつかのMapインターフェースの実装はハッシュテーブルです。 ハッシュテーブルを使用する場合、これらのコレクション続きを読む »

java.lang.reflect.InvocationTargetExceptionの原因は何ですか?

1。概要 Java Reflection APIを使用する場合、java.lang.reflect.InvocationTargetExceptionが発生するのが一般的です。このチュートリアルでは、簡単な例を使用して、それとその処理方法を見ていきます。 2.の原因にInvocationTargetException これは主に、リフレクションレイヤーを操作して、基になる例外自体をスローするメソッドまたはコンストラクターを呼び出そうとしたときに発生します。 リフレクションレイヤーは、メソッドによってスローされた実際の例外をInvocationTargetExceptionでラップします。例を挙げて理解してみましょう。 意図的に例外をスローするメソッドを使用してクラスを作成しましょう。 public class InvocationTargetExample { public int divideByZeroExample() { return 1 / 0; } } それでは、Simple JUnit5テストでリフレクションを使用して上記のメソッドを呼び出しましょう。 InvocationTargetExample targetExample = new InvocationTargetExample(); Method method = InvocationTarget続きを読む »

Javaで数値を小数点以下N桁に丸める方法

1。概要 この短い記事では、Javaで数値を小数点以下n桁に丸める方法を見ていきます。 2.Javaの10進数 Javaには、10進数の格納に使用できる2つのプリミティブ型(floatとdouble)が用意されています。Doubleは、デフォルトで使用されるタイプです。 double PI = 3.1415; ただし、通貨などの正確な値に両方のタイプを使用しないでください。そのために、また丸めのために、BigDecimalクラスを使用できます。 3.10進数のフォーマット 小数点以下n桁の10進数を出力するだけの場合は、出力文字列を単純にフォーマットできます。 System.out.printf("Value with 3 digits after decim続きを読む »

Javaでのバイナリツリーの実装

1.はじめに この記事では、Javaでのバイナリツリーの実装について説明します。 この記事のために、int値を含むソートされた二分木を使用します。 2.二分木 二分木は、各ノードが最大2つの子を持つことができる再帰的なデータ構造です。 一般的なタイプの二分木は二分探索木であり、すべてのノードの値が左側のサブツリーのノード値以上で、右側のサブツリーのノード値以下です。木。 このタイプの二分木の簡単な視覚的表現は次のとおりです。 実装には、int値を格納し、各子への参照を保持する補助Nodeクラスを使用します。 class Node { int value; Node left; Node right; Node(int value) { this.value = value; right = null; left = null; } } 次に、通常はルートと呼ばれるツリーの開始ノードを追加しましょう。 public class BinaryTree { Node root; // ... } 3.一般的な操作 それでは、二分木で実行できる最も一般的な操作を見てみましょう。 3.1。要素の挿入 ここで取り上げる最初の操作は、新しいノードの挿入です。 まず、ツリーをソートしたままにするために、新しいノードを追加する場所を見つける必要があります。ルートノードか続きを読む »

Javaでファイルを読み取る方法

1。概要 このチュートリアルでは、Javaでファイルから読み取るさまざまな方法について説明します。 最初に、標準のJavaクラスを使用して、クラスパス、URL、またはJARファイルからファイルをロードする方法を説明します。 第二に、我々は持つコンテンツ読み方を参照してくださいよBufferedReaderの、スキャナ、StreamTokenizer、DataInputStreamを、たSequenceInputStream、およびFileChannelのを。また、UTF-8でエンコードされたファイルの読み取り方法についても説明します。 最後に、Java7およびJava8でファイルをロードおよび読み取るための新しい手法について説明します。 この記事は、ここBaeldungの「Java– BacktoBasic」シリーズの一部です。 2.セットアップ 2.1入力ファイル この記事のほとんどの例では、次の1行を含むファイル名fileTest.txtのテキストファイルを読み取ります。 Hello, world! いくつかの例では、別のファイルを使用します。このような場合、ファイルとその内容について明示的に言及します。 2.2ヘルパーメソッド コアJavaクラスのみを使用した一連のテスト例を使用し、テストでは、Hamcrestマッチャーを使用したアサーションを使用します。続きを読む »

JavaのXOR演算子

1。概要 この短いチュートリアルでは、JavaXOR演算子について学習します。XOR演算について少し理論を説明してから、Javaでそれらを実装する方法を見ていきます。 2.ザ・XOR演算子 XOR演算のセマンティクスを少し思い出させることから始めましょう。XOR、または論理演算排他的論理和は、2つのブールオペランドとリターンを取る場合はtrueとオペランドが異なっている場合にのみ。したがって、2つのオペランドの値が同じ場合はfalseを返します。 したがって、XOR演算子は、たとえば、同時に真になることができない2つの条件をチェックする必要がある場合に使用できます。 AとBの2つの条件を考えてみましょう。次に、次の表にA XORBの可能な値を示します。 A XOR Bの操作はと等価である(A AND!B)OR(!AとB) 。わかりやすくするために括弧が含まれていますが、AND演算子がOR演算子よりも優先されるため、オプションです。 3. Javaでそれを行う方法は? それでは、JavaでXOR演算を表現する方法を見てみましょう。もちろん、&&と||を使用することもできます。演算子ですが、これから説明するように、これは少し言葉が多いかもしれません。 ディーゼルとマニュアルの2つのブール属性を持つ自動車クラスを想像してみてください。そして今、車がディー続きを読む »

Stream.reduce()のガイド

1。概要 Stream APIは、並列化もサポートする中間、削減、および端末機能の豊富なレパートリーを提供します。 より具体的には、リダクションストリーム操作では、シーケンス内の要素に結合操作を繰り返し適用することにより、要素のシーケンスから単一の結果を生成できます。 このチュートリアルでは、汎用のStream.reduce()操作を見て、いくつかの具体的なユースケースでそれを確認します。 2.重要な概念:アイデンティティ、アキュムレータ、およびコンバイナ Stream.reduce()操作の使用について詳しく調べる前に、操作の参加要素を個別のブロックに分割しましょう。そうすれば、それぞれが果たす役割をより簡単に理解できます。 Identity –削減操作の初期値であり、ストリームが空の場合のデフォルトの結果である要素 アキュムレータ–2つのパラメータをとる関数:リダクション操作の部分的な結果とストリームの次の要素 コンバイナ–リダ続きを読む »

SpringMVCチュートリアル

1。概要 これは、Javaベースの構成とXML構成の両方を使用してSpringMVCプロジェクトをセットアップする方法を示す簡単なSpringMVCチュートリアルです。 Spring MVCプロジェクトのMaven依存関係については、SpringMVC依存関係の記事で詳しく説明されています。 2. Spring MVCとは何ですか? 名前が示すように、これはModel-View-Controller、つまりMVCパターンを処理するSpringフレームワークのモジュールです。これは、MVCパターンのすべての利点とSpringの便利さを兼ね備えています。 Springは、DispatcherServletを使用してフロントコントローラーパターンでMVCを実装します。続きを読む »

春のチュートリアル

Spring Frameworkは、JavaでWebアプリケーションを構築することに焦点を当てた、成熟した強力で柔軟性の高いフレームワークです。 Springの主な利点の1つは、アプリケーション構築の低レベルの側面のほとんどを処理して、実際に機能とビジネスロジックに集中できるようにすることです。 もう1つの長所は、フレームワークが非常に成熟していて確立されている一方で、非常に積極的に維持されており、活発な開発コミュニティがあることです。これにより、非常に最新の状態になり、現在Javaエコシステムと整合しています。 もちろん、Springでうまく機能することを学ぶことはたくさんあります。 始めましょう。 春の基本 まず、フレームワークのいくつかのコアな側面から始めます。 SpringBeanアノテーション 春のプロフィール 春の物件(人気) Springを使用したプロジェクト構成 春の例外(シリーズ) Spring @ Qualifierアノテーション JavaフレームワークとしてSpringを選択する理由 SpringでのgetBean()の理解 春の豆とは何ですか? Springの@Componentと@Repositoryおよび@Service SpringCoreアノテーション SpringでのXMLベースのインジェクシ続きを読む »

Javaでの待機とスリープの違い

1。概要 この短い記事では、コアJavaの標準のsleep ()メソッドとwait()メソッドを見て、それらの違いと類似点を理解します。 2.待機とスリープの一般的な違い 簡単に言えば、wait()はスレッドの同期に使用されるインスタンスメソッドです。 java.lang.Objectで直接定義されているため、任意のオブジェクトで呼び出すことができますが、同期されたブロックからのみ呼び出すことができます。オブジェクトのロックを解除して、別のスレッドがジャンプしてロックを取得できるようにします。 一方、Thread.sleep()は、任意のコンテキストから呼び出すことができる静的メソッドです。Thread.sleep()は現在のスレッドを一時停止し、ロックを解放し続きを読む »

Javaでのマージソート

1.はじめに このチュートリアルでは、マージソートアルゴリズムとそのJavaでの実装について説明します。 マージソートは最も効率的なソート手法の1つであり、「分割統治」パラダイムに基づいています。 2.アルゴリズム マージソートは「分割統治」アルゴリズムであり、最初に問題をサブ問題に分割します。サブ問題の解決策の準備ができたら、それらを組み合わせて問題の最終的な解決策を取得します。 これは、メインの問題ではなくサブの問題を処理するため、再帰を使用して簡単に実装できるアルゴリズムの1つです。 アルゴリズムは、次の2ステップのプロセスとして説明できます。 分割:このステップでは、入力配列を2つに分割します。ピボットは、配列の中点です。このステップは、分割するハーフアレイがなくなるまで、すべてのハーフアレイに対して再帰的に実行されます。 征服:このステップでは、分割された配列を下から上に並べ替えてマージし、並べ替えられた配列を取得します。 次の図は、配列{10、6、8、5、7、3、4}の例の完全なマージソートプロセスを示しています。 図を詳しく見ると、サイズが1になるまで、配列が再帰的に2つに分割されていることがわかります。サイズが1になると、マージプロセスが実行され、並べ替え中に配列のマージが開始されます。 3.実装 実装のために、入力配列とその長さをパ続きを読む »

Javaで文字列が数値かどうかを確認する

1.はじめに 多くの場合、文字列を操作しているときに、文字列が有効な数値であるかどうかを判断する必要があります。 このチュートリアルでは、指定された文字列が数値であるかどうかを検出する複数の方法を検討します。最初にプレーンJavaを使用し、次に正規表現を使用し、最後に外部ライブラリを使用します。 さまざまな実装について説明したら、ベンチマークを使用して、どの方法が最適かを判断します。 2.前提条件 メインコンテンツに進む前に、いくつかの前提条件から始めましょう。 この記事の後半では、pom.xmlに依存関係を追加するApacheCommons外部ライブラリを使用します。 org.apache.commons commons-lang3 3.9 このライブラリの最新バージョンは、MavenCentralにあります。 3.プレーンJavaの使用 おそらく、文字列が数値であるかどうかを確認する最も簡単で信頼性の高い方法は、Javaの組み込みメソッドを使用して文字列を解析することです。 Integer.parseInt(String) Float.parseFloat(String) Double.parseDouble(String) Long.parseLong(String) 新しいB続きを読む »

Javaでのコンパレータと比較可能

1.はじめに Javaでの比較は、そうでないまでは非常に簡単です。 カスタムタイプを使用する場合、または直接比較できないオブジェクトを比較しようとする場合は、比較戦略を利用する必要があります。簡単に作成できますが、ComparatorまたはComparableインターフェイスを使用します。 2.例の設定 サッカーチームの例を見てみましょう。ここでは、プレーヤーをランキングで並べたいと考えています。 簡単なPlayerクラスを作成することから始めます。 public class Player { private int ranking; private String name; private int age; // constructor, getters, setters } 次に、PlayerSorterクラスを作成してコレクションを作成し、続きを読む »

Javaでの配列の初期化

1。概要 このクイックチュートリアルでは、配列を初期化するさまざまな方法と、これらの微妙な違いについて説明します。 2.一度に1つの要素 単純なループベースの方法から始めましょう。 for (int i = 0; i < array.length; i++) { array[i] = i + 2; } また、多次元配列を一度に1要素ずつ初期化する方法も見てみましょう。 for (int i = 0; i < 2; i++) { for (int j = 0; j < 5; j++) { array[i][j] = j + 1; } } 3.宣言時 宣言時に配列を初期化しましょう。 String array[] = new String[] { "Toyota", "Mercedes", "BMW", "Volkswagen", "Skoda" }; 配列をインスタンス化するときに、そのタイプを指定する必要はありません。 int array[] = { 1, 2, 3, 4, 5 }; このアプローチを使用して宣言した後、配列を初期化することはできないことに注意してください。そうしよ続きを読む »

OutOfMemoryError:GCオーバーヘッド制限を超えました

1。概要 簡単に言えば、JVMは、オブジェクトが使用されなくなったときにメモリを解放します。このプロセスはガベージコレクション(GC)と呼ばれます。 GCオーバーヘッド制限超過エラーは、家族からの1つであるjava.lang.OutOfMemoryErrorをとリソース(メモリ)枯渇の指標です。 この簡単な記事では、java.lang.OutOfMemoryError:GC Overhead LimitExceededエラーの原因とその解決方法について説明します。 2.GCオーバーヘッド制限超過エラー OutOfMemoryErrorは、java.lang.VirtualMachineErrorのサブクラスです。リソースの利用に関連する問題が発生すると、JVMによってスローされます。より具体的には、エラーは、JVMがガベージコレクションの実行に多くの時間を費やし、ごくわずかなヒープスペースしか再利続きを読む »

Javaで範囲内の乱数を生成する

1。概要 このチュートリアルでは、範囲内で乱数を生成するさまざまな方法について説明します。 2.範囲内の乱数の生成 2.1。Math.random Math.randomはランダム与える二以上0.0未満1.0に等しい値。 Math.randomメソッドを使用して、指定された範囲の乱数を生成してみましょう。 public int getRandomNumber(int min, int max) { return (int) ((Math.random() * (max - min)) + min); } なぜそれが機能するのですか?さて、Math.randomが0.0を返したときに何が起こるかを見てみましょう。これは可能な限り低い出力です。 0.0 * (max - min) + min => min したがって、取得できる最小の数値は最小です。 Math.randomが1.0を返す場合、それは可能な限り最高の出力であり、次のよ続きを読む »

Spring @ Autowiredのガイド

1。概要 Spring 2.5以降、フレームワークはアノテーション駆動型の依存性注入を導入しました。この機能の主なアノテーションは@Autowiredです。これにより、SpringはコラボレーションBeanを解決してBeanに注入できます。 このチュートリアルでは、最初に自動配線を有効にする方法といろいろBeanを自動配線する方法。その後、@ Qualifierアノテーションを使用してBeanの競合を解決する方法と、潜在的な例外シナリオについて説明します。 2. @ Autowiredアノテーションの有効化 Springフレームワークは、自動依存性注入を可能にします。言い換えると、Spring構成ファイルですべてのBean依存関係を宣言することにより、SpringコンテナーはコラボレーションBean間の関係を自動配線できます。これはSpringBean自動配線と呼ばれます。 アプリケーションでJavaベースの構成を使用するには、アノテーション駆動型インジェクションを有効にしましょうSpring構成をロードするには: @Configuration @ComponentScan("com.baeldung.autowire.sample") public class AppConfig {} または、 アノテーションは主に、SpringXM続きを読む »

Javaで文字列を日付に変換する

1。概要 このチュートリアルでは、StringオブジェクトをDateオブジェクトに変換するいくつかの方法について説明します。私たちは、新しいから始めましょう日時API - java.time古いを見る前のJava 8で導入されたjava.util.Dateのも、日付を表すために使用されるデータタイプを。 最後に、Joda -TimeとApache Commons LangDateUtilsクラスを使用して変換するためのいくつかの外部ライブラリについても見ていきます。 2.文字列をLocalDateまたはLocalDateTimeに変換する LocalDateとLocalDateTimeは、日付を表す不変の日時オブジェクトであり、後には日付と時刻を表します。デフォルトでは、Javaの日付はISO-8601形式であるため、この形式で日付と時刻を表す文字列がある場合は、これらのクラスのparse() APIを直接使用できます。 この新しいAPIについてもう少し詳しく説明します。 2.1。使用して解析のAPIを Date-Time APIは、日付と時刻の情報を含む文字列を解析するためのparse()メソッドを提供します。StringオブジェクトをLocal続きを読む »

SpringBootを学ぶ

Spring Bootは、Springプラットフォームへの独創的で簡単に始められる追加機能であり、最小限の労力でスタンドアロンの実稼働グレードのアプリケーションを作成するのに非常に役立ちます。 このシリーズでは、最初にSpringBootの基本について説明します。読者は、開始方法、Spring BootとSpringの違い、アプリケーションをカスタマイズしてテストする方法を学びます。 次に、永続性、DevOpsツールなどの選択された高度なトピック、およびSpringBootの使用を開始するのに役立つその他のいくつかの便利なトピックについて説明します。 SpringBoot-基本 Spring Bootチュートリアル–シンプルなアプリケーションをブートストラップする SpringとSpringBootの比較 SpringBootアノテーション SpringBootスターターの紹介 SpringBootプロジェクトの推奨パッケージ構造 スプリングブートアクチュエータ Spring BootWebアプリケーションを構成する SpringBootを使用した初期データのロードに関するクイックガイド SpringBoot-プロパティ SpringとSpringBootのプロパティ(人気) Spring Bootの@ConfigurationPro続きを読む »

Springによる制御の反転と依存性注入の概要

1。概要 この記事では、IoC(制御の反転)とDI(依存性注入)の概念を紹介し、次にこれらがSpringフレームワークでどのように実装されているかを見ていきます。 2.制御の反転とは何ですか? 制御の反転は、ソフトウェアエンジニアリングの原則であり、プログラムのオブジェクトまたは部分の制御をコンテナまたはフレームワークに転送します。これは、オブジェクト指向プログラミングのコンテキストで最も頻繁に使用されます。 カスタムコードがライブラリを呼び出す従来のプログラミングとは対照的に、IoCを使用すると、フレームワークがプログラムのフローを制御し、カスタムコードを呼び出すことができます。これを有効にするには、フレームワークは追加の動作が組み込まれた抽象化を使用します。独自の動作を追加する場合は、フレームワークのクラスを拡張するか、独自のクラスをプラグインする必要があります。 このアーキテクチャの利点は次のとおりです。 タスクの実行をその実装から切り離す 異なる実装間の切り替えを容易にします プログラムのモジュール性の向上 コンポーネントを分離するか、その依存関係をモックし、コンポーネントがコントラクトを介して通信できるようにすることで、プログラムのテストがより簡単になります 制御の反転は、戦略設計パターン、サービスロケーターパターン、ファクトリパターン、依存性注入続きを読む »

Javaで文字列を逆にする方法

1。概要 このクイックチュートリアルでは、Javaで文字列を逆にする方法を見ていきます。 プレーンJavaソリューションを使用してこの処理を開始します。次に、ApacheCommonsなどのサードパーティライブラリが提供するオプションについて説明します。 さらに、文中の語順を逆にする方法を示します。 2.従来のforループ Javaでは文字列が不変であることはわかっています。不変オブジェクトは、完全に作成された後も内部状態が一定のままであるオブジェクトです。 したがって、文字列を変更して元に戻すことはできません。このため、別の文字列を作成する必要があります。 まず、forループを使用した基本的な例を見てみましょう。最後の要素から最初の要素までの文字列入力を繰り返し処理し、すべての文字を新しい文字列に連結します。 public String reverse(String input) { 続きを読む »

Javaでのクイックソートアルゴリズムの実装

1。概要 このチュートリアルでは、Javaの実装に焦点を当てて、QuickSortアルゴリズムについて詳しく説明します。 また、その長所と短所について説明し、時間の複雑さを分析します。 2.クイックソートアルゴリズム クイックソートは、分割統治法を活用したソートアルゴリズムです。平均的なO(n log n)の複雑さを持ち、特にビッグデータ量に対して最も使用されるソートアルゴリズムの1つです。 クイックソートは安定したアルゴリズムではないことを覚えておくことが重要です。安定ソートアルゴリズムは、同じ値を持つ要素が、入力リストに表示されるのと同じ順序でソートされた出力に表示されるアルゴリズムです。 入力リストは、ピボットと呼ばれる要素によって2つのサブリストに分割されます。ピボットよりも小さい要素を持つサブリストと、ピボットよりも大きい要素を持つサブリスト。このプロセスは、サブリストごとに繰り返されます。 最後に、ソートされたすべてのサブリストがマージされて、最終出力が形成されます。 2.1。アルゴリズムの手順 リストからピボットと呼ばれる要素を選択します。これを使用して、リストを2つのサブリストに分割します。 ピボットの周りのすべての要素を並べ替えます。値が小さい要素はその前に配置され、ピボットよりも大きい要素はすべて後に配置されます。このステップの後、ピボットは続きを読む »

Javaでの二分探索アルゴリズム

1。概要 この記事では、単純な線形検索に対するバイナリ検索の利点について説明し、Javaでの実装について説明します。 2.効率的な検索の必要性 私たちがワイン販売ビジネスに従事していて、何百万ものバイヤーが毎日私たちのアプリケーションにアクセスしているとしましょう。 私たちのアプリを介して、顧客はnドル未満の価格のアイテムを除外し、検索結果からボトルを選択して、カートに追加することができます。毎秒価格制限のあるワインを求める何百万人ものユーザーがいます。結果は速い必要があります。 バックエンドでは、アルゴリズムがワインのリスト全体を線形検索して、顧客が入力した価格制限とリスト内のすべてのワインボトルの価格を比較します。 次に、価格が制限価格以下のアイテムを返します。この線形探索の時間計算量はO(n)です。 これは、システム内のワインボトルの数が多いほど、時間がかかることを意味します。検索時間は、導入された新しいアイテムの数に比例して増加します。 アイテムをソートされた順序で保存し始め、バイナリ検索を使用してアイテムを検索すると、O(log n)の複雑さを実現できます。 バイナリ検索では、検索結果にかかる時間はデータセットのサイズに応じて自然に増加しますが、比例するわけではありません。 3.二分探索 簡単に言えば、アルゴリズムはキー値を配列の中央の要素と比較します。続きを読む »

Javaのモジュロ演算子

1。概要 この短いチュートリアルでは、モジュロ演算子とは何か、およびいくつかの一般的なユースケースでJavaでモジュロ演算子を使用する方法を示します。 2.モジュロ演算子 Javaの単純な除算の欠点から始めましょう。 除算演算子の両側のオペランドの型がintの場合、演算の結果は別のintになります。 @Test public void whenIntegerDivision_thenLosesRemainder() { assertThat(11 / 4).isEqualTo(2); } オペランドの少なくとも1つがfloat型またはdouble型の場合、同じ除算で異なる結果が得られます。 @Test public void whenDoubleDivision_thenKeepsRemainder() { assertThat(11 / 4.0).isEqualTo(2.75); } 整数を除算すると、除算演算の余りが失われることがわかります。 モジュロ演算子は、まさにこの剰余を与えます。 @Test public void whenModulo_th続きを読む »

Javaタイマー

1.タイマー–基本 TimerとTimerTaskは、バックグラウンドスレッドでタスクをスケジュールするために使用されるjavautilクラスです。一言で言えば– TimerTaskは実行するタスクであり、Timerはスケジューラーです。 2.タスクを1回スケジュールする 2.1。与えられた遅延の後 タイマーを使用して単一のタスクを実行することから始めましょう: @Test public void givenUsingTimer_whenSchedulingTaskOnce_thenCorrect() { TimerTask task = new TimerTask() { public void run() { System.out続きを読む »

Javaジェネリックスの基礎

1.はじめに Java Genericsは、バグを減らし、型に抽象化レイヤーを追加することを目的として、JDK5.0で導入されました。 この記事は、Javaのジェネリックスの簡単な紹介であり、その背後にある目標と、それらを使用してコードの品質を向上させる方法を示しています。 2.ジェネリック医薬品の必要性 整数を格納するためにJavaでリストを作成したいシナリオを想像してみましょう。私たちは書きたくなることがあります: List list = new LinkedList(); list.add(new Integer(1)); Integer i = list.iterator().next(); 驚いたことに、コンパイラは最後の行について文句を言います。どのデータ型が返されるかはわかりません。コンパ続きを読む »

JavaExecutorServiceのガイド

1。概要 ExecutorServiceは、非同期モードでのタスクの実行を簡素化するJDKによって提供されるフレームワークです。一般的に、ExecutorServiceは、タスクを割り当てるためのスレッドとAPIのプールを自動的に提供します。 2.インスタンス化ExecutorServiceの 2.1。エグゼキュータクラスのファクトリメソッド ExecutorServiceを作成する最も簡単な方法は、Executorsクラスのファクトリメソッドの1つを使用することです。 たとえば、次のコード行は、10個のスレッドを持つスレッドプールを作成します。 ExecutorService executor = Executors.newFixedThreadP続きを読む »

Java8の新機能

1。概要 この記事では、Java8の最も興味深い新機能のいくつかを簡単に見ていきます。 ここでは、インターフェイスのデフォルトメソッドと静的メソッド、メソッド参照、およびオプションについて説明します。 Java 8のリリースのいくつかの機能(ストリームAPI、ラムダ式、関数型インターフェース)については、個別に検討する価値のある包括的なトピックであるため、すでに説明しました。 2.インターフェイスのデフォルトメソッドと静的メソッド Java 8より前は、インターフェースはパブリック抽象メソッドしか持つことができませんでした。すべての実装クラスに新しいメソッドの実装を作成させることなく、既存のインターフェイスに新しい機能を追加することはできませんでした。また、実装を使用してインターフェイスメソッドを作成することもできませんでした。 Java 8以降、インターフェイスには静的メソッドとデフォルトメソッドを含めることができ、インターフェイスで宣言されているにもかかわらず、動作が定義されています。 2.1。静的メソッド インターフェイスの次のメソッドを検討してください(このインターフェイスをVehicleと呼びましょう)。 static String続きを読む »

Javaのスタックメモリとヒープスペース

1.はじめに アプリケーションを最適な方法で実行するために、JVMはメモリをスタックメモリとヒープメモリに分割します。新しい変数とオブジェクトを宣言したり、新しいメソッドを呼び出したり、文字列を宣言したり、同様の操作を実行したりするたびに、JVMはスタックメモリまたはヒープスペースからこれらの操作にメモリを指定します。 このチュートリアルでは、これらのメモリモデルについて説明します。それらの間のいくつかの重要な違い、それらがRAMに格納される方法、それらが提供する機能、およびそれらを使用する場所をリストアップします。 2.Javaのスタックメモリ Javaのスタックメモリは、静的メモリの割り当てとスレッドの実行に使用されます。これには、メソッドに固有のプリミティブ値と、メソッドから参照されるヒープ内のオブジェクトへの参照が含まれます。 このメモリへのアクセスは後入れ先出し(LIFO)の順序です。新しいメソッドが呼び出されるたびに、スタックの最上位に、プリミティブ変数やオブジェクトへの参照など、そのメソッドに固有の値を含む新しいブロックが作成されます。 メソッドが実行を終了すると、対応するスタックフレームがフラッシュされ、フローは呼び出し元のメソッドに戻り、次のメソッドに使用できるスペースができます。 2.1。スタックメモリの主な機能 これまでに説明したこととは別に、スタ続きを読む »

オンラインJavaコンパイラ

1.はじめに オンラインコンパイラは、ソースコードをコンパイルしてオンラインで実行できるようにするツールです。これは、特にJavaの新入生、家庭教師、またはインタビュアーにとって素晴らしいオプションです。さらに、コードを共有したり、プライベートセッションやグループセッションで共同作業したりするのは非常に簡単です。 それ以外に、JDKやIDEをインストールする必要はありません。 この記事では、そこにあるトップのJavaオンラインコンパイラについて説明します。 2. JDoodle JDoodleは、Javaを含む多くのプログラミング言語でソースコードをコンパイルして実行するための簡単で迅速な方法です。さらに、JDoodleは、MySqlおよびMongoDBと連携するための端末、ピアプログラミングツール、コードをリモートで実行するためのAPI、およびブログやWebサイトの埋め込み機能を提供します。 そのUIには、ユーザーフレンドリーなエディターと次のような入力フィールドがあります。 コマンドライン引数 インタラクティブモード JDKバージョン8から10が利用可能です Mavenリポジトリから直接外部ライブラリをアタッチします。必要なのは、グループ、アーティファクトID、およびライブラリのバージョンを指定することだけです。 さらに、ソースファイルを開いて保存続きを読む »

BufferedReaderのガイド

1。概要 BufferedReaderは、文字入力ストリームからのテキストの読み取りを簡素化するクラスです。テキストデータの効率的な読み取りを可能にするために、文字をバッファリングします。 このチュートリアルでは、BufferedReaderクラスの使用方法を見ていきます。 2.BufferedReaderを使用する場合 一般に、BufferedReaderは、ファイル、ソケット、その他のあらゆる種類の入力ソースからテキストを読み取りたい場合に便利です。 簡単に言うと、文字のチャンクを読み取って内部バッファに格納することで、I / O操作の数を最小限に抑えることができます。バッファにはデータがありますが、リーダーは基になるストリームから直接読み取るのではなく、バッファから読み取ります。 2続きを読む »

Javaでオブジェクトのディープコピーを作成する方法

1.はじめに Javaでオブジェクトをコピーする場合、考慮する必要のある2つの可能性があります。浅いコピーと深いコピーです。 浅いコピーは、フィールド値のみをコピーする場合のアプローチであるため、コピーは元のオブジェクトに依存している可能性があります。ディープコピーアプローチでは、ツリー内のすべてのオブジェクトがディープコピーされるようにするため、コピーは、変更される可能性のある以前の既存のオブジェクトに依存しません。 この記事では、これら2つのアプローチを比較し、ディープコピーを実装するための4つの方法を学習します。 2.Mavenのセットアップ 3つのMaven依存関係(Gson、Jackson、Apache Commons Lang)を使用して、ディープコピーを実行するさまざまな方法をテストします。 これらの依存関係をpom.xmlに追加しましょう: com.google.code.gson gson 2.8.2 commons-lang commons-lang 2.6 com.fasterxml.jackson.core jackson-databind 2.9.3 Gson、Jackson、およびApache Commons Langの最新バージョンは、MavenCentralにあります。 3.モデル さまざまなメソッドを比較してJavaオブジェクトを続きを読む »

Javaシリアル化の概要

1.はじめに シリアル化とは、オブジェクトの状態をバイトストリームに変換することです。デシリアライズは逆になります。別の言い方をすれば、シリアル化とは、Javaオブジェクトをバイトの静的ストリーム(シーケンス)に変換し、データベースに保存したり、ネットワーク経由で転送したりすることです。 2.シリアル化と逆シリアル化 シリアル化プロセスはインスタンスに依存しません。つまり、オブジェクトを1つのプラットフォームでシリアル化し、別のプラットフォームで逆シリアル化できます。シリアル化の対象となるクラスは、Serializableの特別なマーカーインターフェイスを実装する必要があります。 ObjectInputStreamとObjectOutputStreamはどちらも、それぞれjava.io.InputStreamとjava.io.OutputStreamを拡張する高レベルのクラスです。ObjectOutputStreamは、オブジ続きを読む »

Javaで配列をコピーする方法

1。概要 このクイック記事では、Javaでのさまざまな配列コピー方法について説明します。配列のコピーは簡単な作業のように見えるかもしれませんが、注意深く行わないと、予期しない結果やプログラムの動作を引き起こす可能性があります。 2.システムクラス コアJavaライブラリ– System.arrayCopy()から始めましょう。これにより、配列がソース配列から宛先配列にコピーされ、指定された長さまでソース位置からターゲット位置へのコピーアクションが開始されます。 ターゲット配列にコピーされる要素の数は、指定された長さに等しくなります。配列のサブシーケンスを別の配列にコピーする簡単な方法を提供します。 配列引数のいずれかがnullの場合、NullPo続きを読む »

JavaでMath.powを使用する

1。概要 数の累乗は、乗算でその数を使用する回数を意味します。これはJavaで簡単に計算できます。 2. Math.pow例 例を見る前に、メソッドのシグネチャを見てみましょう。 public double pow(double a, double b) このメソッドはaをbの累乗に上げ、結果をdoubleとして返します。言い換えれば、aはそれ自体でb倍になります。 ここで簡単な例を見てみましょう。 int intResult = (int) Math.pow(2, 3); 出力は8になります。整数の結果が必要な場合は、上記の例のintキャストが必要であることに注意してください。 ここで、引数としてdoubleを渡して、結果を確認しましょう。 double dblResult = Math.pow(4.2, 3); 出力は74.08800000000001になります。 ここでは、double値に関心があるため、結果をintにキャストしていません。値がdoubleであるため、DecimalFormatを簡単に構成して使用し、値を小数点以下2桁に丸めて、74.09に続きを読む »

Java –ランダムな文字列を生成する

このチュートリアルでは、Javaでランダムな文字列を生成する方法を示します。最初に標準のJavaライブラリを使用し、次にJava 8バリアントを使用し、最後にApache CommonsLangライブラリを使用します。 この記事は、ここBaeldungの「Java– BacktoBasic」シリーズの一部です。 1.プレーンJavaを使用してランダムな無制限の文字列を生成する 簡単に始めて、7文字に制限されたランダムな文字列を生成しましょう。 @Test public void givenUsingPlainJava_whenGeneratingRandomStringUnbounded_thenCorrect() { byte[] array = new byte[7]; // length is 続きを読む »

Javaのwaitおよびnotify()メソッド

1.はじめに この記事では、Javaの最も基本的なメカニズムの1つであるスレッド同期について説明します。 最初に、いくつかの重要な並行性関連の用語と方法論について説明します。 そして、wait()とnotify()をよりよく理解することを目的として、並行性の問題に対処する単純なアプリケーションを開発します。 2.Javaでのスレッド同期 マルチスレッド環境では、複数のスレッドが同じリソースを変更しようとする場合があります。スレッドが適切に管理されていない場合、もちろん、これは一貫性の問題につながります。 2.1。Javaの保護されたブロック Javaで複数のスレッドのアクションを調整するために使用できるツールの1つは、保護されたブロックです。このようなブロックは、実行を再開する前に特定の条件をチェックし続けます。 それを念頭に置いて、以下を利用します。 Object.wait() –スレッドを一時停止します Object.続きを読む »

Javaのダイクストラ最短経路アルゴリズム

1。概要 この記事で強調しているのは、グラフ理論で知られている基本的な理論上の問題の1つである最短経路問題(SPP)と、それを解決するためにダイクストラアルゴリズムを使用する方法です。 アルゴリズムの基本的な目標は、開始ノードとグラフの残りの部分との間の最短経路を決定することです。 2.ダイクストラの最短経路問題 正に重み付けされたグラフと開始ノード(A)が与えられると、ダイクストラはグラフ内のソースからすべての宛先までの最短パスと距離を決定します。 ダイクストラアルゴリズムの中心的な考え方は、開始ノードとすべての可能な宛先の間の長いパスを継続的に排除することです。 プロセスを追跡するには、決済済みと未決済の2つの異なるノードのセットが必要です。 解決されたノードは、ソースからの最小距離がわかっているノードです。未決済のノードセットは、ソースから到達できるノードを収集しますが、開始ノードからの最小距離続きを読む »

Javaでペアを使用する

1。概要 この簡単な記事では、ペアと呼ばれる非常に便利なプログラミングの概念について説明します。ペアは、単純なキーと値の関連付けを処理する便利な方法を提供し、メソッドから2つの値を返したい場合に特に役立ちます。 ペアの簡単な実装は、コアJavaライブラリで利用できます。さらに、Apache CommonsやVavrなどの特定のサードパーティライブラリは、それぞれのAPIでこの機能を公開しています。 2.コアJavaの実装 2.1。ペアクラス ペアのクラスはで見つけることができjavafx.utilパッケージ。このクラスのコンストラクターは、キーとそれに対応する値の2つの引数を取ります。 Pair pair = new Pair(1, "One"); Integer key = pair.getKey(); String value = pair.getValue(); この例は、ペアの概念を使用した単純な整数から文字列へのマッピングを示しています。 示されているように、ペアオブジェクトのキーはgetKey()メソッドを呼び出すことによって取得され、値はgetValue()を呼び出すことによって取得されます。 2.2。AbstractMap.SimpleEntr続きを読む »

SpringとSpringBootの比較

1。概要 この記事では、標準のSpringフレームワークとSpringBootの違いを見ていきます。 ここでは、MVCやセキュリティなどのSpringのモジュールが、コアSpringで使用した場合とBootで使用した場合の違いに焦点を当てて説明します。 2.春とは? 簡単に言えば、SpringフレームワークはJavaアプリケーションを開発するための包括的なインフラストラクチャサポートを提供します。 依存性注入のようないくつかの優れた機能と、次のようなすぐに使えるモジュールが満載です。 Spring JDBC 春のMVC 春のセキュリティ 春のAOP 春のORM 春のテスト これ続きを読む »

Javaで同期されたキーワードのガイド

1。概要 この簡単な記事では、Javaで同期ブロックを使用する方法を紹介します。 簡単に言うと、マルチスレッド環境では、2つ以上のスレッドが可変共有データを同時に更新しようとすると競合状態が発生します。Javaは、共有データへのスレッドアクセスを同期することにより、競合状態を回避するメカニズムを提供します。 同期とマークされたロジックの一部が同期ブロックになり、一度に1つのスレッドのみを実行できるようになります。 2.なぜ同期するのですか? 合計を計算し、複数のスレッドがcalculate()メソッドを実行する典型的な競合状態を考えてみましょう。 public class BaeldungSynchronizedMethods { private int sum = 0; public void calculate() { setSum(getSum() + 1); } // standard setters and getters } そして、簡単なテストを書いてみましょう。 @Test public void givenMultiThread_whenNonSyncMethod() { ExecutorService service = Executors.newFixedThreadPool(3); BaeldungSynchronizedMethods sum続きを読む »

JSONの概要-Java(org.json)

1.JSON-Javaの概要 JSON(JavaScript Object Notationの頭字語)は軽量のデータ交換形式であり、クライアント/サーバー通信に最も一般的に使用されます。読み取り/書き込みが簡単で、言語に依存しません。JSON値は、別のJSONオブジェクト、配列、数値、文字列、ブール値(true / false)、またはnullにすることができます。 このチュートリアルでは、利用可能なJSON処理ライブラリの1つを使用してJSONを作成、操作、および解析する方法を説明します。つまり、JSON-Javaライブラリはorg.jsonとも呼ばれます。 2.前提条件 始める前に、pom.xmlに次の依存関係を追加する必要があります。 org.json json 20180130 最新バージョンは、MavenCentralリポジトリにあります。 このパッケージはすでにAndroidSDKに含まれているため、同じものを使用している間は含めないでください。 3.JavaのJSON [パッケージorg.json] JSON-Javaライブラリはorg.jsonとも呼ばれ(Googleのorg.json.simpleと混同しないでください)、JavaでJSONを解析および操作するために使用されるクラスを提供します。 さらに、このライブラリは、JSON、XML、HTT続きを読む »

Windows、Linux、MacにMavenをインストールする方法

1。概要 簡単に言えば、MavenはJavaアプリケーションを構築するためのコマンドラインツールです。 Mavenプロジェクトは、便利なように、プリコンパイルされたバージョンのMavenを含む単純なZIPファイルを提供します。インストーラーはありません。Mavenを実行するための前提条件と環境を設定するのはあなた次第です。 Apache Mavenのインストールは、アーカイブを抽出し、mvnコマンドを使用してbinフォルダーをPATHに追加する簡単なプロセスです。 1.1。前提条件 MavenはJavaで書かれています(そして主にJVMプログラムの構築に使用されます)。したがって、主要な前提条件はJavaJDKです。Java JDKをインストールする必要があり(たとえば、Oracleのダウンロードサイトから)、スペースを含まないパス名にインストールする必要があります。 Javaをインストールしたら、JavaJDKからのコマンドがPATH環境変数に含まれていることを確認する必要があります。実行中、例: java -version 正しいバージョン番号を表示する必要があります。 2.WindowsへのMavenのインストール WindowsにMavenをインストールするには、Apache Mavenサイトにアクセスして最新バージョンをダウンロードし、Maven zipフ続きを読む »

Javatuplesの紹介

1。概要 タプルは、相互に関連している場合と関連していない場合があるいくつかの要素のコレクションです。言い換えると、タプルは匿名オブジェクトと見なすことができます。 たとえば、[“ RAM”、16、“ Astra”]は、3つの要素を含むタプルです。 この記事では、javatuplesという名前のタプルベースのデータ構造を操作できる非常に単純なライブラリについて簡単に説明します。 2.組み込みのJavatuplesクラス このライブラリは、タプルに関連する要件のほとんどを満たす10の異なるクラスを提供します。 単位 ペア トリプレット カルテット クインテット セクステット セプテット オクテット エジプト九柱の神々 10年 上記のクラスに加えて、KeyValueとLabelValueの2つの追加クラスがあり、Pairと同様の機能を提供しますが、セマンティクスが異なります。 公式サイトによると、javatuplesのすべてのクラスはタイプセーフで不変です。各タプルクラスは、Iterable、Serializable、およびComparableインターフェイスを実装します。 3.Ma続きを読む »

春の依存性注入

依存性注入は、Springフレームワークの基本的な側面であり、Springコンテナーがオブジェクトを他のオブジェクトまたは「依存性」に「注入」します。 簡単に言えば、これによりコンポーネントの疎結合が可能になり、コンポーネントを管理する責任がコンテナに移ります。 ここで、Springを使用したDIについてさらに詳しく見ていきましょう。 DIの基本 Springによる制御の反転と依存性注入の概要 Springでのコンストラクター依存性注入 Spring @ Autowiredのガイド Springでの配線:@ Autowired、@ Resource、@ Inject Spring @Primary Annotation @春の注文 SpringでのXMLベースのインジェクション DIの高度なトピック 春–コレクションの注入 ジェネリック型の春の自動配線 Lombokを使用したSpringでのコンストラクター注入 Spring FactoryBeanの使用方法は? 春の@Lookupアノテーション SpringでプロトタイプBeanをシングルトンインスタンスに注入する DI例外 春の満たされていない依存関係 春の循環依存 春のNoSuchBeanDefinitionException続きを読む »

Java8日付/時刻APIの概要

1。概要 Java 8では、古いjava.util.Dateとjava.util.Calendarの欠点に対処するために、日付と時刻の新しいAPIが導入されました。 この記事の一環として、のは、既存の中の問題から始めましょう日付とカレンダーのAPIと新しいJava 8方法のは、説明しましょう日付と時刻のAPIはそれらに対処。 我々はまた、の一部である新しいJava 8プロジェクトのコアクラスをいくつか見ていきましょうjava.timeのようなパッケージLOCALDATE、にLocalTime、LocalDateTimeを、ZonedDateTime、期間、期間およびそのサポートされるAPI。 2.既存の日付/時刻APIの問題 スレッドセーフ– DateクラスとCalendarクラスはスレッドセーフではないため、開発者は並行性の問題をデバッグするのが難しいという頭痛の種に対処し、スレッドセーフを処理するための追加のコードを作成する必要があります。逆に新しい日付と時刻のAPIは、Java 8で導入されたので、頭痛離れて開発者からの同時実行を取って、不変で、スレッドセーフです。 APIの設計と理解の続きを読む »

Hibernate1対多の注釈チュートリアル

1.はじめに このクイックHibernateチュートリアルでは、XMLの代わりにJPAアノテーションを使用した1対多のマッピングの例を紹介します。 また、双方向の関係とは何か、それらがどのように矛盾を生み出す可能性があるか、そして所有権の概念がどのように役立つかについても学びます。 2.説明 簡単に言うと、1対多のマッピングとは、テーブル内の1つの行が別のテーブル内の複数の行にマップされることを意味します。 次のエンティティ関係図を見て、1対多の関連付けを確認しましょう。 この例では、カートごとにテーブルがあり、アイテムごとに別のテーブルがあるカートシステムを実装します。1つのカートに多くのアイテムを含めることができるため、ここでは1対多のマッピングを行います。 これがデータベースレベルで機能する方法は、カートテーブルの主キーとしてcart_idを持続きを読む »

文字列をバイト配列に変換し、Javaで逆にする

1.はじめに Javaでは、文字列とバイト配列の間で変換する必要が頻繁にあります。このチュートリアルでは、これらの操作について詳しく説明します。 まず、文字列をバイト配列に変換するさまざまな方法を見ていきます。次に、同様の操作を逆に見ていきます。 2.文字列をバイト配列に変換する A列は、 JavaでのUnicode文字の配列として格納されています。それをバイト配列に変換するために、文字のシーケンスをバイトのシーケンスに変換します。この翻訳では、Charsetのインスタンスを使用します。このクラスは、文字のシーケンスとバイトのシーケンスの間のマッピングを指定します。 上記のプロセスをエンコーディングと呼びます。 Javaでは、さまざまな方法で文字列をバイト配列にエンコードできます。それぞれを例を挙続きを読む »

Javaでのオブジェクト型キャスト

1。概要 Java型システムは、プリミティブと参照の2種類の型で構成されています。 この記事ではプリミティブ変換について説明しました。ここでは、Javaが型を処理する方法を十分に理解するために、参照のキャストに焦点を当てます。 2.プリミティブとリファレンス プリミティブ変換と参照変数のキャストは似ているように見えるかもしれませんが、それらはまったく異なる概念です。 どちらの場合も、あるタイプを別のタイプに「変換」しています。ただし、簡単に言うと、プリミティブ変数にはその値が含まれており、プリミティブ変数の変換はその値の不可逆的な変化を意味します。 double myDouble = 1.1; int myInt = (i続きを読む »

POJOクラスとは何ですか?

1。概要 この短いチュートリアルでは、「Plain OldJavaObject 」または略してPOJOの定義を調査します。 POJOをJavaBeanと比較する方法と、POJOをJavaBeanに変換することがどのように役立つかを見ていきます。 2.プレーンオールドJavaオブジェクト 2.1。POJOとは何ですか? POJOについて話すとき、私たちが説明しているのは、特定のフレームワークへの参照がない単純なタイプです。POJOには、プロパティとメソッドの命名規則はありません。 基本的な従業員POJOを作成しましょう。3つのプロパティがあります。名、姓、および開始日: public class EmployeePojo続きを読む »

Javaの三項演算子

1。概要 三項条件演算子?:は、Javaで式を定義することを可能にします。これは、値を返すif-elseステートメントの要約形式です。 このチュートリアルでは、三項構造をいつどのように使用するかを学習します。まず、その構文を確認してから、その使用法を調べます。 2.構文 Javaの三項演算子?:は、3つのオペランドを受け入れる唯一の演算子です: booleanExpression ? expression1 : expression2 最初のオペランドはブール式である必要があり、2番目と3番目のオペランドは何らかの値を返す任意の式にすることができます。三元構造は、最初のオペランドがtrueと評価された場合は、expression1を出力として返し、それ以外の場合はexpression2を返します。 3.三項演算子続きを読む »

Java8の関数型インターフェース

1.はじめに この記事は、Java 8に存在するさまざまな機能インターフェース、それらの一般的な使用例、および標準JDKライブラリーでの使用法のガイドです。 2. Java8のラムダ Java 8は、ラムダ式の形で強力な新しい構文の改善をもたらしました。ラムダは、メソッドに渡されたり、メソッドから返されたりするなど、ファーストクラスの言語市民として処理できる無名関数です。 Java 8より前は、通常、単一の機能をカプセル化する必要があるすべての場合にクラスを作成していました。これは、プリミティブ関数表現として機能するものを定義するための多くの不要な定型コードを意味していました。 ラムダ、関数型インターフェース、およびそれらを操作するためのベストプラクティスは、一般に、記事「ラムダ式と関数型インターフェース:ヒントとベストプラクティス」で説明されています。このガイドでは、java.util.functionパッケージに含まれる特定の機能インターフェースに焦点を当てています。 3.機能インターフェイス すべての機能インターフェイスには、有益な@FunctionalInterfaceアノテーションを付けることをお勧めします。これにより、このインターフェイスの目的が明確に伝達されるだけでなく、注釈付きインターフェイスが条件を満たさない場合にコンパイラがエラーを生成できるようになり続きを読む »

プロジェクトロンボクの紹介

1.繰り返しのコードを避ける Javaは優れた言語ですが、一般的なタスクや一部のフレームワークプラクティスへの準拠のために、コードで実行する必要があることに対して冗長すぎる場合があります。これらは、プログラムのビジネス面に真の価値をもたらさないことがよくあります。これが、ロンボクがあなたの人生をより幸せにし、あなた自身をより生産的にするためにここにある場所です。 それが機能する方法は、ビルドプロセスにプラグインし、コードで導入するプロジェクトアノテーションの数に従って、Javaバイトコードを.classファイルに自動生成することです。 使用しているシステムに関係なく、ビルドに含めるのは非常に簡単です。彼らのプロジェクトページには、詳細についての詳細な説明があります。私のプロジェクトのほとんどはMavenベースなので、通常は提供されたスコープに依存関係を削除するだけで、次のようにできます。 ... org.projectlombok lombok 1.18.10 provided ... ここで利用可能な最新バージョンを確認してください。 Lombokに依存しても、.jarのユーザーがそれに依存することはありません。これは、ランタイムではなく、純粋なビルド依存関係であるためです。 2.ゲッター/セッター、コンストラクター–繰り返しが多い パブリックgetterメソッドと続きを読む »

Javaアサーションの使用

1.はじめに Javaのassertキーワードを使用すると、開発者はプログラムの特定の仮定または状態をすばやく確認できます。 この記事では、Javaのassertキーワードの使用方法を見ていきます。 2.Javaアサーションの歴史 Javaアサートそれはかなり長い間の周りされていますので、キーワードは、Javaの1.4で導入されました。ただし、定型文を大幅に減らし、コードを読みやすくすることができる、あまり知られていないキーワードのままです。 たとえば、コードでは、アプリケーションが正しく機能しない可能性のある特定の条件を確認する必要があることがよくあります。通常、次のように記述します。 Connection conn = getConnection(); if(conn == null) { throw new RuntimeException("Connection 続きを読む »

演算子のJavaインスタンス

1.はじめに このクイックチュートリアルでは、Javaのinstanceof演算子について学習します。 2.演算子のインスタンスとは何ですか? instanceofは、オブジェクトが特定のタイプであるかどうかをテストするために使用される二項演算子です。操作の結果はtrueまたはfalseのいずれかです。インスタンスを型と比較するため、型比較演算子とも呼ばれます。 不明なオブジェクトをキャストする前に、instanceofチェックを常に使用する必要があります。これを行うと、実行時にClassCastExceptionを回避するのに役立ちます。 instanceof演算子の基本的な構文は次のとおりです。 (object) instanceof (type) instanceof演算子の基本的な例を見てみましょう。まず、クラスRoundを作成しましょう: public class Round { // implementation details } 次に、Roundを拡張するクラスRingを作成しましょう: public class Ring extends Round { // implementation details } instanceofを使用して、RingのインスタンスがRoundタイプであるかどうかを確認できます。 @Test public void続きを読む »

Javaでの並べ替え

1。概要 この記事では、Java7およびJava8で配列、リスト、セット、およびマップにソートを適用する方法について説明します。 2.配列によるソート まず、Arrays.sort()メソッドを使用して整数配列を並べ替えることから始めましょう。 我々は、次の定義しますint型で配列を@Before JUnitの方法: @Before public void initVariables () { toSort = new int[] { 5, 1, 89, 255, 7, 88, 200, 123, 66 }; sortedInts = new int[] {1, 5, 7, 66, 88, 89, 123, 200, 255}; sortedRangeInts = new int[] {5, 1, 89, 7, 88, 200, 255, 123, 66}; ... } 2.1。完全な配列の並べ替え 単純なArray.sort() APIを使用してみましょう。 @Test public void givenIntArray_whenUsingSort_thenSortedArray() { Arrays.sort(toSort); assertTrue(Arrays.equals(toSort, sortedInts)); } ソートされていない配列が完全にソートされ続きを読む »

ジャクソンObjectMapperの紹介

1。概要 このチュートリアルでは、Jackson ObjectMapperクラスの理解と、JavaオブジェクトをJSONにシリアル化し、JSON文字列をJavaオブジェクトに逆シリアル化する方法に焦点を当てます。 ジャクソンライブラリ全般についてさらに理解するには、ジャクソンチュートリアルから始めるのがよいでしょう。 2.依存関係 まず、次の依存関係をpom.xmlに追加しましょう。 com.fasterxml.jackson.core jackson-databind 2.11.1 この依存関係により、次のライブラリも推移的にクラスパスに追加されます。 ジャクソン-注釈 ジャクソンコア jackson-databindには、常にMaven中央リポジトリの最新バージョンを使用してください。 3.ObjectMapperを使用した読み取りと書き込み 基本的な読み取りおよ続きを読む »

オブジェクトヒープ用に十分なスペースを予約できませんでした

1。概要 このチュートリアルでは、いくつかの考えられるシナリオを実行しながら、「オブジェクトヒープ用に十分なスペースを予約できませんでした」エラーの原因を学習します。 2.症状 「オブジェクトヒープ用に十分なスペースを予約できませんでした」は、実行中のシステムで発生したメモリの制約のためにJavaプロセスが仮想マシンを作成できない場合に発生する特定のJVMエラーです。 java -Xms4G -Xmx4G -jar HelloWorld.jar Error occurred during initialization of VM Could not reserve enough space for object heap Error: Could not create the Java Virtual Machine. Error: A fatal exception has occurred. Program will exit. 一般に、エラーが発生した場合、2つのシナリオが考えられます。 まず、最大ヒープサイズ制限パラメーター(-Xmx)を使用してJavaプロセスをランチすると、その値は、プロセスがオペレーティングシステムで持つことができる値よりも大きくなります。 ヒープサイズの制限は、いくつかの制約続きを読む »

Java8のガイドオプション

1。概要 このチュートリアルでは、Java8で導入されたOptionalクラスを示します。 このクラスの目的は、null参照の代わりにオプションの値を表すためのタイプレベルのソリューションを提供することです。 オプションクラスを気にする必要がある理由をより深く理解するには、オラクルの公式記事を参照してください。 2.オプションのオブジェクトの作成 オプションのオブジェクトを作成するには、いくつかの方法があります。 空のオプションオブジェクトを作成するには、そのempty()静的メソッドを使用する必要があります。 @Test public void whenCreatesEmptyOptional_thenCorrect() { Optional empty = Optional.empty(); assertFalse(empty.isPresent()); } isPresent()メソッドを使用して、Optionalオブジェクト内に値続きを読む »

Javaでカスタム例外を作成する

1.はじめに このチュートリアルでは、Javaでカスタム例外を作成する方法について説明します。 チェックされた例外とチェックされていない例外の両方に対して、ユーザー定義の例外がどのように実装および使用されるかを示します。 2.カスタム例外の必要性 Java例外は、プログラミングで発生するはずのほとんどすべての一般的な例外をカバーします。 ただし、これらの標準的な例外を独自に補足する必要がある場合があります。 カスタム例外を導入する主な理由は次のとおりです。 ビジネスロジックの例外–ビジネスロジックとワークフローに固有の例外。これらは、アプリケーションユーザーまたは開発者が正確な問題が何であるかを理解するのに役立ちま続きを読む »

RestTemplateのガイド

1。概要 このチュートリアルでは、Spring RESTクライアント(RestTemplate)を使用でき、適切に使用できる幅広い操作について説明します。 すべての例のAPI側では、ここからRESTfulサービスを実行します。 2.廃止通知 Spring Framework 5の時点で、SpringはWebFluxスタックとともに、WebClientと呼ばれる新しいHTTPクライアントを導入しました。 WebClientは、RestTemplateの最新の代替HTTPクライアントです。従来の同期APIを提供するだけでなく、効率的なノンブロッキングおよび非同期アプローチもサポートします。 とはいえ、新しいアプリケーションを開発している場合や古いアプリケーションを移行している場合は、WebClientを使用することをお勧めします。今後、RestTemplateは将来のバージョンで非推奨になります。 3.GETを使用してリソースを取得します 3.1。プレーンJSONを取得する getForEntity() APIを使用した簡単な例を使用して、簡単に始めてGETリクエストについて説明しましょう。 RestTemplate restTemplate = new RestTemplate(); String fooResourceUrl = "//localhost:8080続きを読む »

JavaでのXMLガイド

1。概要 これは、JavaでXMLを操作するためのガイドです。 解析とバインドの両方について、最も一般的なJavaXML処理ライブラリについて説明します。 2.DOMパーサー 簡単に言うと、DOMパーサーはXMLドキュメント全体を処理し、それをメモリにロードして、ドキュメントのツリー表現を構築します。 役立つリソース JavaでXMLファイルを読み取る方法–(DOMパーサー) Java DOMパーサー–XMLドキュメントの解析 Java XMLDOMパーサーのサンプルチュートリアル Javaでの簡単なDOM解析 3.SAXパーサー SAXパーサーはイベントベースのパーサーです。ドキュメント全体をメモリにロードせずに、コールバックを使用してXMLドキュメントを解析します。 役立つリソース JavaでXMLファイルを読み取る方法–(SAXパーサー) Java SAXパーサー–XMLドキュメントの解析 SAXパーサーとDefaultHandlerを使用してxmlを解析する方法 SaxParserを使用したXML解析 XMLをオブジェクトのリストに解析するためのJavaSAXパーサーのサンプルチュートリアル 4.StAXパーサー StAXパーサーは、DOMパーサーとSAXパーサーの中央値です。 役立つリソース Java StAX I続きを読む »

Javaのグラフ

1。概要 このチュートリアルでは、データ構造としてのグラフの基本的な概念を理解します。 また、Javaでの実装と、グラフで可能なさまざまな操作についても説明します。また、グラフの実装を提供するJavaライブラリについても説明します。 2.グラフのデータ構造 グラフは、ソーシャルメディアプラットフォーム上の人々のネットワークのように接続されたデータを格納するためのデータ構造です。 グラフは頂点とエッジで構成されます。頂点はエンティティ(たとえば、人)を表し、エッジはエンティティ間の関係(たとえば、人の友情)を表します。 これをよりよく理解するために、簡単なグラフを定義しましょう。 ここでは、5つの頂点と6つのエッジを持つ単純なグラフを定続きを読む »

Java equals()およびhashCode()コントラクト

1。概要 このチュートリアルでは、密接に関連する2つのメソッドequals()とhashCode()を紹介します。それらの相互関係、それらを正しくオーバーライドする方法、および両方をオーバーライドする必要がある理由、またはどちらもオーバーライドしない理由に焦点を当てます。 2. equals() オブジェクトクラス定義の両方のequals()とhashCode()メソッドのメソッド-これらの2つの方法が暗黙のうちにすべてのJavaクラスで定義されていることを意味し、私たちが作成したものを含みます: class Money { int amount; String currencyCode; } Money income = new Money(55, "USD"); Money expenses = new Money(55, "USD"続きを読む »

Javaでマップを反復処理する

1。概要 この簡単な記事では、Javaでマップのエントリを反復処理するさまざまな方法を見ていきます。 簡単に言うと、keySet()、valueSet()、またはentrySet()を使用してマップのコンテンツを抽出できます。これらはすべてセットであるため、同様の反復原理がすべてに適用されます。 Map.entrySetのAPIは、要素からマップのコレクションビューを返しマップクラスを。単一のマップエントリへの参照を取得する唯一の方法は、このコレクションビューのイテレータからです。 T彼entry.getKey()はキー戻るentry.getValue()に対応する値を返します。 これらのいくつかを見てみましょう。 2.のentrySetおよびループについて まず、エントリセットを使用してマップを反復処理する方法を見てみましょう。 public void ite続きを読む »

コマンドラインからJavaアプリケーションを実行する

1。概要 通常、意味のあるすべてのアプリケーションには、依存関係として1つ以上のJARファイルが含まれています。ただし、JARファイル自体がスタンドアロンアプリケーションまたはWebアプリケーションを表す場合があります。 この記事では、スタンドアロンアプリケーションのシナリオに焦点を当てます。以降、これをJARアプリケーションと呼びます。 このチュートリアルでは、最初にJARアプリケーションを作成する方法を学習します。後で、コマンドライン引数を使用して、または使用せずにJARアプリケーションを実行する方法を学習します。 2.JARアプリケーションを作成します JARファイルには、1つ以上のメインクラスを含めることができます。各メインクラスは、アプリケーションのエントリポイントです。したがって、理論的には、JARファイルには複数のアプリケーションを含めることができますが、実行するには少なくとも1つのメインクラスが含まれている必要があります。 JARファイルでは、マニフェストファイルに1つのエントリポイントを設定できます。この場合、JARファイルは実行可能JARです。メインクラスはそのJARファイルに含まれている必要があります。 まず、クラスをコンパイルして、マニフェストファイルを使用して実行可能JARを作成する方法の簡単な例を見てみましょう。 $ javac com/ba続きを読む »

Javaの「final」キーワード

1。概要 継承により既存のコードを再利用できますが、さまざまな理由で拡張性に制限を設定する必要がある場合があります。最後のキーワードは、私たちはまさにそれを行うことができます。 このチュートリアルでは、finalキーワードがクラス、メソッド、および変数に対して何を意味するかを見ていきます。 2.ファイナルクラス 最終としてマークされたクラスは拡張できません。Javaコアライブラリのコードを見ると、そこに多くの最終クラスがあります。一例はStringクラスです。 Stringクラスを拡張し、そのメソッドのいずれかをオーバーライドして、すべてのStringインスタンスを特定のStringサブクラスのインスタンスに置き換えることができる場合の状況を考慮してください。 その場合、Stringオブジェクトに対する操作の結果は予測できなくなります。そして、Stringクラスがどこでも使用されていることを考えると、それは受け入れられません。続きを読む »

Springの@Controllerおよび@RestControllerアノテーション

1。概要 このクイックチュートリアルでは、違いについて説明します@Controllerと@RestController春のMVCで注釈を。 最初の注釈は、従来のSpringコントローラーに使用され、非常に長い間フレームワークの一部でした。 @RestControllerアノテーションは、RESTfulWebサービスの作成を簡素化するためにSpring4.0で導入されました。これは、@ Controllerと@ResponseBodyを組み合わせた便利なアノテーションです。これにより、コントローラークラスのすべてのリクエスト処理メソッドに@ResponseBodyアノテーションを付ける必要がなくなります。 2. Spring MVC @Controller クラシックコントローラーには、@ Controllerアノテーションを付けることができます。これは単に@Comp続きを読む »

文字列内の文字の出現をカウントする

1。概要 Javaで文字列内のcharの出現回数をカウントする方法はたくさんあります。 この簡単な記事では、最初にコアJavaライブラリを使用し、次にSpringやGuavaなどの他のライブラリやフレームワークを使用して文字をカウントする方法のいくつかの例に焦点を当てます。 2.コアJavaライブラリの使用 2 0.1。命令型アプローチ 一部の開発者は、コアJavaの使用を好む場合があります。文字列内のcharの出現回数をカウントする方法はたくさんあります。 シンプルで素朴なアプローチから始めましょう: String someString = "elephant"; char someChar = 'e'; int count = 0; for (int i = 0; i < someString.l続きを読む »

CSVファイルを配列に読み込む

1。概要 簡単に言うと、CSV(コンマ区切り値)ファイルには、コンマ区切り文字で区切られた整理された情報が含まれています。 このチュートリアルでは、CSVファイルを配列に読み込むさまざまな方法を検討します。 2. BufferedReaderの中java.io まず、使用するラインで、レコードラインを読んであげる)のreadLineを(にBufferedReaderの。次に、コンマ区切り文字に基づいて行をトークンに分割します。 List records = new ArrayList(); try (BufferedReader br = new BufferedReader(new FileReader("book.cs続きを読む »

SOLID原則への確かなガイド

1.はじめに このチュートリアルでは、オブジェクト指向設計のSOLIDの原則について説明します。 まず、それらが発生した理由と、ソフトウェアを設計するときにそれらを考慮する必要がある理由を探ることから始めます。次に、要点を強調するために、いくつかのサンプルコードとともに各原則の概要を説明します。 2.SOLID原則の理由 SOLIDの原則は、Robert C.Martinが2000年の論文「DesignPrinciplesandDesignPatterns」で最初に概念化したものです。これらの概念は、後にSOLIDの頭字語を紹介したMichaelFeathersによって構築されました。そして過去20年間で、これらの5つの原則はオブジェクト指向プログラミングの世界に革命をもたらし、ソフトウェアの書き方を変えました。 では、SOLIDとは何ですか?それはどのように私たちがより良いコードを書くのに役立ちますか?簡単に言えば、MartinとFeath続きを読む »

Javaでの文字列の連結

1.はじめに Javaには、文字列の連結専用のメソッドとクラスが多数用意されています。 このチュートリアルでは、それらのいくつかに飛び込み、いくつかの一般的な落とし穴と悪い習慣について概説します。 2. StringBuilder 最初は、謙虚なStringBuilderです。このクラスは、配列を提供ストリング]建物のユーティリティの簡単な作業になり文字列操作を。 StringBuilderクラスを使用して文字列連結の簡単な例を作成しましょう。 StringBuilder stringBuilder = new StringBuilder(100); stringBuilder.append("Baeldung"); stringBuilder.append(" is"); stringBuilder.append(" awesome"); assertEquals("Baeldung is awesome", stringBuilder.toString()); 内部的には、StringBuilderは文字の可変配列を維持します。コードサンプルでは、StringBuilderコンストラクターを使用してこれを初期サイズ100として宣言しました。このサイズ宣言により、StringBuilderは文字列を連結するための非常に効率的な方法になります。 これは、ことは注目にも価続きを読む »

Javaソケットのガイド

1。概要 ソケットプログラミングという用語は、デバイスがすべてネットワークを使用して相互に接続されている複数のコンピューター間で実行されるプログラムを作成することを指します。 ソケットプログラミングに使用できる通信プロトコルには、ユーザーデータグラムプロトコル(UDP)と転送制御プロトコル(TCP)の2つがあります。 2つの主な違いは、UDPがコネクションレス型であるということです。つまり、TCPがコネクション型であるのに対し、クライアントとサーバーの間にセッションはありません。つまり、通信を行うには、まずクライアントとサーバーの間に排他接続を確立する必要があります。 このチュートリアルでは、TCP / IPネットワークを介したソケットプログラミングの概要を示し、 Javaでクライアント/サーバーアプリケーションを作成する方法を示します。UDPは主流のプロトコルではないため、頻繁に使用されることはありません。 2.プロジェクトのセットアップ Javaは、クライアントとサーバー間の低レベルの通信の詳細を処理するクラスとインターフェースのコレクションを提供します。 これらは主にjava.netパッケージに含まれているため、次のインポートを行う必要があります。 import java.net.*; また、通信中に書き込みおよび読み取りを行うための入力ストリームと出力ストリー続きを読む »

SpringおよびJPAとのトランザクション

1。概要 このチュートリアルでは、Spring Transactionsを構成する正しい方法、@ Transactionalアノテーションの使用方法および一般的な落とし穴について説明します。 コアの永続性構成に関するより詳細な説明については、Spring withJPAチュートリアルを確認してください。 基本的に、トランザクションを構成するには、注釈とAOPの2つの異なる方法があり、それぞれに独自の利点があります。ここでは、より一般的なannotation-configについて説明します。 2.トランザクションを構成します Spring 3.1では、@ Configurationクラスで使用してトランザクションサポートを有効にできる@EnableTransactionManagementアノテーションが導入されています。 @Configuration @EnableTransactionManagement public class PersistenceJPAConfig{ @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(){ //... } @Bean public PlatformTransactionManager transactionManager(){ J続きを読む »

Javaのシングルトン

1.はじめに この簡単な記事では、プレーンJavaでシングルトンを実装する最も一般的な2つの方法について説明します。 2.クラスベースのシングルトン 最も一般的なアプローチは、通常のクラスを作成し、次のことを確認してシングルトンを実装することです。 プライベートコンストラクター 唯一のインスタンスを含む静的フィールド インスタンスを取得するための静的ファクトリメソッド 後で使用するために、infoプロパティも追加します。したがって、実装は次のようになります。 public final class ClassSingleton { private static ClassSingleton INSTANCE; private String info = "Initial info class"; private ClassSingleton() { } public static ClassSingleton getInstance() { if(INSTANCE == null) { INSTANCE = new ClassSingleton(); } return INSTANCE; } // getters and setters } これは一般的なアプローチですが、シングルトンを使用する主な理由であるマルチスレッドシナリオでは問題になる可能性があることに続きを読む »

Javadocの概要

1。概要 優れたAPIドキュメントは、ソフトウェアプロジェクトの全体的な成功に寄与する多くの要因の1つです。 幸い、最新バージョンのJDKはすべて、ソースコードに存在するコメントからAPIドキュメントを生成するためのJavadocツールを提供します。 前提条件: JDK 1.4(MavenJavadocプラグインの最新バージョンにはJDK7 +をお勧めします) PATH環境変数に追加されたJDK / binフォルダー (オプション)組み込みツールを備えたIDE 2.Javadocコメント コメントから始めましょう。 Javadocコメントの構造は、通常の複数行コメントと非常によく似ていますが、主な違いは、先頭に追加のアスタリスクがあることです。 // This is a single lin続きを読む »

Javaでのクラスの逆コンパイル

1.はじめに このチュートリアルでは、Javaクラスの逆コンパイルについて説明します。ソースコードが利用できない場合、Javaクラスを逆コンパイルすると、ソースコードの動作をデバッグおよび理解するのに役立ちます。 利用可能なさまざまなオプションを見てみましょう。 2.IDEでの逆コンパイル ほとんどの開発は統合開発環境(IDE)で行われるため、逆コンパイルもIDEで行う必要があることは理にかなっています。 使用するIDEの詳細については、Eclipseでのデバッグ方法とIntelliJIDEAの構成に関する記事を確認してください。 2.1。Eclipse まず、Eclipseでは、Enhanced Class Decompiler(ECD)などのプラグインが必要です。このプラグインは5つの異なる逆コンパイラーを使用します。Ec続きを読む »

Javaでの例外処理

1。概要 このチュートリアルでは、Javaでの例外処理の基本と、そのいくつかの落とし穴について説明します。 2.第一原理 2.1。それは何ですか? 例外と例外処理をよりよく理解するために、実際の比較を行いましょう。 オンラインで商品を注文したが、途中で配達に失敗したと想像してみてください。優れた会社はこの問題を処理し、パッケージが時間どおりに到着するようにパッケージを適切に再ルーティングできます。 同様に、Javaでは、命令の実行中にコードでエラーが発生する可能性があります。優れた例外処理により、エラーを処理し、プログラムを適切に再ルーティングして、ユーザーに前向きなエクスペリエンスを提供できます。 2.2。なぜそれを使うのですか? 通常、理想的な環境でコードを記述します。ファイルシステムには常にファイルが含まれ、ネットワークは正常であり、JVMには常に十分なメモリがあります。これを「ハッピーパス」と呼ぶこともあります。 ただし、本番環境では、ファイルシステムが破損したり、ネットワークが故障したり、JVMのメモリが不足したりする可能性があります。私たちのコードの幸福は、それが「不幸な道」をどのように扱うかにかかっています。 これらの条件はアプリケーションのフローに悪影響を及ぼし、例外を形成するため、これらの条件を処理する必要があります。 public static続きを読む »

Javaで階乗を計算する

1。概要 非負の整数を与えN、階乗未満または等しいすべての正の整数の積であるN。 このクイックチュートリアルでは、Javaで特定の数値の階乗を計算するさまざまな方法について説明します。 2.20までの数の階乗 2.1。forループを使用した階乗 forループを使用した基本的な階乗アルゴリズムを見てみましょう。 public long factorialUsingForLoop(int n) { long fact = 1; for (int i = 2; i <= n; i++) { fact = fact * i; } return fact; } 上記の解決策は、20までの数で正常に機能します。ただし、20より大きい値を試してみると、結果が大きすぎてlongに収まらないため失敗し、オーバーフローが発生します。 これらのそれぞれが少数でのみ機能することに注意して、さらにいくつか見てみましょう。 2.2。Java8ストリームを使用した階乗 Java 8 Stream APIを使用して、階乗を非常に簡単に計算することもできます。 public long factorialUsingStreams(int n) { return LongStream.rangeClosed(1, n) .reduce(1, (long x, long y) -> x * 続きを読む »

Hibernateはプロキシを初期化できませんでした–セッションがありません

1。概要 Hibernateを使用していると、次のようなエラーが発生した可能性があります:org.hibernate.LazyInitializationException:プロキシを初期化できませんでした–セッションがありません。 このクイックチュートリアルでは、エラーの根本原因を詳しく調べ、それを回避する方法を学びます。 2エラーを理解する 開いているHibernateセッションのコンテキスト外で遅延ロードされたオブジェクトにアクセスすると、この例外が発生します。 セッション、レイジー初期化、プロキシオブジェクトとは何か、そしてそれらがHibernateフレームワークでどのように組み合わされるかを理解することが重要です。 セッションは、アプリケーションとデータベース間の会話を表す永続コンテキストです。 遅延読み込みとは、コードでアクセスされるまで、オブジェクトがセッションコンテキストに読み込まれないことを意味します。 Hibernateは、オブジェクトを最初に使用したときにのみデータベースにアクセスする動的プロキシオブジェクトサブクラスを作成します。 このエラーは、プロキシオブジェクトを使用してデータベースから遅延読み込みオブジェクトをフェッチしようとしましたが、Hibernateセッションはすでに閉じられていることを意味します。 3.LazyIniti続きを読む »

Javaがインストールされているかどうかを確認する方法

1。概要 この短いチュートリアルでは、Javaがマシンにインストールされているかどうかを判断するいくつかの方法を見ていきます。 2.コマンドライン まず、コマンドウィンドウまたはターミナルを開いて次のように入力します。 > java -version Javaがインストールされ、PATHが正しく構成されている場合、出力は次のようになります。 java version "1.8.0_31" Java(TM) SE Runtime Environment (build 1.8.0_31-b13) Java HotSpot(TM) Client VM (build 25.31-b07, mixed mode, sharing) それ以外の場合は、以下のようなエラーメッセージが表示され、他の場所で確認する必要があります。 'java' is not recognized as an internal or external command, operable program or batch file. 表示続きを読む »

文字列がJavaの回文であるかどうかを確認します

1.はじめに この記事では、Javaを使用して、特定の文字列が回文であるかどうかを確認する方法を説明します。 回文とは、単語、フレーズ、数字、または「マダム」や「レースカー」など、前方と同じ後方を読み取る文字のシーケンスです。 2.ソリューション 次のセクションでは、特定の文字列が回文であるかどうかを確認するさまざまな方法を見ていきます。 2.1。簡単なアプローチ 指定された文字列を一度に1文字ずつ前後に同時に反復し始めることができます。一致する場合、ループは続行されます。それ以外の場合、ループは終了します。 public boolean isPalindrome(String text) { String clean = text.r続きを読む »

Javaでのfinalizeメソッドのガイド

1。概要 このチュートリアルでは、Java言語のコアな側面であるルートObjectクラスによって提供されるfinalizeメソッドに焦点を当てます。 簡単に言えば、これは特定のオブジェクトのガベージコレクションの前に呼び出されます。 2.ファイナライザーの使用 ファイナライズ()メソッドは、ファイナライザと呼ばれています。 ファイナライザーは、JVMがこの特定のインスタンスをガベージコレクションする必要があると判断したときに呼び出されます。このようなファイナライザーは、オブジェクトを生き返らせるなど、あらゆる操作を実行できます。 ただし、ファイナライザーの主な目的は、オブジェクトがメモリから削除される前に続きを読む »

Javaでの文字列の比較

1。概要 この記事では、Javaで文字列を比較するさまざまな方法について説明します。 文字列をJavaで最も使用されるデータの種類の一つであり、これは当然、非常に一般的に使用される操作です。 2.文字列クラスとの文字列比較 2.1。使い方「==」比較演算子を テキスト値を比較するために「==」演算子を使用することは、Java初心者が犯す最も一般的な間違いの1つです。これは間違っています「==」のみチェック2つの参照平等文字列を、彼らは同じオブジェクトを参照するかどう意味します。 この動作の例を見てみましょう。 String string1 = "using comparison operator"; S続きを読む »

JavaのDAOパターン

1。概要 データアクセスオブジェクト(DAO)パターンは、抽象APIを使用してアプリケーション/ビジネスレイヤーを永続レイヤー(通常はリレーショナルデータベースですが、他の永続メカニズムでもかまいません)から分離できるようにする構造パターンです。 このAPIの機能は、基盤となるストレージメカニズムでのCRUD操作の実行に伴うすべての複雑さをアプリケーションから隠すことです。これにより、お互いについて何も知らなくても、両方のレイヤーを別々に進化させることができます。 このチュートリアルでは、パターンの実装について深く掘り下げ、JPAエンティティーマネージャーへの呼び出しを抽象化するためにそれを使用する方法を学習します。 2.簡単な実装 DAOパターンがどのように機能するかを理解するために、基本的な例を作成しましょう。 ユーザーを管理するアプリケーションを開発したいとしましょう。アプリケーションのドメインモデルがデータベースに完全に依存しないようにするために、これらのコンポーネントを互いにきちんと切り離しておくための単純なDAOクラスを作成します。 2.1。ドメインクラス アプリケーションはユーザーと連携するため、ドメインモデルを実装するために定義する必要があるクラスは1つだけです。 public class User { private String name; pri続きを読む »

文字列の最後の文字を削除する方法は?

1。概要 この簡単な記事では、文字列の最後の文字を削除するためのさまざまな手法を確認して説明します。 2. String.substring()の使用 最も簡単な方法は、Stringクラスの組み込みのsubstring()メソッドを使用することです。 特定の文字列の最後の文字を削除するには、開始インデックスとして0を使用し、最後から2番目の文字のインデックスを使用する必要があります。Stringのlength()メソッドを呼び出し、結果から1を引くことで、これを実現できます。 ただし、このメソッドはnullセーフではなく、空の文字列を使用すると失敗します。 nullと空の文字列の問題を克服するために、メソッドをヘルパークラスでラップできます。 public static String removeLastChar(String s) コードをリファクタリングしてJava8を使用できます。 public static String removeLastCharOptional(String s) { return Optional.ofNullable(s) .filter(str -> str.length() != 0) .map(str -> str.substring(0, str.length() - 1)) .orElse(s); } 3. 続きを読む »

Javaのクラスローダー

1.クラスローダーの概要 クラスローダーは、実行時にJavaクラスをJVM(Java仮想マシン)に動的にロードする役割を果たします。また、これらはJRE(Javaランタイム環境)の一部です。したがって、JVMは、クラスローダーのおかげでJavaプログラムを実行するために、基盤となるファイルやファイルシステムについて知る必要はありません。 また、これらのJavaクラスは一度にメモリにロードされるわけではありませんが、アプリケーションで必要な場合にロードされます。ここで、クラスローダーが登場します。それらは、クラスをメモリにロードする責任があります。 このチュートリアルでは、さまざまなタイプの組み込みクラスローダー、それらがどのように機能するか、および独自のカスタム実装の概要について説明します。 2.組み込みクラスローダーの種類 簡単な例を使用して、さまざまなクラスローダーを使用してさまざまなクラスがどのようにロードされるかを学習することから始めましょう。 public void printClassLoaders() throws ClassNotFoundException { System.out.println("Classloader of this class:" + PrintClassLoader.class.getClassLoader()); Syst続きを読む »

Javaの揮発性キーワードのガイド

1。概要 必要な同期がない場合、コンパイラ、ランタイム、またはプロセッサはあらゆる種類の最適化を適用できます。これらの最適化はほとんどの場合有益ですが、微妙な問題を引き起こす場合もあります。 キャッシングと並べ替えは、並行コンテキストで私たちを驚かせる可能性のある最適化の1つです。JavaとJVMは、メモリの順序を制御するための多くの方法を提供し、volatileキーワードはその1つです。 この記事では、Java言語のこの基本的であるが誤解されがちな概念であるvolatileキーワードに焦点を当てます。最初に、基盤となるコンピュータアーキテクチャがどのように機能するかについて少し背景を説明し、次にJavaでのメモリの順序について理解します。 2.共有マルチプロセッサアーキテクチャ プロセッサは、プログラム命令を実行する責任があります。したがって、プログラム命令と必要なデータの両方をRAMから取得する必要があります。 CPUは1秒あたりかなりの数の命令を実行できるため、RAMからのフェッチはCPUにとってそれほど理想的ではありません。この状況を改善するために、プロセッサは、アウトオブオーダー実行、分岐予測、投機的実行、そしてもちろんキャッシングなどのトリックを使用しています。 ここで、次のメモリ階層が機能します。 さまざまなコアがより多くの命令を実行し、より多くのデー続きを読む »

Javaで単純なHTTPリクエストを実行する

1。概要 このクイックチュートリアルでは、組み込みのJavaクラスHttpUrlConnectionを使用して、JavaでHTTPリクエストを実行する方法を紹介します。 JDK 11以降、JavaはHTTP要求を実行するための新しいAPIを提供することに注意してください。これは、HttpUrlConnectionの代わりとなるHttpClientAPIです。 2. HttpUrlConnection HttpURLConnectionののクラスは、私たちがすることができます任意の追加のライブラリを使用せずに、基本的なHTTPリクエストを実行します。必要なすべてのクラスは、java.netパッケージの一部です。 この方法を使用することの欠点は、コードが他のHTTPライブラリよりも煩雑になる可能性があることと、ヘッダーや認証を追加するための専用の方法など、より続きを読む »