変数を宣言する
type name [= init],…
type:データ型
name:変数名
init:初期値
変数とは、いわゆるアプリの中で扱うデータを一時的に保存しておくための入れ物です。変数を利用するには、まずその変数が「数値/文字列などどんな値を格納できるのか」「どんな名前を付けるのか」「最初に格納しておく値はなにか」などを宣言しておく必要があります。
たとえば以下は、double(小数点値)を格納するnumという変数を、初期値3.14で宣言する例です。
- package com.example.mynavi.basic;
- public class Variable {
- public static void main(String[] args) {
- double num = 3.14;
- System.out.println(num);
データ型が同じであれば、以下のように変数を列挙することもできます。
- double num = 3.14, num2 = 1.414;
これは、以下のように書いても同じ意味です。
- double num = 3.14;
- double num2 = 1.414;
変数の型は一度宣言した後は変更できません。よって、double型(小数点型)で宣言した変数にたとえば文字列を代入しようとした場合にはエラーとなります。
- num = "こんにちは、世界!"; // エラー
関連ページ
識別子の命名規則
変数をはじめとして、クラス/メソッドに付けられた名前のことを識別子と言います。識別子を付ける際のルールは、以下の通りです。
- 利用できる文字はUnicode文字すべて(ただし、先頭に数字は利用できない)
- 大文字/小文字は区別される
- Javaの予約文字ではないこと
1.のルールからすれば、識別子には日本語を利用することも可能です。しかし、一般的には英数字、アンダースコアに限定することをお勧めします。
予約語とは、Javaのコードの中で意味を持ったキーワードのことです。具体的には、以下のようなものがあります。
| Javaの主な予約語 | |||||
|---|---|---|---|---|---|
| abstract | assert | boolean | break | byte | case |
| catch | char | class | const | continue | default |
| do | double | else | enum | exports * | extends |
| false | final | finally | float | for | goto |
| if | implements | import | instanceof | int | interface |
| long | module * | native | new | non-sealed * | null |
| open * | opens * | package | permits * | private | protected |
| provides * | public | record * | requires * | return | sealed * |
| short | static | strictfp | super | switch | synchronized |
| this | throw | throws | to * | transient | transitive * |
| true | try | uses * | var * | void | volatile |
| when * | while | with * | yield * | ||
「*」はコンテキストキーワードと呼ばれる特別なキーワード。特定の文脈でのみ利用が制限されます(ただし、コンテキストキーワードであるかどうかで利用の可否を判断するのも面倒なので、一般的にはキーワードは種類を問わず、識別子として利用すべきではありません)。
また、構文規則ではありませんが、変数をより判別しやすくするという意味では、以下の点にも留意してください。
- 決められた記法で命名する
- 変数の内容を推測しやすい名前(x、yではなく、name、titleなど)
- 長すぎず、短すぎず
- 見た目が区別しにくい変数は避ける(usr、userなどは良くない)
- 先頭文字のアンダースコアは、特別な意味があるように見えるので避ける
- ローマ字での命名は避ける(例えばnamae、tenkiなど)
一般的な識別子の記法には、以下のようなものがあります。
- camelCase記法:先頭文字は小文字、単語の区切りは大文字(myNameなど)
- Pascal記法:先頭文字は大文字、単語の区切りも大文字(MyNameなど)
- アンダースコア記法:すべての文字は小文字、または大文字。単語の区切りはアンダースコア(MY_NAME、my_nameなど)
変数やメソッドを命名する場合にはcamelCase記法を、クラス/インターフェイスはPascal記法、定数はアンダースコア記法を、それぞれ利用するのが一般的です。
型推論
Java 10以降ではvarキーワードを利用することで、変数を宣言する際にデータ型を省略できるようになりました。
var命令
- var 変数名 = 初期値
たとえば以下は、冒頭の例をvarキーワードを使って書き換えた例です。
- package com.example.mynavi.basic;
- public class VarBasic {
- public static void main(String
[]args) { - var num = 3.14;
- System.out.println(num); // 結果:3.14
- }
- }
これまでと同じく、変数を利用できます。ただし、型が省略できるようになったからといって、型の概念がなくなるわけではありません。コンパイラーが初期値から型を推論して、自動的に決定しています(型推論)。上の例であれば、変数の型は推論された結果は、doubleです。
よって、以下のようなコードはコンパイルエラーとなります。変数dataの型は、宣言時にdoubleで決まるので、これにString型の値を代入することはできません。
- var data = 3.14;
- data = "Javaコード入門";
その他にも、varキーワードを利用する際には、以下のような注意点があります。
(1)初期値は省略不可
初期値から型を推論するしくみだからです。初期値がないvar宣言には「Cannot use ‘var’ on variable without initializer」のようなエラーが返されます。
(2)複数の変数を列挙できない
たとえば以下のコードは「’var’ is not allowed in a compound declaration」のようなエラーとなります。
- var num = 1, num2 = 22;
(3)使えるのはローカル変数だけ
varキーワードを使えるのは、ローカル変数の宣言だけです。フィールド宣言では、初期値の有無に関わらず、varキーワードは利用できません。
本稿でも、以降、型を明示すべき場合を除いて、varを使用していきます。
監修