カテゴリ

カテゴリ:JAVA

カテゴリ:
Javaプログラミング基礎勉強第3回
今回はこちらです。
でてきましたね。「クラス」です。今回のタイトルは「クラスを簡単に理解する。」
ということで、まず前回のおさらいということで、

変数の宣言
変数の「型」によって定まるサイズ分のメモリを確保すること
この「型」って所が非常に重要な気がします。

変数の初期化
変数の宣言によって確保されたメモリに値を書き込んで、メモリの内容と変数の内容を一致させること
ここも重要ですね。変数の初期化とは変数に値を代入すること。ですね。
そしてこれをふまえて「クラス」という概念が登場するわけですね。
とうわけで雑記です。

「クラス」を使うことで変数の組み合わせをひとつの変数であるかのように扱える。
ん〜ここらへんからややこしくなるのですが、まぁできることが増えるイメージがしますね〜。その分ややこしくなる。だからこそ、基本が大事と。
そして「クラス」を使うにはまず、「クラス」を定義しなくてはならない。

[sourcecode language="plain"]Class GeographicInfo {
double latitude;
double longitude;
}
[/sourcecode]
▲こんな感じ。「Class」をつけてクラス名を記述するんだな。クラス名の先頭は大文字か。

クラスを使う場合、そのクラス型であることを宣言する。

[sourcecode language="plain"]class GeographicInfo {
double latitude;
double longitude;
}
public class UsingGeographicInfo {
public static void main( String args[] ) {
GeographicInfo g;
g = new GeographicInfo();
g.latitude = 35.66;
g.longitude = 139.75;

System.out.println(g.latitude);
System.out.println(g.longitude);
}
}[/sourcecode]
「GeographicInfo g;」というふうな形です。プリミティブ型なら「int g;」などですよね。
変数gを宣言して確保されるメモリは、クラスの中に存在する(double型が二つあるので8byte×2)16byteではなく、すべてのクラス型変数は”アドレス”を格納されるために使うので、Javaで”アドレス”を表わす4byteのメモリが確保されるとのこと。
うん、なんとなくわかった”アドレス”って部分がちょっと引っかかったが。。Javaではアドレスを4byteで表わすってことだけたたき込んでおこう!

クラスを使うときは変数の宣言とは別に生成という手順が必要になる。
「g = new GeographicInfo();」ってな感じで生成するわけですね。この生成によって初めてクラスの中に存在する16byteメモリが確保できると。そして、クラスに必要なメモリ領域を確保することを「インスタンス化」というと。そして、メモリ内に存在するクラスの実体のことを「インスタンス(instance:事案)」とか「オブジェクト(object:物体)」と呼ぶ。
ふむふむ。
クラス内で定義された変数のことを「メンバ変数」とか「フィールド」と呼ぶ。
これもとにかくインプット。ここでは変数glatitudeとlongitudeのことですね。
Javaでは、クラス型のように先頭アドレスを参照して実際の変数にアクセスする変数の型を総称して「参照型」と呼ぶ。
日本語としても難しいですね。この図が例なのですが、
[sourcecode language="plain"]
class SimpleClass {
int x;
}
public class ExchangeReferences {
public static void main( String args[] ) {
SimpleClass a = new SimpleClass();
SimpleClass b = new SimpleClass();

a.x = 123;
b.x = 456;

b = a;

System.out.println(b.x);
}
}
[/sourcecode]
結果は、






C:\DOCUME~1\MYDOCU~1\MYJAVA~1>javac
ExchangeReferences.javaC:\DOCUME~1\MYDOCU~1\MYJAVA~1>java
ExchangeReferences
123

C:\DOCUME~1\MYDOCU~1\MYJAVA~1>

だそうです。なんとなく「123」になるのはわかるんです。「b=a」のところで上書きされたというかんじですよね。多分これが「a=b」だったらまた結果はちがいますよね。「参照型(クラス)」で宣言する変数はあくまでも「別名」であるからだということだと思うのですが、しっかり言葉として説明することはできません。。。とりあえず今のところはそれで良しとしときます。
このままつまづいたらここをもう一度しっかり学習しなおすということで。

今回は、こんな感じでした。「クラス」、そして「参照型」言葉だけとると非常に複雑なイメージがしますが、
しっかりひとつひとつ頭に入れていくと感覚としてわかってくるものだと思います。ひとつずつしっかりとつまづいたらまた、前にもどってみたいな感じでやっていければと。。。しかし、この時点でJavaスゴク楽しいです。好きです。
以上、次回また理解を深めて。。。

カテゴリ:
前回に続きましてこちらさまより、Javaプログラミングの初級の勉強をしております。

そして、今回は「変数」でございます。

私自身今まで、色々なスクリプト言語(ActionScript2.0,Javascript,PHP,Pythonなど)を
かじりかじりやってきたので何となく変数については理解しているつもりでした。
要するに値を箱のような感じで一時的に格納しておくみたいな?そんなかんじで。
しかし、今回この記事を読んで変数のちがった捉え方というか、本質をとらえたような説明に
目からうろこ状態で、同時になんかいままでより変数の捉え方がしっくりきたって感じがしました。
そんなこんなで、とりあえず雑記していきます。



変数の宣言とはメモリを必要な分確保するということ。


これがまさしく目からうろこだったんですけど、核心をついててなんか頭がスカーンとしました。
そうか、「箱」の例え話はあくまで例え話だったんだぁと。そして若干、変数の概念をわかりづらくしていたんだなぁと。
でも、自分自身がプログラムを一切かじったことがなくて上記のように「変数とはメモリを〜」と説明されても理解しがたいかもしれないですし、むずかしいところだなと思いました。でも、この記事の一連の説明と図を見ると理解できるのかと。。。まぁとにかく自分はなんかしっくりきました。そして、ActionScript2.0から3.0になったときに変数の型を指定しなきゃいけなくなって、なんだよめんどくせ〜と思ってたのが、あれはメモリを確保するためだったのか〜それによって処理を早くするためだったのかな?と思い、スッとしました。


a = 1;には「1」の値が代入されたわけではない。

変数の説明図

上記の画像をみていただければなんとなくイメージできるかとおもうのですが、同じ「1」でも変数の型次第で代入されている値がちがうということです。int型なら「00000001」、byte型なら「01」です。これも目からうろこですね。いや〜型もしっかり覚えなきゃ〜


















































型名 サイズ 値の範囲
整数 byte 1bytes -128〜+127
short 2bytes -32768〜+32767
int 4bytes -2147483648〜+2147483647
long 8bytes -9223372036854775808〜+9223372036854775807
浮動少数 float 4bytes ±3.40282347E+38〜±1.40239846E-45
double 8bytes ±1.79769313486231570E+380〜±4.94065645841246544E-324
文字 char 2bytes 0〜65535(Unicode表現)
論理 boolean (1bytes) true/false

そして、上記の表にあるように例えば「int」の型を指定すると「4bytes」のメモリが確保されるとのこと。

変数を初期化しないで実行するとエラーになる。

ん、これも基本だな。初期化するためにはなにか値を代入すればいいということですね。

intやbyteなどの型を総称してプリミティブ型(基本データ型)と呼ぶ。

「プリミティブ」とは英語で「原始的な」という意味だそうです。CPUで直接メモリの内容を読み書きして計算させるという「プリミティブ」な用途で使われるからだそうです。ふむふむ、これから「プリミティブ」と言われてもビビらなくなりそうです。



そんな感じで、以上目からうろこの「変数」Part1でした。

カテゴリ:
現在こちらのサイトを見ながらJavaのプログラミングの基礎を勉強しております。

え?なんでJavaかって?

だって、前働いていたウェブサービスの会社でもJavaを使ってたし、

いまScalaLiftだって出てきてるし、Scala勉強会@東北もあるし、Scala勉強会@東北の勉強会に参加したいけど、Javaがわからないとチンプンカンプンだと思うし、Scala波に乗り遅れたくないし・・・

など色々あって勉強しています。

ウェブデザイナーでそこまで必要か?という方もいられるかもしれませんが、
やはり、Java使いの魂というか本質的な所を少しでもわかっていると、
Javaプログラマの方と一緒に働く時にうまく会話ができるんじゃないかと思うところもあっての勉強です。

前一緒に働いていたJavaプログラマの方の今でも印象に残ってる言葉は
「名前には魂を込めなきゃ!」
です。いままで何となく画像やファイルに名前をつけていた僕に降りてきた雷のような言葉でした。

そしてウェブデザイナーは特に名前を略するのを好む(image = img とか)のですが、
そのプログラマの方はそれも好ましくないというふうにおっしゃってました。
その理由としてはJavaの作法として冗長になっても意味のわかる名前のつけかたをするみたいなことがあるということで、そういうのがないとちがう人のファイルを触る時にわからなくなってしまいうとのことでした。まさにその通りだと。。。

それ以来、名前をつける際は「魂」を込めるように気をつけております。(DTPではちょっと手を抜き気味ですが(笑))

そんなこんなで、長い前置きになりましたが勉強中に大事というか覚えておきたいなぁと思ったことを雑記いたします。



プログラムにはコンパイラ型とインタプリタ型がある。


これもなんかふぉあ〜んとしか覚えてなかったのですが、PHPやJavascriptはインタプリタ型でCやJavaはコンパイラ型ということですよね。静的型付け言語と動的型付け言語とも言うみたいです。コンパイラとはソースファイルを実行可能な形式のファイルに変換するプログラムのことだそうです。そして、Javaのコンパイラはソースファイルをプログラムが実行可能な形式のファイルには変換せず中間コードを生み出すとのこと。そしてそのままではCPUが理解できないので「バーチャルマシン」という方式を使って実行させるそうです。もしかしてこれがJavaVMのことか!


実行可能なファイルを作成するためのプログラムをまとめて「開発環境」という。

Java 2 SDKのことですね。ふむふむ。Javaの開発環境を「JDK」と呼ぶ事もある。

「.java」のファイルを実行すると「.class」ファイルが生成される。

これがコンパイルすること。Javaプログラマの方のデスクトップの覗き込んだ時に.java以外に.classが大量にあったのはこれだったのか!

Javaにはアプリケーション構築に必要なプログラムの部品を集めた「パッケージ」という仕組みがある。

「System.out.println」のような文も開発環境で標準に用意された「パッケージ」を使っている。そして基本的なパッケージ(コアパッケージ)は変更してはいけない。バーチャルマシンはコンパイラが生成した中間コードと、あらかじめ用意されたコアパッケージの中間コードの両方を解釈してプログラムを実行する。そしてコアパッケージの中間コードはrt.jarというファイルに格納されている。そこからバーチャルマシンは必要な中間コードを取り出して実行している。





以上、本当に初歩の初歩ですが。
自分なりの雑記でした。Scala・Lift目指してコツコツ勉強していくぞ〜。
(三日坊主になりませんように・・・)
ってかこの間、PythonでGoogleAppEngineとかいっといてって感じですね(笑)
でもきっとJavaを学べばそこにも生きてくる気がいたします。。。

このページのトップヘ

見出し画像
×