質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

208閲覧

インスタンスメソッドがインスタンスを生成しないで使われている?

hood

総合スコア351

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/09/11 08:13

###インスタンスメソッドがインスタンスを生成しないで使われている?
javaを勉強中のものです。
本のサンプルコードを読み進めていき、分からないところが出てきました。
下記に示すコードのfactory = (Factory)Class.forName(classname).newInstance();という部分についてです。

本でforName()というメソッドは、java.lang.Classのクラスメソッドと紹介されていました。それは納得したのですが、このnewInstance()という部分。こちらはjava.lang.Classのインスタンスメソッドと紹介されていました。

私はインスタンスメソッドを、インスタンスを生成し、その後で使うものと理解していました。しかし、このコードではjava.lang.Classのインスタンスを生成してないように思われます。
それならばnewInstance()が使えないはずなのですが・・・これはどういうことでしょう?

以下にコードを示します。

lang

1package factory; 2 3public abstract class Factory { 4 public static Factory getFactory(String classname) { 5 Factory factory = null; 6 try { 7 factory = (Factory)Class.forName(classname).newInstance();//この部分です! 8 } catch (ClassNotFoundException e) { 9 System.err.println("クラス " + classname + " が見つかりません。"); 10 } catch (Exception e) { 11 e.printStackTrace(); 12 } 13 return factory; 14 } 15 public abstract Link createLink(String caption, String url); 16 public abstract Tray createTray(String caption); 17 public abstract Page createPage(String title, String author); 18} 19

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

しかし、このコードではjava.lang.Classのインスタンスを生成してないように思われます。

たしかに新しいインスタンスは生成していませんが、Class.forNameの返り値がClassインスタンスなので、そこからnewInstance()を呼ぶことができます。

投稿2018/09/11 08:16

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hood

2018/09/11 08:27

的確な説明ありがとうございました! これで本を読み進めていくことができます!
guest

0

Class.forName(classname)

↑こやつが「Classインスタンス」を返すメソッドです。
戻り値が「Classインスタンスなので」

.newInstance();//この部分です!

↑Classインスタンスのインスタンスメソッドが実行可能になります。

java.lang.Class

投稿2018/09/11 08:18

tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hood

2018/09/11 08:24

回答ありがとうございます。 なるほど!そういうことでしたか・・・
hood

2018/09/11 08:26

申し訳ありません、同じ内容の回答があったので、ベストアンサーは先に回答したかたにあげたいと思います・・・でも、本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問