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

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

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

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

Q&A

解決済

3回答

1031閲覧

javaの最初の書き方

退会済みユーザー

退会済みユーザー

総合スコア0

Java

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

0グッド

0クリップ

投稿2017/09/10 04:45

編集2017/09/10 05:31

###前提・実現したいこと
Javaを勉強し始めた者です。
最初の書き方について質問させていただきます。

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

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

public class A(){
}

public int B(){
}

void setC(){
}

int D(){
}

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

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

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

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

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

seastar3

2017/09/10 08:40

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

退会済みユーザー

2017/09/10 09:12

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

回答3

0

ベストアンサー

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

Java

1 if(strKekka == "OK"){

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

Java

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

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

投稿2017/09/10 09:56

seastar3

総合スコア2285

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

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

swordone

2017/09/10 10:08 編集

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

2017/09/10 10:33

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

2017/09/10 10:41

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

退会済みユーザー

2017/09/10 13:18

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

2017/09/10 13:38

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

2017/09/10 13:58

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

0

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

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

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

投稿2017/09/10 08:47

seastar3

総合スコア2285

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

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

0

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

public class A(){
}

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

投稿2017/09/10 08:11

HogeAnimalLover

総合スコア4830

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問