• ベストアンサー

Javaを始めたばかりなのですが、どうしたら向上できるでしょうか?

これからSEとして働いていく者です。 会社の研修でJavaを学んでいるのですが、難しいと感じています。 特に、クラス間をまたいで引数やメソッドを指定することが苦手です。 何を当てはめたらいいのかわからなくなります。 それから、「キャスト」というのもよくわかりません。 「String型」や「int型」ならわかるのですが、自分で型を考えねばならないときは、それ自体思いつかないことが多いです。 人に教えてもらえば「そういうことか」と理解できるのですが、自分で考えるとすぐ壁にぶつかってしまいます。 どのような勉強をすればこのようなことを克服し、レベルアップしていけるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.3

 全ての人間は二種類に分けられます。SWINGする者とSWINGしない者です。  ・・・・ええと、すみません。さて、オブジェクト指向、キャスト、すなわちブツを概念として捉える力。それはどう磨いていけば良いのでしょうか。  私のお勧めは、Swing(javax.swing.*)を勉強する事です。Swing関連のクラス構造をじーっと眺めます。まず眺めます。どんなクラスがあるかを眺めます。それぞれのクラスがGUI(目に見えるモノ)を表しているのでイメージしやすいと思います。  次にそれぞれのクラスのメソッドをじーっと眺めます。JFrame(窓)はCloseやResizeと、窓が振舞うべき機能を備えています。テキストボックスはテキストボックスらしい機能を持っている事が分かります。これも、実際にブラウザなんかで普段使っている窓、ラベル、テキストボックスなので、「車を分解するとボディとエンジンとタイヤに・・・・」なんていわれるよりよっぽど分かりやすいと思いませんか? でも、まぁ、ここはクラスよりも時間がかかると思います。眺めましょう。  そしてやっと、自分で窓が動くJavaアプリケーションを作ってみます。最初はここで躓くでしょう。まずは誰かのソースをコピペで良いです。とにかく動かしてみましょう。次第に「ああ、ここでテキストボックスにこんな指令(=メソッド呼び出し)を与えたから今こいつは背景が青色になったんだな」と、「モノに」「命令する」すなわち「オブジェクト(インスタンス)に」「メッセージを送信する」という事が分かってくる事と思います。  最後に、Swingのイベントについてしっかり勉強しましょう。「ボタンを押したらこのメソッドが呼ばれたけど、これはなんで?」これが「分かれば」もうJava技術者としては一人前だと思います。  あ。それとあと、スレッド。マルチスレッドとスレッド間の同期の知識があればもう文句なし。後は~ん~、Streamとは何ぞや、ってとこかな。この二つはオブジェクト指向というよりかはプログラミング言語よりの話です。Streamファミリーについては継承の勉強にもなるでしょう。ついでにInputStreamとReader、OutputStreamとWriteの関係とそれぞれの存在意義が分かればもうあなたは周りから崇め奉られるくらいのJavaレベルになっているはずです。  Java Coreパッケージ(java.*)はわりと綺麗な(オブジェクト指向的に理にかなった)構造になっているため、眺めるだけでも(もちろん「なんでこう分かれてるんだろう」と考えながら)勉強になると思います。  大丈夫。ある時突然頭の中に電気が走って、全てが「分かる」ようになります。人間の頭は元々オブジェクト指向が分かるようにできているのですというか実は普段我々は大体物事をオブジェクト指向で考えているんです。むしろJava以前の言語におけるプログラムの捕らえ方「構造化手法」の方が人間にとっては厄介なものですよ。

y1y9y8y1a
質問者

お礼

ありがとうございます。 「Swing」という言葉は会社の研修にはまだ出てきていないです。 でも、重要なものなのですね。 勉強していきたいです。 >指向が分かるようにできているのですというか実は普段我々は大体物事をオブジェクト指向で考えている これはわかります。 オブジェクト指向の概念を聞いたとき、「普通じゃん…」と思いました。自分が使いこなせてるかは別ですが。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • rdyiojey
  • ベストアンサー率33% (3/9)
回答No.4

現SE兼PGです。 入社1年前から研修をしてもまったく理解できなかったんですよね。 こんな能力でやっていけるかな・・・と思っていました。 入社してからは必死に業務をやって覚えましたね 出来ないと首ですし・・・ 数をこなせば覚えられますよ ソースをたくさん書いてください。 そして、実際に動かし改造することです。

y1y9y8y1a
質問者

お礼

ありがとうございます。 数をこなす、ですか。 たしかに、まだまだソースを読む量も、自分で手を動かす量も少ないと思います。 しっかり勉強していきたいです。

全文を見る
すると、全ての回答が全文表示されます。
  • hamnyan
  • ベストアンサー率50% (1/2)
回答No.2

>それはまだオブジェクト指向の領域ではないのですか? まだ入り口だと思います。 コンパイルエラーが出るなら文法のレベルですね。 基礎的な文法をやってはいかがでしょうか?

y1y9y8y1a
質問者

お礼

ありがとうございます。 >基礎的な文法 そうですね。わかってるつもりでも、使えていないことが多いです。 まずはそこからですね。

全文を見る
すると、全ての回答が全文表示されます。
  • hamnyan
  • ベストアンサー率50% (1/2)
回答No.1

外国語を習うのと同じで、まずはそういうものと覚えてみてください。 理屈はその後です。 それより、後のオブジェクト指向のほうがやっかいですよ。

y1y9y8y1a
質問者

お礼

回答、ありがとうございます。 えーと、クラスがいくつも出てきて、その間で引数やメソッドのやりとりをするのが苦手なのですが、それはまだオブジェクト指向の領域ではないのですか? 「そういうもの」だとは思いますが、さすがに引数やメソッドは自分で指定しなきゃならないじゃないですよね? 文法として「そうである」ことは分かっていても、実際にじゃあその文法の中になにをもってくればいいのかがわからないんです。 英語にたとえるなら、SVOCという文法があるのはわかるんです。 でも、V、O、Cそれぞれになにを当てはめれば求められたものが実現できるのかがわからないんです。 "I have a pen"が正しいのに、"I run a table"にしてしまうようなものだと思います(たぶん)。 おかげでコンパイルエラーだらけなのです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • javaの不思議

    C言語をたしなむ程度にやっているものです。 Javaを勉強していたのですが、不思議だなと思ったので質問させてください。 Integer value = new Integer(30); value.doubleValue() // <- double型に変換している このプログラムだとvalueはintなのにあらかじめdoubleに変換できることを想定しています。 C言語の癖なのかしらないですが、型変換をするならクラスメソッドではなくキャストするか、 メソッドに投げる(Integer.toString←stringにする例ですが)。 この2つの方法が自然な型変換だと思うのですが、変でしょうか?

    • ベストアンサー
    • Java
  • Javaの公式メソッドの中身を見るには?

    Javaの公式なメソッドやクラスの中身を見るにはどうすればいいでしょうか? jTextAreaクラスに、指定した位置に文字列を挿入する、 「insertメソッド」というメソッドがあるのですが、 このメソッドがどういうアルゴリズムかを勉強したいのですが、 JavaのAPIを見ても、引数や説明があるだけで、中のソースがありません。 http://java.sun.com/javase/ja/6/docs/ja/api/javax/swing/JTextArea.html#insert%28java.lang.String,%20int%29 何か中身を見る方法ありませんか?

    • ベストアンサー
    • Java
  • Javaのオーバーライドについて教えてください!

    //Sample.java class A extends Fina{ public int part(String str1,String str2){ int iN1 = Integer.parseInt(s1); int iN2 = Integer.parseInt(s2); intNum1 *= intNum2; return intNum1; } } このプログラムに対応するように同じクラス内でオーバーロードした際のプログラムを教えてください。 オーバーロードの内容は、partメソッドをオーバロードして引数にString型のデータを二つ受け取り、2つのString型のデータをそれぞれint型に変換し、それぞれかけた値を別のクラスでメインから呼び出すにはどうすれば良いですか?

    • ベストアンサー
    • Java
  • javaのソースコードがわかりません

    初心者には難しすぎるのでおしえてください。 クラス名 Advance5 ※main()メソッドがあるクラス Sub5_StaticCheck 指示 Advance5 クラス main()メソッド Sub5_StaticCheck クラスのcallDisp()メソッドを呼び出す ※インスタンスを生成せずに実行 Sub5_StaticCheck クラス callDisp()メソッド 定義 修飾子 : public キーワード : static 戻り値の型 : void 引数 : なし 指示 disp()メソッドを実行する その際、BufferedReader クラスを使用してキーボードから文字列を1 つ入力し、入力した文字列を引数として1つ渡す disp()メソッド 定義 修飾子 : public 戻り値の型 : void 引数 : String 型の値を1つ 指示 引数で受け取った値を表示する

  • java

    javaの問題がわかりません。 問題文は以下の通りです。 幅と高さを指定するコンストラクタ内で作ったr1とr2というインスタンスの 内容をmain()メソッドで表示する。 〔クラス図〕 クラス名 Rectangle ---------- -width:int -height:int ---------- Rectangle() Rectangle(w:int, h:int) getArea():int ------------- getArea()メソッドでは面積(高さ×幅) コンストラクタRectangle()では、widthとheightに初期値0を設定 main()メソッドでは標準入力より幅と高さを整数として受け取り コンストラクタの引数にする。 よろしくおねがいします。 途中経過 class Rectangle{ private int width; private int height; public Rectangle(???){ width = 0; height = 0; } class MENSEKI{ public static void main(String args[]){ }

    • ベストアンサー
    • Java
  • voidの性質や使い方、showメソッドについて

    1ファイル1クラスの原則に反しますが、敢えて1ファイルに2クラスあるプログラムにおいて、voidの性質や使い方、showメソッド等について教えてほしいです。 ファイル名はStart.javaです。 --------------------------------- package sample; class Cat { String name; int age; void show(String name,int age) { System.out.println("名前は" + name + "です"); System.out.println("年齢は" + age + "歳です"); } } public class Start { public static void main(String[] args) { Cat cat1 = new Cat(); cat1.name = "太郎"; cat1.age = 28; cat1.show(); } } --------------------------------- 「cat1.show();」のところでエラーが出ていますが、Eclipseでそのまま実行してみますと。 ~~~~~~~~~~~~~~~~~~~ Exception in thread "main" java.lang.Error: Unresolved compilation problem: 型 Cat のメソッド show(String, int) は引数 () に適用できません at sample.Start.main(Start.java:16) ~~~~~~~~~~~~~~~~~~~ といったエラーが出てきます。しかし、Catクラスの「void show(String name,int age) 」の箇所を「void show() 」のように、Startクラスと同じく引数の中身を空にしますと。 |||||||| 名前は太郎です 年齢は28歳です |||||||| と、正しい結果が出力されたのです。 最初のプログラムは、Catクラスのshowメソッドには引数があり、Startメソッドのshowメソッドには引数が無い状態でした。 修正したプログラムでは、どちらのクラスのshowメソッドにも引数はありませんでした。 最初のプログラムでも、mainメソッドを実行して、nameとageに値を格納して、showメソッドでCatクラスの方で定義したshowメソッドを呼び出すといった流れで、正しい値は出るはずだと自分は考えたのですが。 なぜエラーになってしまったのか、どうして2つのクラスのshowメソッドの引数が空だとうまく結果が出力されたかにつきまして、お教えいただけないでしょうか。 よろしくお願い致します。 ※OKWAVEより補足:「Webシステム開発」についての質問です。

    • ベストアンサー
    • Java
  • javaで

    フォルダに AA.java, BB.java, CC.java, ‥という不特定多数のクラスがあって メソッドString name()を3つとも実装しているとします。 そのメソッドを呼ぶと、クラスの名前AAやBBが返戻地として返されるとします。いまこのフォルダにあるすべてのクラスの、このメソッドを よぶとします。クラスの数はいくつあるのかはわかりません。このメソッドをよんですべてのクラスの名前を取得するようにしたいです。 このようなプログラムをつくるにはどうすればいいのでしょうか?

  • 配列の型判定の仕方

    メソッドの引数をObjectにして、その引数の型を判定しようとしています。 たとえば以下のような感じです。 String hoge(Object para) { if(para.equals(java.lang.Integer.class)) { return "intです"; } return "わかりません" } 上記は、int型なら判定できるメソッドですが、int[]やString[]を判定するためにはどうしたらよいのでしょうか? paraにint[]型の値が入ってきた場合、 para.equals(java.lang.Integer[].class) としてもtrueにはなりませんでした。 どうすればできるのか、ご教授いただけると幸いです。 手段がなければ、para.getClass().toString()をして出力される文字列で判定しようかと思っています。

    • ベストアンサー
    • Java
  • Java コード教えてください。

    【Java】以下のコードを教えてください。 夕食のメニューを表示するプログラムの作成を行う。 以下の仕様を満たし、実行例のように 動作するSupperMenu.java、Supper.javaを作成しなさい。 [SupperMenu.java]  String型のフィールドmaindish (主食)(初期値は設定しない)、sidedish(副菜・スープ)(初期値は設定しない)を持つ。 いずれもクラス外からはアクセスできない。 2つのコンストラクタを持つ。 引数を持たないコンストラクタは、コンストラクタを実行した際にSupperMenuクラス のフィールドmaindishとsidedishにそれぞれ”ムニエル”と”スープ”を代入する。 クラス 外からアクセスできる。  String 型の仮引数 md と sd を持つコンストラクタは、コンストラクタを実行した際に SupperMenuクラスのフィールドmaindishとsidedishにそれぞれmdとsdの文字列を 代入する。 クラス外からアクセスできる。  引数も戻り値も持たないメソッドshowMenu()を持つ。 maindishとsidedishの情報を用いて 夕食のメニューの表示を行う。 クラス外からアクセスできる。 [Supper.java]  以下の内容を記述する。 1 class Supper{ 2 public static void main( String [] args ){ 3 SupperMenu sm1 = new SupperMenu(); 4 SupperMenu sm2 = new SupperMenu("ステーキ", "サラダ"); 5 sm1.showMenu(); 6 sm2.showMenu(); 7 } 8 }

  • Java初心者です、エラーの意味が理解できません

    今晩は。Java初心者です、宜しくお願いします。 下のようなコードを書きましたが、 「コンストラクタ'sub(int)'は未定義です」、 「/型subのメソッド'disp(int)'は引数()に適用出来ません」というエラーが出ます。 エラーの意味が理解できません。 1.メソッドのみを持ったクラスSubに値をこのような渡し方は不可なのでしょうか。 2.Subには自動的にコンストラクタが生成されないのでしょうか。   されないとすれば、どの部分の書き方が悪いのでしょうか。 3.「型subのメソッド'disp(int)'への引数の渡し方」は、文法的にまずいということでしょうか。 それとも全てコンストラクタの生成が原因なのでしょうか。 ========================================================================= class Sub { void disp(int a) { System.out.println("a = " + a ); } } public class クラス { public static void main(String[] args) { Sub s = new Sub(10); //コンストラクタ'sub(int)'は未定義です s.disp();     //型subのメソッド'disp(int)'は引数()に適用出来ません  } }

    • ベストアンサー
    • Java