yoppyのandroidアプリ開発者になるためのブログ -2ページ目

yoppyのandroidアプリ開発者になるためのブログ

このブログでは、ソフト開発部に所属していながらもソフト開発の経験がほぼゼロのペーペーが、Javaの勉強やアプリ開発を経て、android携帯電話のアプリ開発者のプロを目指す共同学習型のブログです。androidやJavaなど、プログラミングに興味のある方はぜひ見て下さいね!

東広島のカフェ「エクラン」ってとこで勉強中です。
今回は、「継承」とか「サブクラス」といったキーワードを中心に説明します。

■継承

継承とは、とあるクラスの機能をそのまま別のクラスに分化することを言います。分化されたクラスのことを、"サブクラス"といい、継承元のクラスのことを、"スーパークラス"と呼びます。

継承するには、"extends"というキーワードを使います。使い方の例を以下に示します。

--------------------------------------
class A{
//インスタンス変数の宣言
int x = 100;
int y = 200;
}

//クラスAを継承する
class B extends A{
String x = "abcde"; //スーパークラスのxを隠す

//displayメソッド
void display(){
System.out.println(x);
System.out.println(y);
System.out.println(super.x);
}
}

class Example{
public static void main(String args[]){
//オブジェクトの作成
B b = new B();
b.display();
}
}
--------------------------------------

出力結果は以下です。
----------
abcde
200
100
----------

この例では、クラスAをクラスBがextendsキーワードを使って継承しています。クラスAで宣言された変数やメソッドは、クラスBでも使うことが出来ます。例えば、クラスAで、int型のインスタンス変数yを宣言していますが、クラスBの中で使用可能であり、displayメソッド内で使用しています。

また、クラスAでint型のインスタンス変数xを宣言していますが、クラスBではString型として、同じ名前の変数を宣言しています。この場合、クラスBにおいて"x"と記述するものはString型の方になります。親クラスとなるクラスAの"x"を使いたい場合は、"super.x"とすることで利用することが出来ます。

今回は以上です。


久しぶり過ぎる更新となります。。。ブログをだいぶ放置してました!仕事が忙しくて、というか、転勤疑惑があったせいで、勉強のモチベーションが下がってました!でも、ひとまずは転勤がしばし無いようなので(6月末くらいまでは急に言い渡される可能性有り(;´Д`)ノ)、Javaの勉強を再開しまっす!

復活第一弾は、結構Javaを忘れてしまってたんで、独習Javaの第5章の"総合理解度チェック"の問題でもやってみました。その中で、オブジェクトの配列を作るっていうのがあったので、それを書いておきます。

■オブジェクトの配列

オブジェクトを新規に作成するときは、ふつうは以下のようにします。
(クラス名は"Test"とします)

----------------------------------------
Test t1 = new Test();
----------------------------------------

こうすることで、クラスTestのオブジェクト変数"t1"を作りだし、new演算子でオブジェクトを生成。そして、コンストラクタを使ってオブジェクトを生成します。

では、オブジェクトの配列を作成するときは、以下のようにします。

----------------------------------------
Test[] t_array = new Test[10]; //オブジェクトの配列を宣言し、オブジェクトを生成
t_array[0] = new Test(); //コンストラクタ呼び出しで初期化
----------------------------------------

あとは、普通に使っていくだけです。はい、簡単ですが今回は以上!!
(独習Java P.174まで学習)
はい、最近は更新が土日だけになってますが、今回はクラスを自分で作成する方法を紹介したいと思います。基本的な内容だけ紹介します。以下3点です。

①クラスの構成要素
②コンストラクタ
③コンストラクタのオーバーロード


■①クラスの構成要素

 クラスのメンバ(構成要素)には、変数、メソッド、コンストラクタの3種類があります。例えば、以下です。

-----------------------------------
class Example{
//変数の宣言
int num1;
int num2;

//コンストラクタ
Example(int a, int b){
num1 = a;
num2 = b;
}

//メソッド
void changeValue(int a, int b){
num1 = a;
num2 = b;
}
}
------------------------------------

■②コンストラクタ

 次にコンストラクタについてです。コンストラクタとは、オブジェクト作成時に初期化を行う特殊なメソッドのことです。コンストラクタのメソッド名は、クラス名と同じでなければなりません。コンストラクタを呼ぶためには、new演算子を利用します。上記クラスExampleのコンストラクタを呼ぶ例を以下に示します。

------------------------------------
Example e = new Example(10, 20);
System.out.println(e.num1);
System.out.println(e.num2);
------------------------------------

このようにすることで、オブジェクトeのメンバであるnum1, num2の値を初期化することが出来ます。

■③コンストラクタのオーバーロード

 続いて、オーバーロードについて説明します。上記例では、Exampleのコンストラクタは一つしか作っていませんが、複数作ることが可能です。このことを、コンストラクタのオーバーロードと言います。ただし、引数が異なった形をとっていることが条件です。同じ引数のコンストラクタを作ると、どっちを使っていいのか分からなくなるからです。以下に例を示します。

------------------------------------
class Example{
int num1;
int num2;

//コンストラクタ1
Example(int a, int b){
num1 = a;
num2 = b;
}

//コンストラクタ2
Example(String s1, String s2){
//文字列をint型に変換する
num1 = Integer.parseInt(s1);
num2 = Integer.parseInt(s2);
}
}
------------------------------------

コンストラクタ2の方では、String型で受け取ることを想定して作っています。このように、コンストラクタは複数作成することが可能です。


はい、今回は以上です!!
(独習Java P.149まで学習。第4章はC言語と被った内容なので飛ばしています。)
滞ってましたけど、今も会社の同期と一緒にandroidホームアプリの開発に向けて、いろんな調査検討を継続中です。3人で検討中なんですけど、情報共有のスペースを作っておいた方が、開発はしやすいと思うので、"サイボウズLive"というグループワークのための掲示板のようなものを使うことにしました!!

このサイボウズLiveはとっても便利で、各課題を掲示板のように管理が可能で、それをみんなで共有できます。そのほかにも、ファイルを共有する場にもなるし、ToDoの管理や、スケジュール管理もみんなと情報を共有しながら可能です。そのため、情報共有を必須とする、グループでの勉強会や開発などには、このサイボウズLiveはもってこいです!!

しかも、グループメンバー20人までは無料で使えます!!


かなり使いやすいので、みなさんもこれ使ってみてください!宣伝みたになってますけど、おんなじようにグループで開発するときは、こういうのを使うととっても便利です。以下にリンクを貼っておきますね(・∀・)

http://live.cybozu.co.jp/

それではまた!!
4月に入り、今年も桜の季節となりました。東広島市では、新入生がたくさん入ってきて、大学周辺は初々しさに包まれています。で、今日も大学の近くのカフェで勉強してました。今日は、StringBufferクラスについて説明します。

Stringクラスでいったん文字列を格納すると、それ以降文字列を変更する方法はありません。しかし、今回紹介するStringBufferクラスでは、文字列の追加や挿入などの改変が可能です。

■コンストラクタ

コンストラクタには何種類かあります。よく使うであろう3つを紹介します。

①StringBuffer sb1 = new StringBuffer();
→これだと、16文字分の容量で初期化してくれます。
②StringBuffer sb2 = new StringBuffer(20);
→これだと、20文字分の容量で初期化してくれます。
③StringBuffer sb3 = new StringBuffer("abcde");
→これだと、5+16文字分の容量で初期化してくれます。+16は、拡張用です。

■よく使いそうなメソッド

ここでは、メソッドの紹介をかねて、一つプログラムを記載しておきます。

--------------------------------
StringBuffer sb = new StringBuffer();
sb.append("abcde");
System.out.println(sb);
sb.insert(0,"fghij");
System.out.println(sb);
--------------------------------

実行結果は、以下です。
--------
abcde
fghijabcde
--------

このように、StringBufferクラスを活用することで、自由に文字列を追加したり、改変ができるので、文字列を変えたい、というケースがあれば、よく活用するんじゃないかな、と思います。

では、今回はこのくらいで~。
(独習Java P.82まで学習)
どうもこんばんわ。ペンネームyoppyです。今日はドラマ「僕の歩く道」の最終回を一人部屋で見てました。とっても心が温まるドラマで、涙がちょちょぎれました・°・(ノД`)・°・

で、本題ですが、会社の同期とandroidのHomeアプリを作ることにしました!

Homeアプリっていうのは、いわゆる待ち受けみたいなもので、アプリのショートカットアイコンや、ウィジェットなどを配置できます。このHomeアプリは、待ち受けということで、一番よくユーザさんにさわってもらうアプリであり、それゆえに操作性やデザイン、パフォーマンスが要求されるアプリです。androidとiPhoneをよく見比べる方がいますが、確かにiPhoneの待ち受けはとても滑らかで、操作性は申し分ありません。androidもそれに追いつくべく、最高のHomeアプリが開発されるべきです。

現状でもHomeアプリは、サイトで確認しただけでも19種類はマーケットで公開されているとのことです。

Homeアプリを作る!といっても、ゼロから作るのは途方もないと思いますので、android標準Homeアプリをベースに作っていこうと考えています。ですので、まずは標準Homeの問題点をピックアップしたり、標準Homeアプリをどうやって端末に入れて確認するのか、なども調査する必要があります。

上記の内容は、これから連載していこうかと思ってますので、ぜひ興味のある方は見ていってくださいね。Javaの勉強も、継続してやっていくつもりです。今日はもう眠いので、おやすみなさいませ☆彡
ただいま、東広島市のカフェで勉強中のyoppyです。やっぱり、カフェで勉強すると雑念が入らないからしっかりと勉強できますなあ…。昨日は広島市内の新しいカフェ「Mランド」に行ったのですが、とっても良かったです!東広島市にも、もっとカフェができればいいのになぁ、と日々思ってます。

さて、本題のJavaの勉強の方ですが、今日はラップクラスとガベ^-ジコレクションを勉強したので、まとめときます。

■ラップクラス

 ラップクラスというのは、主要なデータ型であるintやbooleanなどにそれぞれ用意されたクラスです。例えば、Integerクラス、Booleanクラスなどがあります。これらは、int型、boolean型の値を持ちます。で、どんなときに活用されるかと言うと、これらのクラスで用意されているメソッドの中に、文字列データをint型、boolean型に変換してくれるメソッドがあり、ユーザの入力を処理する機構を与えてくれるので非常に便利です。

以下のように、String型で用意された文字列をint型に変換してくれます。

--------------------------------------
String s = "123";
int i;

i = Integer.parseInt(s); //文字列をint型に変換。
i = i + 10;
System.out.println(i);
--------------------------------------

ユーザが文字列として入力した数値を、Integerクラスが用意する静的メソッドparseInt()によって、int型に変換してくれます。これは、おそらく、よく使うのだと思います。要チェックですね。

■ガベージコレクション

 ガベージコレクションとは、使われなくなった(誰からも参照されなくなった)オブジェクトのメモリリソースを自動的に回収するJava言語の仕組みのことを言います。C言語で言うところの、freeみたいなイメージです。ただ、C言語ではmallocでメモリを確保した後に、プログラマーが意図的にfreeをコーディングしなければ、ずっとそのメモリは確保されっぱなしで、いわゆるメモリリークが発生します。また、mallocやfreeなどのメモリ操作は慎重に行わないとランタイムエラーの原因となり、その不具合はコンパイル時には発見されないため、プログラム規模の大きい携帯電話開発などではデバッグが非常に困難です。このようなC言語の問題を、Java言語ではガベージコレクションという仕組みで解決してくれるのです。

どんなときにオブジェクトが誰からも参照されなくなるのか、という点ですが、以下が一つの例です。

-------------------------------------------
Integer i = new Integer(5); //ここで、Integer(5)というオブジェクトが作られる。
System.out.println(i);
i = new Integer(6); //ここで、Integer(6)というオブジェクトが作られる。
System.out.println(i);
-------------------------------------------

上記では、IntegerクラスのオブジェクトInteger(5)が作られ、それを参照するオブジェクト参照変数iが作られます。その後、オブジェクトInteger(6)が作られ、オブジェクト参照変数iはそれを参照します。そのため、オブジェクトInteger(5)は、誰からも参照されなくなります。(つまり、このオブジェクトで確保されているメモリリソースは解放しても全く問題ない)

誰からも参照されなくなると、その後JVMが自動的に解放を行いますが、そのタイミングは上記の瞬間とは限りません。JVMの作り方によってそれは異なり、JVMによって決定されます。


はい、今回は以上です!!
ガベージコレクションという名前はandroid携帯電話の開発でもよく使われるキーワードなので(ガベージコレクションが発動するときにパフォーマンスが一時低下する問題などがある)、みなさんも良く覚えておきましょう。では!
引き続き、Javaの勉強をしています。今回は、静的メソッドとインスタンスメソッドの違いについて。

■静的メソッドとは

 静的メソッドとは、クラスのインスタンスをいちいち生成しなくても呼び出せるメソッドのことです。一番良い例としては、Mathクラスのメソッドです。Mathクラスのメソッドには、絶対値を計算するもの、平方根を計算するもの、などがあります。これらのメソッドを使うときは、以下のように記述します。

--------------------------
int i = 10;
System.out.println(Math.abs(i));
--------------------------

つまり、Mathクラスのオブジェクトを作る必要がない、という点が特徴です。

■インスタンスメソッドとは

 インスタンスメソッドとは、クラスのインスタンスを生成して初めて呼び出すことのできるメソッドのことです。良い例は、Stringクラスのメソッドです。文字数を返すもの、文字列を比較するもの、などがあります。これらのメソッドを使うときは、以下のように記述します。

-------------------------
String s = "abcde";
System.out.println(s.length());
-------------------------

つまり、Stringクラスのオブジェクトを作った上で、実行することが可能なメソッドを、インスタンスメソッドと呼びます。

今回は以上!!(P.56まで学習)
ただいま、東広島市西条のカフェ「エクラン」ってとこでJavaのお勉強をしてます。カフェで勉強って、家で勉強するよりだいぶはかどります。で、今回は勉強中の本「独習Java」の第1章の続きについて、大事だと思うことを備忘録として残しておきます。

今回は、型変換について。

"型拡張"とは、型が異なるもの同士で演算(+や*など)を行うときに、大きい方の型に自動的に置き換える処理のことです。double型とint型の2つを足し算すると、結果はdouble型になる、ということです。

"拡張変換"とは、大きい方の型に、小さい方の型を代入したときに起きる処理です。例えば、8bitのbyte型変数を、32bitのint型変数に代入するときに拡張変換されます。逆に、int型変数をbyte型変数に代入しようとすると、コンパイル時にエラーが発生します。なぜなら、byte型の方が持てる情報量が少ないからです。この問題を解決するには、"縮小変換"を行います。以下のように行います。

byte b;
int i = 258;
b = i;
System.out.println(b);

↑これだと、byte型変数bの方が持てる情報量が少ないため、エラーが発生します。

byte b;
int i = 258;
b = (byte)i; ← ★ココ!
System.out.println(b);

↑★の箇所が、"縮小変換"です。int型変数の情報をbyte型変数分に置き換えます。よって、出力結果は、258ではなく、"2"です。2進数で表現すると、int型変数 i は、"1 0000 0010"であり、byte型変数はその下位8bitだけを代入されるため、"0000 0010"の情報だけとなり、"2"を表示します。

型変換については以上です。ソフト開発の実経験においても、丸め誤差の問題でタッチパネルの右端が効かなくなる、っていう不具合が出たりするので、この辺の型変換についてはしっかりと把握しておく必要があるわけです。
プロフィールにも書いたと思いますが、仕事柄、プログラムのコードを見る必要があります。最近では、C言語で書かれたコードをレビューし、不具合を見つける、ということをしました。単純に"+1"されてないだけで、迷宮入りしそうな不具合が発生してました。

やっぱり、ソフト開発部に在籍するものとして、コードが書けなきゃ、協力会社さんに良い指示を出すことはできないと思います。それに、まわりの先輩たちと対等に話し合うためにも、プログラミングの知識は絶対に必要です。

ということで、Androidアプリ開発の基礎を作るためにも、Javaの勉強を始めます!参考資料は、有名な著書「独習Java」です。基本的には、大事だと思ったことを備忘録として記載していこうと考えています。


まずは、こんなところから。


・クラス名は大文字から。
・メソッド名は小文字から。


今後のプログラミングでクラス名、メソッド名を記述するときにくせにするため、備忘録として記載しました。まだまだ、初歩中の初歩ですが、もし、同じように初歩から始める方がいたら、一緒に頑張っていきましょう!!(今回は、1.1~1.10まで学習)