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

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

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

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

Q&A

解決済

6回答

2797閲覧

java オブジェクト型変数をつかいこなせるようにはどこまで覚えればいいでしょうか

kentros511

総合スコア122

Java

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

0グッド

0クリップ

投稿2016/11/15 16:19

編集2016/11/15 16:37

###意図
オブジェクト型変数をつかいかなす方法を知りたいです

###知っていること

java

1オブジェクト型:基本データ型と違い,細かい処理ができる 2宣言 3Student student ; 4 5初期化なし 6Student student ;NullPointerException発生 7 8初期化あり 9student = null;→ エラーならず 10 11代入 12student = new Student() ; 13 14 15 16 17 18

###課題
変数の値の取り出し方
オブジェクト型変数についてかけてるを知りたいです

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

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

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

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

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

guest

回答6

0

一連の投稿を見ていると、最低限の労力でなにかをしようと考えているみたいですが、
プログラミングとは、応用の集大成で完成するので、そんな志では何も作れないと思いますよ。

投稿2016/11/15 16:36

mugicya

総合スコア1046

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

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

0

java オブジェクト型変数をつかいこなせるようにはどこまで覚えればいいでしょうか

オブジェクトが絡むと、最終的にオブジェクト指向の知識が全部要るので、
「ここまで」でいいよ、と回答側から示しにくいんですよ。

ただ、質問者の方からすると、「理屈抜きに覚えろ」だけでは不満でしょうから、
「ここから」始めよう、という出発点を示してみます。


それは、型設計に対する意識です。最初はその意識が希薄で、
ただただ煩雑で面倒なだけの仕組みに思えるでしょう。

いちいち型を書かないといけないし、型のエラーが出まくりますから。
なんで型なんて仕組みがあるのか、と思うかもしれません。


型の利点はいろいろありますが、上手く使うとバグを減らせる点があります。
というのは、型のエラーが出ない場合、バグになっている場合があります。

「1」と「1」を足すとき、整数の「2」か、文字列の「11」か、取り違えてバグる可能性があります。
型とは、こうした見逃す可能性のあるバグを、対応不可避のエラーに変え、バグを減らす仕組みです。


そして、オブジェクト型とは、自分で型を設計することで、言語側で用意してあるプリミティブ型以外まで、
この型安全の仕組みを拡張して適応できる仕組みです。ユーザー定義型や抽象データ型と言ったりもします。

具体的には、たとえば金額や日付を型(クラス)にすることで、
取り違えを防げます。「10円」か「10日」かで違いますよね。

質問文の「Student」にしても(無自覚に作ったかもしれませんが)、
その「10円」や「10日」と、「10人」との取り違えを防げます。

そんな違いはすぐ分かると思うかもしれませんが、大規模や複数人の開発だと自明ではないのです。
ですから、型を使いこなせるとは、型を使ってバグを取れる、防げるようになることなのです。


型を「エラーを量産する面倒事」と考えるか、「自動でバグを除去できる方法」と考えるかで、
学習の吸収力が違ってくると思うので、前向きに捉えることを私はオススメします。

投稿2016/11/15 22:47

LLman

総合スコア5592

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

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

0

どんな分野でもそうですが、「どこまで」なんて境界はありません。基礎から少しずつどこまでも進行形で覚えていかないといけません。

また、あなたが「知っていること」に書いたことは行くつかは間違っている上に、表面をふわっと理解している印象を受けます。

投稿2016/11/15 17:12

yona

総合スコア18155

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

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

0

どこまで覚えれば ということを考えなくなって、オブジェクト型変数をつかいこなせるように なるまでです。

そもそも、「どこまで覚えれば」という発想自体、技術職に対する適性を疑う。


例えるなら、ギターのメーカーをとれだけ放っているとか、写真を見ただけで、型番や製造年月日がわかるとかそんな知識があっても、うまくギターを弾くためには練習することが必要なように、プログラミングができるようになるには、どれだけたくさんコードを書く練習をしたかであって、知識の量ではありません。練習の中で自然とわかってきたことが知識になってゆきます。

投稿2016/11/15 16:53

編集2016/11/15 17:18
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

思いついたものを初歩的な部分から書きましたが、他にも学ぶべき部分はあります

java

1オブジェクト型変数とは 2 3 4public class A{ 5 6 7} 8 9 10こういうクラスを書いたとします 11 12これをメインメソッドの中で 13 14A student= new A(); 15 16と書きます 17すると、ここにクラスA型のオブジェクトstudentができているわけです 18 19public class A{ 20 21 22} 23 24Aの部分はどのようにも書けますが メインメソッドが入ったクラスが同じファイルの中で 25別にない場合はファイル名をこのクラス名.javaにしなければなりません 26この場合はA.javaですね 27 28public class B{} 29 30(ファイル名B.java) 31だの 32public class Teratail{} 33 34(ファイル名Teratail.java) 35 36だのいくらでも作れます 今回はファイルはメインメソッドの入ったこのクラスを 37利用する.javaファイルが入ったフォルダと同じフォルダに入れると考えて下さい 38 39 40同じファイルの中にクラスを二つ以上作るときは、 41クラス名が複数できるわけですが、 42書いた時に先頭につけるpublic は一か所にしなければなりません 43メインメソッドを入れたクラスがある場合は、そのメインメソッドの入ったクラスに 44public をつけて下さい 45その public をつけたクラス名とファイル名を同じにしてコンパイルします 46 47 48この クラス の中には クラス変数 ローカル変数 及び メソッド を入れることができます 49 50 51class A{ 52 53public int a; 54 55 56} 57 58 59これは int型のクラス変数 a が一つだけ入った A というクラスです 60このクラスのインスタンスをを どこかのクラスの中のメインメソッドの中で新しく 61作るとします 62 63A student= new A(); 64 65この時 インスタンスの中に 変数a が 一つ入っている状態になります 66 67インスタンスを作った後、インスタンスの中の変数aにアクセスするためには 68 69student.a=12; 70 71のように書きます 72 73「インスタンス名」.「変数名」 74のように書けば インスタンスの中にある変数を扱う変数として扱えます 75 76ここで クラスA の インスタンスを 複数作るとします 77A student= new A(); 78A student2= new A(); 79A student3= new A(); 80 81この時 クラスAの中の変数aも インスタンスの数と同じ 三つ 作られたことになります 82 83 84それぞれにアクセスして値を変更する場合には 85 86student.a=12; 87student2.a=8; 88student.3=100; 89 90のようにします。 91 92次に、 93 94class A{ 95 96public static int a; 97 98} 99 100このようなクラスについて考えます 101 102このクラスを メインメソッド内でインスタンス化します 103 104 105A student = new A(); 106 107 108この時 studentというインスタンス内の変数aにアクセスする方法は、 109上記と同様、 student.a=10; 110でよいのですが、 111この場合中に入っている変数はstatic 変数といって 112そのインスタンスが複数作られようとも常にそのクラス名に対し一つしか 113生成されません 114 115よって、 116A student = new A(); 117A student2 = new A(); 118A student3 = new A(); 119 120のように三つのインスタンスを作って、 121 122student.a=10; 123student2.a=100; 124student3.a=1000; 125 126とした場合、 127student.aも 128student2.aも 129student3.aも 130全て最後に代入した1000を示します 131 132また このようなstatic変数は、 133単に 134A.a=100; 135と書くだけで変数として扱えます 136 137次に、 138class A{ 139 140public static int b; 141public int c; 142 143public void a(){ 144 145int a=20; 146 147System.out.println(a+b+c); 148 149} 150 151} 152 153というクラスについて考えます 154 155このクラスをインスタンス化し 156A student =new A(); 157 158の後に 159 160student.b=10; 161student.c=12; 162でクラス内の変数に代入が行え、 163student.a(); 164で クラス内のメソッドa()を呼び出せます。 165 166今回は変数a,b,cの値を足したものを表示しています 167 168 169 170次に、 171class A{ 172 173public static int b; 174public int c; 175 176public static void a(){ 177 178int a=20; 179 180System.out.println(a+b); 181 182} 183 184} 185 186 187というクラスについて考えます 188 189この時 メソッドa()190 191インスタンス化しなくとも 192A.a(); 193と書けば使えますが、 194インスタンス化して 195A student=new A(); 196と書いて 197student.a(); 198と書いても動かせます 199 200ですが、いずれにしても 201staticメソッド内からは 202クラスA内のクラス変数のうち、static変数以外にはアクセスできません 203なので、a+bの値のみを表示しています。ここに 204cを加えるとコンパイルエラーが出ます。 205 206 207次に、以下のようなクラス達について考えます。 208 209class A{ 210 211static int a1=10; 212 213int a2=20; 214 215public static void a3(){ 216System.out.println("a3"); 217} 218 219public void a4(){ 220System.out.println("a4"); 221} 222 223} 224 225class B extends A{ 226 227static int b1=100; 228 229int b2=200; 230 231public static void b3(){ 232System.out.println("b3"); 233} 234 235public void b4(){ 236System.out.println("b4"); 237} 238 239} 240 241 242この時、クラスAをインスタンス化します 243 244A student=new A(); 245 246メインメソッド内で 247 248System.out.println(student.a1+ " "+student.a2); 249student.a3(); 250student.a4(); 251と書くと、 252 25310 20 254a3 255a4 256と表示されます 257 258次に クラスBをインスタンス化します 259 260B student=new B(); 261 262メインメソッド内で 263 264System.out.println(student.b1+ " "+student.b2); 265student.b3(); 266student.b4(); 267 268と書くと 269 270100 200 271b3 272b4 273と表示されます 274 275この時 継承したクラスAのメソッドもこのインスタンス内から同様に使え、 276メインメソッド内で 277 278System.out.println(student.a1+ " "+student.a2); 279student.a3(); 280student.a4(); 281と書くと、 282 28310 20 284a3 285a4 286と表示されます 287 288次に 289 290class A{ 291 292static int a1=10; 293 294int a2=20; 295 296public static void a3(){ 297System.out.println("a3"); 298} 299 300public void a4(){ 301System.out.println("a4"); 302} 303 304} 305 306class B extends A{ 307 308static int a1=100; 309 310int a2=200; 311 312public static void a3(){ 313System.out.println("b3"); 314} 315 316public void a4(){ 317System.out.println("b4"); 318} 319 320} 321 322 323のような場合について、 324 325A student=new B(); 326 327のようにインスタンス化する場合について考えます。 328 329 330継承元のスーパークラスのオブジェクト型変数の中に、 331継承先のサブクラスのオブジェクト型インスタンスを入れることが可能です 332 333この場合、 334 335 336System.out.println(student.a1+ " "+student.a2); 337student.a3(); 338student.a4(); 339と書くと、 340 341 34210 20 343a3 344b4 345 346と表示されます 347 348クラスstatic変数、クラス変数、 349メソッドいずれもスーパークラスAのものが使用されますが、 350staticメソッドのみはインスタンス化されたBクラスのものが使用されています。 351 352この時 変数student 内には クラスAを継承したクラスBのインスタンスが入っています。 353 354扱いはクラスAのオブジェクト型インスタンスですが、 355この変数の中には生成時点で作られたBクラスのインスタンスが含まれています。よって、 356B y=(B)student; 357 358B型にキャストして戻してやり 359 360System.out.println(y.a1+ " "+y.a2); 361y.a3(); 362y.a4(); 363と書くと、 364100 200 365b3 366b4 367 368と表示されます。クラスBとして使用できるようになりました。 369 370 371 372 373 374 375class A{ 376 377static int a1=10; 378 379int a2=20; 380 381public static void a3(){ 382System.out.println("a3"); 383} 384 385public void a4(){ 386System.out.println("a4"); 387} 388 389} 390 391class B extends A{ 392 393static int b1=100; 394 395int b2=200; 396 397public static void b3(){ 398System.out.println("b3"); 399} 400 401public void b4(){ 402System.out.println("b4"); 403} 404 405} 406 407 408の時、 409A student=new B(); 410とすると、 411 412System.out.println(student.a1+" "+student.a2); 413student.a3(); 414student.a4(); 415 416と書いた時は 41710 20 418a3 419a4 420 421と表示されますが、 422b1,b2,b3(),b4() 423を使用しようとするとコンパイルエラーが出ます 424そして 425B y=(B)student; 426 427と B型にキャストして戻してやり 428 429System.out.println(y.b1+ " "+y.b2); 430y.b3(); 431y.b4(); 432System.out.println(y.a1+ " "+y.a2); 433y.a3(); 434y.a4(); 435と書くと、 436100 200 437b3 438b4 43910 20 440a3 441a4 442と表示されます 443B型にキャストして戻した事で 444継承したAクラスの内容も使えるようになりました。 445

投稿2016/11/16 04:50

編集2016/11/16 05:08
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kentros511

2016/11/16 14:04

長々ありがとうございました
guest

0

処理系によって、記述が異なるし、私の場合あれやこれや手を出してるので分かりません。
脳の中にはFiles と Open と Put、Get があります。オブジェクトを定義した段階でFilesなんだな。という人です。
使いこなす?覚えるの無理。どの処理系が良い?んーーーわかんない。

大体、student って何? ポインターってことはオブジェクト変数じゃ無いんでしょ?分かりません。

投稿2016/11/16 03:11

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問