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

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

ただいまの
回答率

90.61%

  • Java

    13528questions

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

javaの最初の書き方

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 238
退会済みユーザー

退会済みユーザー

前提・実現したいこと

Javaを勉強し始めた者です。
最初の書き方について質問させていただきます。

質問

参考書を見ながらJavaのコードを書いているとpublicと書く場合と書かない場合がありました。
この違いは何なのでしょうか。(privateなどの使い方はわかっています。)
他にもint(String)など書くときもあればclassだけの時もあります。
これらの違いや使いどころを教えて頂きたいです。

とても基礎的な部分ではあると思うのですがご回答を頂けると幸いです。

public class A(){
}

public int B(){
}

void setC(){
}

int D(){
}

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • seastar3

    2017/09/10 17:40

    変数のスコープは分かっているということですね。変数とオブジェクトの違いは分かりますか?例えば、char型とString型の違いです。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2017/09/10 18:12

    変数とオブジェクトの違いはまだわかっていないと思います。char型とString型の違いは、変数に入れる型の指定だという認識です。よろしければ、変数とオブジェクトの違いも教えていただきたいです。

    キャンセル

回答 3

checkベストアンサー

+2

charやStringをクラスやメソッドの戻り値として先頭で宣言できますが、変数の定義と同じ形なので違いが分かりにくいと思います。
char a; や int b; は変数の定義です。この変数はabs(b)のように関数に入れることはできますが、b.abs()のようなメソッドは持てません。
一方、String c; は文字列クラスのインスタンスcの宣言です。このインスタンスは、c.length()のように(戻り値は整数型の文字数)メソッドを使えます。もちろん使えるメソッドは決まっていますが、自作のクラスなら自分の作ったメソッドは自由に使えるわけです。その際に変数やメソッドの参照範囲が大切になります。
私がJavaの勉強をし始めた頃、String型のインスタンスの内容比較がうまくいかないので長い間苦労したことがあります。結局、

 if(strKekka == "OK"){


と書いていたのが間違いで、

 if(strKekka.equals("OK")){


と書くのが正しかったのでした。
この際にString型のインスタンスは変数ではないと痛切に実感したのでした。
String型の文字列は1文字ずつがどこにどのように格納されているのかもクラス任せと考えなければなりません。C言語の文字列のポインタ操作とは無縁の世界です。
要するに、String型のような与えられたオブジェクトの操作と、自作のクラスのインスタンス操作と同等に捉えて、クラスを組み合わせて処理していくのがJavaプログラミングの特徴です。その際の戻り値やスコープが自分で決められないとブログラムが働きません。様々な宣言を沢山のサンプルコードをみて、意味をくみ取りましょう。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/10 19:08 編集

    なんか色々語弊を招きそうな書き方を…

    キャンセル

  • 2017/09/10 19:33

    クラスは変数もメソッドも取り入れることができることを、質問の主旨をくんで初心者向けに説明したつもりですが、伝わりづらいでしょうかね?

    キャンセル

  • 2017/09/10 19:41

    ただ、20年ほど前のJava 1 は、Stringインスタンス==" " がエラーでしたが、現在のJava7・8は判定してくれるので、再現できない例です。

    キャンセル

  • 2017/09/10 22:18

    まだ右も左もわかっていない状況で、このような知識を教えていただけるのはとてもありがたいです。seastar3さんから回答を頂いた後、回答で書かれていたことを自分でも調べて見ました。Javaっていろいろあって難しいですね、phpからやってきた人間としては学ぶことが多くて大変ですが、面白いです。ご回答ありがとうございました。

    キャンセル

  • 2017/09/10 22:38

    語弊を招く言い方というのは、String cを「変数」の説明を分けている点です。
    参照型だろうが変数といいます。

    キャンセル

  • 2017/09/10 22:58

    swordoneさんのご助言、調べてみて分かりました。文字列はオブジェクトでも、その参照変数名は変数なのですね。
    私はメソッドが持てないのが変数だと言い切って教えてきたので、厳密にはオブジェクトの先頭番地を格納する参照変数という変数があることを補わなければならなかったのですね。そういえば、インスタンス配列の並べ替えの実習の際に、インスタンスは入れ替わらずにインスタスの指定場所を差し替えていくことをトレースしたことがありました。
    hashibaさんと同様に難しさを痛感するばかりです。また、勉強していきます。
    swordoneさん、アドバイスどうもありがとうございました。

    キャンセル

+1

public protected private (なし)については、アクセス修飾子、パッケージという言葉で検索すると良いです。ただ、以下の記述はよくわかりません。

public class A(){
}

クラスの定義ならば小括弧が余計です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

クラスとメソッド(関数)を分けて説明します。

1 クラスの宣言
両者は呼び出して使うのは共通しますが、クラスはインスタンス化して使うか、自分の持つmain()メソッドで動きます。その際に終了フラグやエラーコードなどの戻り値を吐き出すかどうかを、intやStringなどを先頭に書いて明示します。戻り値を省力することがvoidです。そして、そのインスタンス化や継承をしてもよい相手オブジェクトの範囲(スコープ)を明示するためにpublicやprivateやfinalなどと先頭に書きます。

2 メソッドの宣言
一方、メソッドは同じクラス内なら宣言なしで使え、そのクラスがインスタンス化した先でもスコープがpublicなら呼び出せますが、privateなら呼び出せません。例えば暗号化メソッドなどのように自クラス内だけで裏方の動作をするメソッドはprivateにします。そして、メソッドも戻り値が必要でない場合もあれば、戻り値が必要な場合もあります。前者はvoidで宣言し、後者はその戻り値の型をintやdoubleやStringなどと宣言します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Java

    13528questions

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