JavaRush /Java Blog /Random-JA /コーヒーブレイク #174。Java でオブジェクトを作成するさまざまな方法。Java で String を In...

コーヒーブレイク #174。Java でオブジェクトを作成するさまざまな方法。Java で String を Int に変換する - 文字列を整数に変換する方法

Random-JA グループに公開済み

Java でオブジェクトを作成するさまざまな方法

出典: Medium このチュートリアルでは、Java でオブジェクトを作成するさまざまな方法を学びます。 コーヒーブレイク #174。 Java でオブジェクトを作成するさまざまな方法。Java で String を Int に変換する - 文字列を整数に変換する方法 - 1Java オブジェクトは Java クラスのインスタンスです。各オブジェクトには状態、動作、識別子があります。フィールド (変数) はオブジェクトの状態を格納し、メソッド (関数) はオブジェクトの動作を示します。クラスは、実行時にオブジェクト インスタンスが作成される「設計図」として機能します。

Java でのオブジェクトの作成

オブジェクトの作成は、クラス フィールド (変数とも呼ばれます) にデータを格納するためにメモリを割り当てるプロセスです。このプロセスは、多くの場合、クラスのインスタンスの作成と呼ばれます。Java でオブジェクトを作成するには 4 つの異なる方法があります。
  1. 新しいキーワードを使って
  2. メソッドnewInstance()
  3. clone()メソッド
  4. オブジェクトの逆シリアル化
ここで、前述の各方法を詳しく見てみましょう。

キーワード新規

これは、Java でオブジェクトを作成する最も一般的な方法です。newキーワードは、指定された型の新しいインスタンスにメモリを割り当てることによって、クラスのインスタンスを作成します。new の後にコンストラクターが来ます。コンストラクターは、オブジェクトの作成と、作成されたオブジェクトのフィールドの初期化を担当する特別なメソッドです。オブジェクトはnew演算子で作成され、コンストラクターで初期化されます。new演算子を使用して Java オブジェクトを作成する例を次に示します。
Date today = new Date();
この式は、新しいDateオブジェクトを生成します( Date はjava.utilパッケージ内のクラスです)。コード内のこの 1 つの句は、宣言、インスタンス化、初期化という 3 つの操作を実行します。Date today は、 todayがDate型のオブジェクトを参照することをコンパイラに通知する変数宣言です。new 演算子はDateクラスをインスタンス化し(メモリ内に新しいDateオブジェクトを作成し)、Date()がオブジェクトを初期化します。以下の例を考えてみましょう。
public class Person {
    private String name;
    private int uid;

    public Person() {
        this.name = "Michael Cole";
        this.uid = 101;
    }

    public Person(String name, int uid) {
        super();
        this.name = name;
        this.uid = uid;
    }

    // getters and setters...

    public static void main(String[] args) {

        Person p1 = new Person();
        Person p2 = new Person("John Bodgan", 102);
        System.out.println("Name: " + p1.getName() + " UID: " + p1.getUid());
        System.out.println("Name: " + p2.getName() + " UID: " + p2.getUid());
    }
}
このコードから、newキーワードを使用してPersonオブジェクトを作成します。
  • p1オブジェクトは、変数名の値を「Michael Cole」に設定し、UID を 101 に設定して、パラメータ化されていないコンストラクターを呼び出します。
  • p2オブジェクトはパラメータ化されたコンストラクターを呼び出し、値「John Bodgan」と 102 をコンストラクターに渡し、これらの値に変数名と UID が割り当てられます。

newInstance() メソッドの使用

Java のnewInstance()メソッドは、指定されたクラスのオブジェクトのインスタンスを動的に作成するために使用されます。newInstance()メソッドには 2 つの標準的な使用法があります。
  • java.lang.Class APIのnewInstance()メソッド
  • java.lang.reflect.Constructor APIのnewInstance()メソッド

クラス API から newInstance() を使用する

実行時にクラスのオブジェクトを作成するには、クラス API からnewInstance()メソッドを呼び出す必要があります。このメソッドは、そのクラスのオブジェクトを返します。java.lang.ClassクラスのnewInstance()メソッドはパラメータや引数をとらないため、そのクラスの引数なしのコンストラクタとして呼び出すことができます。java.lang.ClassクラスのnewInstance()メソッドを使用してPersonクラスのオブジェクトを作成するコード例をいくつか見てみましょう。
public class Person {
    private String name;
    private int uid;

    public Person() {
        this.name = "Carl Max";
        this.uid = 101;
    }

   // getters and setters...
    public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
        Class c = Class.forName("com.medium.option2.Person");
        @SuppressWarnings("deprecation")
        Person p = (Person) c.newInstance();
        System.out.println("Name: " + p.getName());
        System.out.println("UID: " + p.getUid());
    }
}
Class.forName (クラスの完全修飾名) は、 Personという名前のクラスをロードし、次にnewInstance() は、タイプPersonの新しいオブジェクトを作成し、そのオブジェクトへの参照を返します。ここで、 pへのPerson参照を使用して、そのgetters()およびsetter()を呼び出して特定のアクションを実行できます。ご注意ください:
  • Class.forName()newIstance() は両方とも、 tryブロックとcatchブロック、またはthrowsキーワードを使用して処理する必要がある例外をスローします。
  • Class API のnewInstance()メソッドはJava 9 以降非推奨になりました。

コンストラクター API から newInstance() を使用する

Constructorクラス( java.lang.reflect.Constructor ) のnewInstance()メソッドは、パラメータ化されたコンストラクタのパラメータを受け入れることを除いて、ClassクラスのnewInstance()メソッドに似ています。java.lang.reflect.ConstructorクラスのnewInstance()メソッドを使用してPersonクラスのオブジェクトを作成することにより、このアプローチを示してみましょう。
public class PersonTwo {
    private String name;
    private int uid;

    public PersonTwo() {
        this.name = "Maya Kumari";
        this.uid = 101;
    }

    public PersonTwo(String name) {
        this.name = name;
        this.uid = 102;
    }

    public PersonTwo(String name, Integer uid) {
        this.name = name;
        this.uid = uid;
    }

    // getters and setters...
    public static void main(String[] args) {
        try {
            Class.forName("com.medium.option2.PersonTwo");

            Constructor c1 = PersonTwo.class.getConstructor();
            PersonTwo p1 = (PersonTwo) c1.newInstance();
            System.out.println("Name: " + p1.getName());
            System.out.println("UID: " + p1.getUid());

            Constructor c2 = PersonTwo.class.getConstructor(String.class);
            PersonTwo p2 = (PersonTwo) c2.newInstance("James Gunn");
            System.out.println("Name: " + p2.getName());
            System.out.println("UID: " + p2.getUid());

            Constructor c3 = PersonTwo.class.getConstructor(String.class, Integer.class);
            PersonTwo p3 = (PersonTwo) c3.newInstance("Mark Brown", 103);
            System.out.println("Name: " + p3.getName());
            System.out.println("UID: " + p3.getUid());

        } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
}
上記のコードでは、まずClass.forName()メソッド を使用してクラスをロードする必要があります。次に、 getConstructor()メソッドを呼び出して、渡されたパラメーターのデータ型を照合します。最後に、newInstance()メソッドで、必須パラメータ (引数がない場合はnull ) を渡します。newInstance()メソッドは、適切なコンストラクターを呼び出すことによって、 PersonTwoクラスの新しいオブジェクトを返します。

clone() メソッドの使用

clone()メソッドはObjectクラスの一部であり、既存のオブジェクトのコピーを作成するために使用されます。クラス コンストラクターを呼び出さずに、クラスのオブジェクトを作成します。メソッドのクローンを作成するには、対応するクラスがマーカー インターフェイスであるCloneableインターフェイス を実装している必要があります。ここで、 Personクラスのオブジェクトを作成し、それをPersonクラスの別のオブジェクトに複製します。
public class Person implements Cloneable {
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    private String name;
    private int uid;

    public Person(String name, int uid) {
        super();
        this.name = name;
        this.uid = uid;
    }

    // getters and setters...

    public static void main(String[] args) {
        Person p1 = new Person("Ryan", 101);
        try {
            Person p2 = (Person) p1.clone();
            System.out.println("Name: " + p2.getName());
            System.out.println("UID: " + p2.getUid());
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }

    }
}
注記。クローン化されたオブジェクトは、 p2参照を介して同じ元のオブジェクトを参照します。ただし、複製されたオブジェクトには別のメモリが割り当てられます。これは、 p2によって参照されるPersonオブジェクトに加えられた変更は、p1によって参照される元のPersonオブジェクトを変更しないことを意味します。これは、clone()メソッドがオブジェクトの浅いコピーを作成するためです。

オブジェクトの逆シリアル化の使用

オブジェクトの逆シリアル化は、一連のバイト ストリームからオブジェクトを抽出するプロセスです。シリアル化はその逆です。その主な目的は、保存されたオブジェクトをデータベース/ネットワークからメモリに取得することです。オブジェクトをシリアル化または逆シリアル化したい場合は、Serializableインターフェイス(トークン インターフェイス) を実装する必要があります。以下の例を考えてみましょう。
public class PersonDriver {

    public static void main(String[] args) {
        Person p1 = new Person("Max Payne", 101);
        FileOutputStream fileOutputStream;
        try {
            fileOutputStream = new FileOutputStream("link to text file");
            ObjectOutputStream outputStream = new ObjectOutputStream(fileOutputStream);
            outputStream.writeObject(p1);
            outputStream.flush();
            outputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        FileInputStream fileInputStream;
        try {
            fileInputStream = new FileInputStream("link to text file");
            ObjectInputStream inputStream = new ObjectInputStream(fileInputStream);
            Person p2 = (Person) inputStream.readObject();
            System.out.println("Name: " + p2.getName());
            System.out.println("UID: " + p2.getUid());
            inputStream.close();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}
ここではまず、参照p1によってPersonオブジェクトをテキスト ファイルにシリアル化します。writeObject()メソッドは、オブジェクトのバイト ストリームをテキスト ファイルに書き込みます。次に、オブジェクトの逆シリアル化を使用して、Personオブジェクトを抽出してp2に戻します。同様に、readObject()メソッドは、オブジェクトの入力ストリームからオブジェクトを読み取ります。最後に、 Personオブジェクトからコンソールに データを出力します。

結論

この記事では、Java でオブジェクトを作成するさまざまな方法について学びました。まず、最も一般的な方法であるnewキーワードを使用してオブジェクトを作成する方法を検討しました。次に、クラス クラスコンストラクタークラスからnewInstance()メソッドを学習しました。これは、オブジェクトを作成するもう 1 つの一般的な方法です。次に、新しいオブジェクトを作成する代わりに、既存のオブジェクトの浅いコピーを作成するclone()メソッドを使用しました。最後に、オブジェクトのシリアル化と逆シリアル化の概念を使用して、Java でオブジェクトを作成しました。

Java で String to Int - 文字列を整数に変換する方法

出典: FreeCodeCamp 今日は、 Integerクラスの 2 つのメソッド、parseInt()valueOf()を使用して、Java で文字列を整数に変換する方法を学びます。これは、文字列変数の値を使用して数学的演算を実行するときに役立ちます。 コーヒーブレイク #174。 Java でオブジェクトを作成するさまざまな方法。Java で String を Int に変換する - 文字列を整数に変換する方法 - 2

Integer.parseInt を使用して Java で文字列を整数に変換する方法

このオプションは、parseInt()メソッドが整数に変換する文字列をパラメータとして受け取ることを前提としています。
Integer.parseInt(string_varaible)
使用例を見る前に、文字列値と整数を変換せずに追加するとどうなるかを見てみましょう。
class StrToInt {
    public static void main(String[] args) {
        String age = "10";

        System.out.println(age + 20);
        // 1020
    }
}
このコードでは、文字列値「10」を持つ 変数ageを作成しました。整数値に 20 を加算すると、正解の 30 ではなく、誤って 1020 を受け取りました。これは、parseInt()メソッドを使用して修正できます。
class StrToInt {
    public static void main(String[] args) {
        String age = "10";

        int age_to_int = Integer.parseInt(age);

        System.out.println(age_to_int + 20);
        // 30
    }
}
ここでは、年齢変数を整数に変換するために、それをparseInt()メソッド( Integer.parseInt(age) ) にパラメーターとして渡し、 age_to_intという変数に格納しました。これで、別の整数に加算すると、正しい加算が得られます: age_to_int + 20

Integer.valueOf を使用して Java で文字列を整数に変換する方法

valueOf()メソッドはparseInt()メソッドと同じように機能します。整数に変換する必要がある文字列をパラメータとして受け取ります。以下に例を示します。
class StrToInt {
    public static void main(String[] args) {
        String age = "10";

        int age_to_int = Integer.valueOf(age);

        System.out.println(age_to_int + 20);
        // 30
    }
}
上記のコードでは、前のセクションと同じことがわかります。
  • valueOf() : Integer.valueOf(age)にパラメータとして文字列を渡しました。これはage_to_intという変数に格納されました。
  • 次に、作成した変数に 10 を追加しました: age_to_int + 20。結果は 1020 ではなく 30 でした。

結論

この記事では、Java での文字列から整数への変換について説明しました。文字列を整数に変換するには、Integerクラスの 2 つのメソッド、parseInt()valueOf()が使用されました。コーディングを楽しんでください!
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION