Javaソースをコンパイルし、バイトコードを生成する。 JDKのコンパイラはjavac
コマンドを使う。
C:\\JSample\01> javac sample1.java
クラスファイルが生成される(sample1.class)。これが、バイトコード。
java
コマンドを使う。
C:\\JSample\01> java sample1
java
コマンドはバイトコード(クラスファイル)を解釈して、プログラムを実行する。 また、JavaのインタプリタのことをJVMとも呼ぶ。
クラスファイルがあれば、どのOS上でも同じように動作するのがJavaの強み。
class Sample1 {
public static void main(String[] args) {
System.out.println("ようこそJavaへ!");
System.out.println("Javaをはじめましょう!");
}
}
実行結果
ようこそJavaへ!
Javaをはじめましょう!
ここで3行目のようこそJavaへ!
と4行目のJavaをはじめましょう!
が出力する文字列で、その前に記述したSystem.out
は
==標準出力== (standard output)
という、「コンピュータの画面装置」のことを表している。
また、println
は「文字列を表示する」ということを表している。
そのため、System.out.println
は
==文字列を画面に出力する処理をしなさい==
ということになる。
ptintln
とprint
がある。
println
は最後に改行される。print
はそのまま出力される。
class Sample1 {
public static void main(String[] args) {
System.out.print("ようこそJavaへ!");
System.out.print("Javaをはじめましょう!");
}
}
実行結果
ようこそJavaへ!Javaをはじめましょう!
詳しくコードを見てみる
// 画面に文字列を表示するプログラム
class Sample1 {
public static void main(String[] args) {
System.out.print("ようこそJavaへ!");
System.out.print("Javaをはじめましょう!");
}
}
原則として、mainと記述されている部分(main()メソッド)から処理が始まる。
public static void main(String[] args)
- ==ブロック==
{}
で囲まれた部分。 - ==main()メソッド==
main
がついたブロック。
- ==文==
;
で区切られた処理。
文は原則として、上から順に実行される。
コードを書くとき、キーワードの間であれば、空白や改行をしても良い。
// 空白をたくさん入れてもいい
public static void main (String[] args){
コード中で字下げを行うことをインデントという。 インデントを行うことでコードが見やすくなる
public class Sample2 {
public static void main(String[] args) {
System.out.println("Hello world!");
}
}
動作はするけど、見づらい...
:::info 字下げ(インデント)は大事! :::
エディタ内では==tabキー==でインデントができる。
//
以降の記述はコメントとして解釈される。
// 今日の気分
System.out.println("お寿司食べたい");
// 明日の気分
System.out.println("お寿司をたくさん食べたい");
/* */
を使うことで複数行のコメントもできる。
/* お寿司ばっかりだと
飽きるから、違うものも食べたい
お肉とかお魚とか */
class Sample1 {
...
}
class
がついたブロックを==クラス==(class)という。class
の隣のSample1
を==クラス名==という
:::info Javaのコードは1つ以上のクラスから成り立つ :::
class Sample3 {
public static void main(String[] args) {
System.out.println('A');
System.out.println("ようこそJavaへ!");
System.out.println(123);
}
}
リテラルとは
:::info 一定の値を表すために用いられる、Javaの単語のようなもの :::
- 文字リテラル
- 文字列リテラル
- 数値のリテラル
'A'
'a'
' あ '
1文字を表すには'
でくくる。
キーボードからの入力では表せない文字がある。改行、'
、"
など。これらは\
を最初につけた2つの文字の組み合わせで「1文字」を表すことができる。これを==エスケープシーケンス==と呼ぶ。
入力値 | 意味 |
---|---|
\t | タブ |
\n | 改行 |
' | ' |
" | " |
|| | |
\xxx | 8進数xxxの文字コードを持つ文字(xxxは0~7の数字) |
\uhhhh | 16進数hhhhの文字コードを持つ文字(hhhhは0 |
class Sample4 {
public static void main(String[] args) {
System.out.println("バックスラッシュ:\\");
System.out.println("\t列を");
System.out.println("\t整える");
}
}
実行結果
バックスラッシュ:\
列を
整える
:::info エスケープシーケンスを使うと特殊な文字をあらわすことができる :::
コンピュータ内では、文字も数値で扱われる。各文字に対応する数値を==文字コード==と呼ぶ。Javaでは、==Unicode==と呼ばれる文字コードが使われている。
エスケープシーケンスの「\xxx」や「\uhhhh」を出力すると、指定した文字コードに対応する文字が出力される。
class Sample5 {
public static void main(String[] args) {
System.out.println("8進数101の文字は\101です。");
System.out.println("16進数0061の文字はaです。");
System.out.println("16進数3042の文字はあです。");
}
}
0x0061 = 97 0x3042 = 12354
複数の文字の並びを==文字列リテラル==という。
"
でくくる
"Hello"
"プラス"
"12345"
- 整数リテラル(integer literal):
1
、2
、999
など - 浮動小数点リテラル(floating-point literal):
2.1
、3.14
など
整数リテラルの表記法
- 8進数表記
- 10進数表記
- 16進数表記
10 // 10進数 10
010 // 8進数 8
0x10 // 16進数 16
0xF // 16進数 15
いろいろな表現方法で出力してみる
public class Sample6 {
public static void main(String[] args) {
System.out.println("8進数の10は" + 010 + "です。");
System.out.println("10進数の10は" + 010 + "です。");
System.out.println("16進数の10は" + 0x10 + "です。");
}
}
実行結果
8進数の10は8です。
10進数の10は10です。
16進数の10は16です。
:::success 画面への出力 main()メソッド ブロック コメント クラス リテラル エスケープシーケンス :::
==a-1.== 文字や数値などを使って、次のように画面に出力するコードを記述してください。
123
100円もらった
お寿司食べたい
==a-2.== 「タブ」記号をあらわすエスケープシーケンス(\t)を使って、次のように画面に出力するコードを記述してください。
こ ん に ち は
値を記憶しておくための箱
変数はコンピュータのメモリという装置を利用して値を記憶している。
コードの中で変数を使うには以下の2つのことを決めなければならない
- 変数に「名前」をつける
- 変数の「型」をつける
==識別子==とは、変数の名前として使える文字や数字の組み合わせのこと
識別子の規約
- 通常、英字・数字・アンダースコア(
_
)・$
などを使う - 長さの制限はない
- キーワードは使えない。例)
class
、return
など - 数字で始めることはできない
- 大文字と小文字は区別される
識別子の例
num
tmp_str
print_hello
str2
値にはいつくか種類がある。変数にどんな値の種類(==データ型==、==型==)を格納するのかを指定する。 Javaには以下のような、基本的な型(基本型)がある。
名前 | 値の範囲 |
---|---|
boolean | true または false |
char | 2バイト文字( 〜 �) |
byte | 1バイト整数(-128 〜 127) |
short | 2バイト整数(-32768 〜 32767) |
int | 4バイト整数(-2147483648 〜 2147483647) |
long | 8バイト整数(-9223372036854775808 〜 9223372036854775807) |
float | 4バイト単精度浮動小数点数 |
double | 8バイト単精度浮動小数点数 |
:::warning 型名 識別子; :::
実際のコード
int num;
char c;
double db, dd;
:::info 変数は型と名前を指定して宣言する :::
変数に特定の値を記憶させること。=
を使って、記述する。
num = 3;
:::warning 変数名 = 式; :::
代入を使ったコード
class Sample7 {
public static void main(String[] args) {
int num;
num = 3;
System.out.println("変数numの値は" + num + "です。");
}
}
実行結果
変数numの値は3です。
num
のように変数名だけを記述すると、変数に格納されている値が取り出される。
int num;
num = 3;
というように宣言と代入を分けていた。 Javaの場合、
宣言と同時に値を格納することもできる
このことを==変数を初期化する==という。
以下のように1行で記述できる。
int num = 3;
もし、初期化せずに変数の値を取り出そうとした場合、エラーになる。
class Sample8 {
public static void main(String[] args) {
int num;
// numに値を設定する前に使用しているため、エラーになる
System.out.println("変数numの値は" + num + "です。");
}
}
Eclipseの場合
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
ローカル変数 num が初期化されていない可能性があります
変数内の値を変更(上書き)することができる。
class Sample9 {
public static void main(String[] args) {
int num = 3;
System.out.println("変数numの値は" + num + "です。");
num = 9;
System.out.println("変数numの値は" + num + "です。");
}
}
実行結果
変数numの値は3です。
変数numの値は9です。
変数に値を代入することで、変数の値を変更できる。
class Sample10 {
public static void main(String[] args) {
int num1 = 3;
int num2;
System.out.println("変数num1の値は" + num1 + "です。");
num2 = num1;
System.out.println("変数num2の値は" + num2 + "です。");
}
}
実行結果
変数num1の値は3です。
変数num2の値は3です。
6行目でnum2
に「num1
の値」を代入している
ブロックの中では、同じ変数名の変数は宣言できない
class Sample11 {
public static void main(String[] args) {
int num1;
// エラーになる
int num1;
// 型が異なっても、エラーになる
double num1;
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class Sample12 {
public static void main(String[] args) throws IOException {
System.out.println("文字列を入力してください。");
BufferedReader br = new BefferedReader(new InputStreamReader(System.in));
String str = br.readLine();
System.out.println(str + "が入力されました。");
}
}
実行画面
文字列を入力してください。
こんにちは ⤵
こんにちはが入力されました。
入力された文字は文字列であるため、数値に変換する必要がある
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class Sample12 {
public static void main(String[] args) throws IOException {
System.out.println("文字列を入力してください。");
BufferedReader br = new BefferedReader(new InputStreamReader(System.in));
String str = br.readLine();
int num = Integer.parseInt(str);
System.out.println(num + " + 100 = " + (num + 100));
}
}
実行画面
文字列を入力してください。
10 ⤵
10 + 100 = 110
:::success 変数 識別子 型 変数の宣言 代入 初期化 キーボード入力 :::
==b-1== 以下のコードを埋めて、最終結果を出力するコードを記述してください。
class Practice_b1 {
public static void main(String[] args) {
// int型の変数numberを定義し、2018を代入
// 変数numberを使い、"今年は2018年です。"と出力する
}
}
実行結果
今年は2018年です。
==b-2== 次のように画面に出力するコードを記述してください。
あなたは何歳ですか?
20 ⤵
あなたは20歳です。
※自分の年齢を入力
式は==演算子==と==オペランド==を組み合わせて作られている。
1+2
の場合、+
が演算子、1
と2
がオペランド。
式の評価
式の計算が、評価と同じ意味。 例)1+2が評価すると3になる。 また、評価された後の値である3を式の値と呼ぶ
class Sample14 {
public static void main(String[] args) {
int num1 = 2;
int num2 = 3;
int sum = num1 + num2;
System.out.println("変数num1の値は" + num1 + "です。");
System.out.println("変数num2の値は" + num2 + "です。");
System.out.println("num1+num2の値は" + sum + "です。");
num1 = num1+1;
System.out.println("変数num1の値に1を足すと" + num1 + "です。");
}
}
実行結果
変数num1の値は2です。
変数num2の値は3です。
num1+num2の値は5です。
変数num1の値に1を足すと3です。
5行目のように、変数もオペランドとして使うこともできる。
11行目の処理は「変数num1の値に1を足し、その値を再度num1に代入する」という意味