コンストラクタについて

Posted コメントするカテゴリー: JAVA

インスタンスを生成する際に、初期化を行ったり、初期値を設定したりする時に、コンストラクタというものを使います。

コンストラクタはクラスの中に書き、インスタンスの初期化を行う(生成時に一度実行される性質の為)
下記のように書きます。

また、コンストラクタには戻りの型を書きません。

	public class TestClass {
		String test_a;
		int test_b;
		
		//コンストラクタ
		public TestClass(String test_a, int test_b) {
			
		}
		
	}

また、コンストラクタ内ではthisという「現在のインスタンス」を表す変数が使えます。
thisはjavaの予約語で、頻繁に使います。

	public class TestClass {
		String test_a;
		int test_b;
		
		//コンストラクタ
		public TestClass(String test_a, int test_b) {
			this.test_a = test_a;
			this.test_b = test_b;
		}
		
	}

クラスとオブジェクト

Posted コメントするカテゴリー: JAVA

javaの基本的な書き方の次のステップとして、クラスとオブジェクトに差し掛かっていきます。
まずはクラスとはなにかを勉強し、その後にオブジェクト指向の勉強に進めていきます。

2014.09.24 追記
クラスとは、関連した情報を1つにまとめたもの。
以下のように宣言します。

public class TestClass {
	String test_a;
	int test_b;
}

実際にプログラムして、動きを確かめようと思い、次のようなソースを作りました。(ファイル名は「array_test2.java」としました)

public class array_test2 {

    public static void main(String[] args) {
        
        //「tc」はTestClassのインスタンスという
        TestClass tc = new TestClass();
        
        tc.test_a = "A";
        tc.test_b = 1;
        

        //ひとつのクラスから2個目のインスタンスを作る
        TestClass tc2 = new TestClass();
        tc2.test_a = "B";
        tc2.test_b = 2;
        
    }

	public class TestClass {
		String test_a;
		int test_b;
	}
}

コンパイルを実行する

c:\javac array_test2.java

すると、次のような結果がでます(エラー)。

array_test2.java:6: static でない 変数 this を static コンテキストから参照することはできません。
        TestClass tc = new TestClass();
                       ^

ネットを調べたりしましたが、少しの時間悩み、次のように書き直したところ、動作しました。

public class array_test2 {

    public static void main(String[] args) {
        
        TestClass tc = new TestClass();
        
    }

}

class TestClass {
	String test_a;
	int test_b;
}

結局、TestClassのクラスが「public class array_test2 」の外側にないとエラーになるようです。
理由としては、staticのついたメソッド(クラスメソッド)の中で、自クラス内のstaticでないメソッドや
フィールド変数、クラス内クラスを参照することはできない。為でした。

うーん、まだ、感覚的にわからないです。

配列について

Posted コメントするカテゴリー: JAVA

配列を書いてみます。

public class array_test {

    public static void main(String[] args) {
        
        //配列を宣言
        int[] test_array;
        
        //配列を3つ設定
        test_array = new int[3];
        
        test_array[0] = 10;
        test_array[1] = 20;
        test_array[2] = 30;
        
        System.out.print("配列の中身は " + test_array[0] + "\n");
        System.out.print("配列の中身は " + test_array[1] + "\n");
        System.out.print("配列の中身は " + test_array[2] + "\n");
        
        //配列の長さ(要素数)を取得する
        System.out.print("配列の中身の数は " + test_array.length + "\n");
        
        
        
        //配列の初期化(宣言と同時に値を入れる)
        int [] test_array_s = {10, 20, 30};
        
        //配列「test_array」にまとめて代入する書き方も可能
        test_array_s = new int[]{10, 20, 30};
        
        //2次元配列の場合
        int[][] test_array_ss;
        
        //初期化と同時に値を代入
        int[][] test_arrays_sss = {
        	{10, 20, 30},
        	{40, 50, 60},
        	{70, 80, 90}
        };
        
        //出力する場合は次のように書く
        System.out.print("2次元配列の3行目の2列は " + test_arrays_sss[2][1] + "\n");

        //2次元配列の要素数は一定でなくてもOK
        int[][] test_arrays_ssss = {
        	{10, 20, 30},
        	{40, 50},
        	{70, 80, 90}
        };
        
        
        
    }
}


実行結果は

配列の中身は 10
配列の中身は 20
配列の中身は 30
配列の中身の数は 3
2次元配列の3行目の2列は 80

となります。

メソッドの種類について

Posted コメントするカテゴリー: JAVA

java言語の基礎的な部分がC言語と多いので、基礎的な文法の練習は省きたいと思いますが、メソッド(関数)の書き方についてはjava特有の書き方があるので、勉強してみます。

まずは、以下のサンプル

public static void main (String[] args) {

}

このメソッドの宣言を見てみると、次のように解釈できます。

public → アクセス制限(公開されているかどうか)
static → クラスメソッド
int → 戻り値の型を指定
main → メソッドの名前
String[] args → 引数はString型 argsはこれから勉強する

publicというアクセス制限の部分については、次の段階で細かく勉強していきます。

ランダム関数を使ってみます

Posted コメントするカテゴリー: JAVA

ランダムな値を表示させるプログラムを書いてみます。

下記のようなプログラムを書いて、コンパイル→実行、をしてみます。

import java.io.*;

public class random_test {

    public static void main(String[] args) {
        
        //乱数のテスト
        int x;
        
        x = (int)(Math.random() * 9);

        System.out.print("乱数の結果->" + x + "\n");
        
    }

}

実行結果は

乱数の結果->6

という表示になり、実行の度に数値がランダムに変わります。
少しjavaを書くことに慣れてきました。

C言語と同じような部分が多く、文法的な練習については省きます。

入力待ち状態となるプログラムを書く

Posted コメントするカテゴリー: JAVA

入力待ち状態のプログラムを書きます。

import java.io.*;

public class input_test {

    public static void main(String[] args) {
        
        System.out.print("なにか入力してください\n");
        
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        
        try {
	        String line = reader.readLine();
	        
	        System.out.print("入力した文字は" + line + "です\n");
	    } catch (IOException e) {
            System.out.print(e);
	    } catch (NumberFormatException e) {
            System.out.print("なにか間違っています\n");
	    }
        
    }

}

実行すると、次のようになります。

なにか入力してください
129873469127384
入力した文字は129873469127384です

初歩の為に書いたプログラムは簡単でしたが、上記のプログラムは見たことがない記述が出て気ました。

まず行頭でいきなりimportという命令が来ます。
これはクラスライブラリを利用する時に宣言する記述です。

そもそもBufferedReaderというものを見たことも書いたこともなかったです。
どうやらこれはデータの読み込みを行う為のクラスということでした。

C言語を勉強した時には出てこなかったtryという書き方もjavaでは頻繁に使うようです。
あとは、クラスをnewして使う部分もC言語では出てこなかったと思います。

とにかく一度書いて動かしてみて慣れていくのがいいのかもしれません。

java言語に慣れる為にいろいろ書いてみる

Posted コメントするカテゴリー: JAVA

言語に慣れる為に、いろいろと書いて実行をさせてみます。
文法的にはC言語に近い部分があるので、初歩の段階では得に違和感もなく書いて動かしてみました。

public class hello {
    public static void main(String[] args) {
        
        System.out.print("hello\n");
        
        //改行を試す
        System.out.print("hello2\n");
        System.out.print("hello3\n");

        //日本語を試す
        System.out.print("でますか?\n");
        
        //加減乗除を試す
        System.out.print("たしざん" + (3+2) + "\n");
        System.out.print("ひきざん" + (3-2) + "\n");
        System.out.print("かけざん" + (3*2) + "\n");
        System.out.print("わりざん" + (3/2) + "\n"); //結果は余りが表示される
        
        //変数を試す
        int x;
        x = 5;
        System.out.print("変数の中身は" + x + "です");
        
    }
}

実行すると次のような結果になります。

hello
hello2
hello3
でますか?
たしざん5
ひきざん1
かけざん6
わりざん1
変数の中身は5です

JAVAでhellow worldを出力してみます

Posted コメントするカテゴリー: JAVA

JAVAでソースコードを書いて、コンパイルし、hellow worldを出力したとがないので、やってみます。(いままではIEDとかを使用していました)

次のコードを書いて、hello.javaというファイルに保存します。

public class Hellow {
	public static void main(String[] args) {
		System.out.print("hello");
	}
}

次にDOSコマンドプロンプトを立ち上げて、ソースコードを保存したディレクトリに移動します。

//便宜的に下記のディレクトリを作業ディレクトリにしました
cd C:\works\java

次にソースコードをコンパイルするコマンドを入力します。
コンパイルは「javac」の後にスペースを空けてソースコードを指定します。

C:\works\java>javac hello.java

と、ここで下記のようなエラーが発生しました。

'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

少し調べてみましたが、原因はまだわかっていません。

PC内の環境変数をチェックしてみましたが、正しくPATHが追加されていました。

(20140828追記)
その後、一旦PCから離れ改めてjavacを実行してみると次のように表示されました。
おそらくですが、JDKをインストールし、環境変数のpathを変更したあとにPCの再起動をした為かと思います。

C:\works\java>javac
使い方: javac <options> <source files>
使用可能なオプションには次のものがあります。
  -g                         すべてのデバッグ情報を生成する
  -g:none                    デバッグ情報を生成しない
  -g:{lines,vars,source}     いくつかのデバッグ情報だけを生成する
  -nowarn                    警告を発生させない
  -verbose                   コンパイラの動作についてメッセージを出力する
  -deprecation               推奨されない API が使用されているソースの位置を出力する
  -classpath <path>          ユーザークラスファイルおよび注釈プロセッサを検索する位置を指定する
  -cp <path>                 ユーザークラスファイルおよび注釈プロセッサを検索する位置を指定する
  -sourcepath <path>         入力ソースファイルを検索する位置を指定する
  -bootclasspath <path>      ブートストラップクラスファイルの位置を置き換える
  -extdirs <dirs>            インストール済み拡張機能の位置を置き換える
  -endorseddirs <dirs>       推奨規格パスの位置を置き換える
  -proc:{none,only}          注釈処理やコンパイルを実行するかどうかを制御します。
  -processor <class1>[,<class2>,<class3>...]実行する注釈プロセッサの名前。デフォルトの検出処理をバイパス
  -processorpath <path>      注釈プロセッサを検索する位置を指定する
  -d <directory>             生成されたクラスファイルを格納する位置を指定する
  -s <directory>             生成されたソースファイルを格納する場所を指定する
  -implicit:{none,class}     暗黙的に参照されるファイルについてクラスファイルを生成するかどうかを指定する
  -encoding <encoding>       ソースファイルが使用する文字エンコーディングを指定する
  -source <release>          指定されたリリースとソースの互換性を保つ
  -target <release>          特定の VM バージョン用のクラスファイルを生成する
  -version                   バージョン情報
  -help                      標準オプションの概要を出力する
  -Akey[=value]              注釈プロセッサに渡されるオプション
  -X                         非標準オプションの概要を出力する
  -J<flag>                   <flag> を実行システムに直接渡す

さらにコンパイルを実行してみると、コンパイルに失敗。

C:\works\java>javac hello.java
hello.java:1: クラス Hellow は public であり、ファイル Hellow.java で宣言しなければなりません。
public class Hellow {
       ^
エラー 1 個

プログラム内のクラス名がおかしいので修正をする。

public class hello {
	public static void main(String[] args) {
		System.out.print("hello");
	}
}

改めてコンパイル

C:\works\java>javac hello.java
C:\works\java>

何事もなく完了。コンパイルしたjavaを実行します。

C:\works\java>java hello
hello

と表示されました。
ケアレスミスが多くとまどりましたが、環境構築はひとまず完了です。

JAVAの開発環境を整える

Posted コメントするカテゴリー: JAVA

まず最初にJAVAの開発環境を用意します。

 

JAVAは移植性の高い言語と呼ばれています。

 

その理由は一度書いたソースコードはJVMと呼ばれる、プラットフォーム上で、ネイティブコードに変換して実行する仕組みになっている為、どの機械でも動作しやすいように設計されています。

 

配布時にはプラットフォームから独立したJAVAバイトコードになっていて、それをプラットフォーム固有のネイティブコードに変換して実行します。

 

この変換と実行を行う部分がJVMと呼ばれるものです。
実行前にまとめて変換することで実行時のオーバーヘッドをなくして実行速度を向上させたものをJITコンパイラと呼びます。

 

■開発環境を整える

まずは、JAVAを動作させる為に、JDKをインストールします。
公式のサイトからJDKをダウンロードし、自マシンにインストールします。
■公式サイト
http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html#javasejdk
■JDKのダウンロード(ここから適宜、バージョンを選択してダウンロードする)
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

JAVAの勉強を開始します

Posted コメントするカテゴリー: JAVA

これからJAVAの言語を勉強していきます。

今まではおぼろげながらJAVAに触れてきましたが、ひととおりの知識を得る為に、ひとつひとつ実験しながら、体系的にやっていきます。

体系的に知ることが目的なので、深すぎる部分については、次の段階で落とし込もうと思います。