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

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

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

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

Q&A

解決済

2回答

2735閲覧

java class呼び出しのエラー

maguro027

総合スコア8

Java

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

URL

URL(ユニフォームリソースロケータ)とは、インターネット上のリソース(Webページや電子メールの宛先等)を特定するための形式的な記号の並びの事を言う。

0グッド

0クリップ

投稿2017/03/25 15:08

###前提・実現したいこと
google.google();を実行し ブラウザにgoogleを表示させたいです

###発生している問題・エラーメッセージ

表示されない 実行はされていている

###該当のソースコード

package hello; import java.awt.Desktop; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; public class google{ /** * @param args */ public void google() { Desktop desktop = Desktop.getDesktop(); String uriString = "http://www.google.co.jp"; System.out.println("システムが起動しました"); try { URI uri = new URI(uriString); desktop.browse(uri); } catch (URISyntaxException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } //// 以下呼び出し //// google google = new google(); google.google();

###試したこと
classの名前の変更など

###補足情報(言語/FW/ツール等のバージョンなど)
テキストエディタ&実行環境は eclipse

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

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

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

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

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

swordone

2017/03/25 15:55

この「以下呼び出し」としている周辺の状況が知りたいです。ただmainメソッドから起動しているということでいいのでしょうか?
maguro027

2017/03/25 16:08

はい、mainから呼び出しています
guest

回答2

0

String uriString = "http://www.google.co.jp";
ではなく
String uriString = "http://www.google.co.jp/";
で動きます

以下で表示されました

java

1import java.awt.Desktop; 2import java.io.IOException; 3import java.net.URI; 4import java.net.URISyntaxException; 5 6public class google{ 7 8 public static void main(String[] args) { 9 10google g=new google(); 11g.google(); 12 13} 14 15 16 public void google() { 17 18 Desktop desktop = Desktop.getDesktop(); 19 String uriString = "http://www.google.co.jp/"; 20 System.out.println("システムが起動しました"); 21 try { 22 URI uri = new URI(uriString); 23 desktop.browse(uri); 24 } catch (URISyntaxException e) { 25 e.printStackTrace(); 26 } catch (IOException e) { 27 e.printStackTrace(); 28 } 29 } 30} 31

投稿2017/03/25 16:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/03/25 16:16

習慣でつい変数は短くしましたが、 google google=new google(); google.google(); でも動きました
guest

0

ベストアンサー

訂正1:swordoneさんご指摘により以下は自分の知識の間違いであることがわかりました。

クラス名と同じ名前のメソッドはコンストラクターという特別なメソッドです。

大変失礼しました。

訂正2: コードにコンパイルエラーがあったので訂正

間違い部分========ここから=======

書いておられるコードはコンパイルエラーになるはずです。

クラス名と同じ名前のメソッドはコンストラクターという特別なメソッドです。

new google()

とするとgoogleクラスのインスタンスの領域が割り当てられた後自動的にコンストラクターメソッドgoogleが引数なしで呼び出されます。よって、以下のようにインスタンスを生成した後クラス名と同じメソッドを呼び出すというのは矛盾しています。

google google = new google();
google.google();

間違い部分========ここまで=======

まずは次のようにしてJavaのクラスの生成・コンストラクターの起動・通常のメソッドの呼び出しを区別して書いてみてはいかがでしょうか。

Java

1public class Google { // クラス名は大文字で始める習慣にしましょう 2 public Google() { // コンストラクター(戻り値の型は書いてはいけません) 3 //とりあえず何もしないがコンストラクターが呼ばれたことを確認してみる 4 System.out.println("インスタンスが作られました"); 5 } 6 7 public void show() { 8 Desktop desktop = Desktop.getDesktop(); 9 String uriString = "http://www.google.co.jp/"; 10 System.out.println("ブラウザーを起動します"); 11 try { 12 URI uri = new URI(uriString); 13 desktop.browse(uri); 14 System.out.println("ブラウザーが起動できたみたいです"); 15 } catch (URISyntaxException e) { 16 e.printStackTrace(); 17 } catch (IOException e) { 18 e.printStackTrace(); 19 } 20 } 21} 22 23// ブラウザーを表示するには・・・ 24// まずブラウザーを表示するためのGoogleクラスのインスタンスを作ってみる 25Google google = new Google(); 26// そして表示してみる 27google.show();

投稿2017/03/25 15:43

編集2017/03/27 02:16
KSwordOfHaste

総合スコア18394

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

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

swordone

2017/03/25 15:58 編集

文法上は何も問題ありませんよ? "返り値が設定されていない、クラス名と同名のメソッド"がコンストラクタになるだけです。 googleクラスのgoogleメソッドは返り値型がvoidで指定されているため、コンストラクタではなくメソッドです。 new google()でデフォルトコンストラクタが起動し、生成されたインスタンスのvoidメソッドgoogleを実行しているだけなので、何ら問題ないです。 実際、Ideoneでクラス名と同名のインスタンスvoidメソッドIdeoneを作っても問題なく動作しました。 →http://ideone.com/B88uTd ただ命名規約上小文字始まりのクラス名は推奨されないでしょうがね。
KSwordOfHaste

2017/03/25 16:23

ほんとですね!・・・自分はずっと勘違いしました。お恥ずかしい限りです。 ご指摘ありがとうございました。
maguro027

2017/03/26 11:58

なるほど!わかりやすい解説ありがとうございます! すごく勉強になりましたφ(..)メモメモ しかしちゃんとインスタントも実行でき URLの最後に/を追加してもコピペでくっつけても起動はできませんでした。。 恐らくソフト側の問題だったのかもしれません。。
KSwordOfHaste

2017/03/27 02:17 編集

む?・・・私の回答は(コードの中身はとりあえず動きはすると思いますが)指摘内容が間違っていますよ?本件の原因はtetratailさんが指摘されたとおりURLの末尾の"/"の有無だと思います。 よってBA(ベストアンサー)はどうぞtetratailさんの方へつけなおしてください(多分つけなおせた気がします)。BAは正しい回答の方へつけるのが順当と思いますので! --- 自己訂正: > コードの中身はとりあえず動きはすると思いますが コンパイルエラーがありました。粗忽な回答で恐縮です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問