■学習について
身に付けるのは結構大変だと思います。あるところまでのレベルになるまでが大変です。まず、開発環境を作るものまあまあ手間です。以下のサイトだと、開発環境が不要で、ブラウザ上でコンパイルと実行ができるので便利です。学習するだけなら、手軽さを考えても一つの選択肢になると思います。
https://paiza.io/ja

■言葉
・JRE(Java Runtime Environment)
 Javaを使うための環境というかソフト。実行するための必要なライブラリも含んでいる
・JDK(Java Development Environment)
Javaの開発環境
これがないと、javacなどのコマンドによるコンパイルができません

・Javaのアプリケーションとアプレットとサーブレット
 簡単にいうと、Javaのアプリケーションは、OS上で実行されるプログラム。アプレットは、Web上で動くプログラム、サーブレットは、Webサーバ側で動く。アプレットの場合は、端末側にJavaの環境が必要。サーブレットの場合は、端末側にはブラウザさえあればいいので、サーブレットが今の主流。→JSP
・JavaはAndoroidでも利用されており、スマホアプリはJavaで書かれることが多い。→だから、Javaプログラマにニーズが高まっている。

■開発環境のインストール
①ダウンロード
http://mergedoc.osdn.jp/
pleiades-4.7.2-java-win-64bit-jre_20171225.zipをダウンロード。

②eclipseフォルダにあるeclipse.exeの実行

■操作方法
以下がわかりやすい
https://blog.codecamp.jp/eclipse
プログラムを書いて、
メニュー⇒実行→実行→Javaアプリケーション で画面に出力される

■Javaで作成するプログラムファイルとコンパイル
①ソースファイルの作成

プログラムのソースファイルの拡張子は .java とする
(例) Pg1.java

※クラスの名前とファイル名を同じにする必要あり。
public class Pg1 {
としたら、ファイル名はPg1.javaとする。

②コンパイル
 コンピュータが理解できる言葉に変換するために、コンパイルをする
 このときのコマンドはjavac 

 (例)
> javac Pg1.java

 すると、pg1.classという売クラスファイルが作成される。.classのファイルは中間コード(バイトコード)と呼ばれる

③プログラムの実行
 コンパイルしたファイルを実行する。このとき、クラス名だけでよく、拡張子の.classは不要

> java pg1

■とにかく、プログラムを書いて、動かしてみよう!
おまじない系の文字列が多い

public class Main {
 /**
  * hell という文字を表示する
  変数aに入れた値1を表示
  */
 public static void main(String[] args) {
  System.out.println("hello");
  int a=1;
  System.out.println("aの値は、" + a + "です。");
 }
}

■System.out.println
・変数を記載すると値が表示される。
・文字は""で囲うことで、そのまま表示。文字や変数をつなぎ合わせるのに+を使う。
 System.out.println("aの値は、" + a + "です。");
 ※aには1が格納されている

【出力結果】
 aの値は、1です。

・System.out.printを使うと、最後に改行コードが入らない。つまり、printlnのlnは改行(line)の意味である。まあ、厳密には、改行はLF(Line Feed)だと思いますが…。

■変数とデータ型
・型の宣言は必ず必要
・なぜ型が必要か。それは、変数ごとに値を格納するメモリ領域を確保するため。メモリ領域にどれだけのサイズを確保するかを決めるために型がある。
たとえば、intは4バイト、longは8バイト、charは2バイト、など。
・型が違うと代入できない。たとえば、int型の変数に3.2の小数を入れることはできない。ただ、逆というか、大きなサイズに小さなサイズの型は入る。たとえば、float型の変数に、整数3を入れることは可能。ただ、実際には3.0などのfloat型に変換されている。

・大文字小文字は区別される
・小文字で作成するのが一般的
・変数には、intやchar、double、booleanなどの基本型とString型、配列などの参照型がある。基本型は値がそのまま入っているが、参照型は、データを格納している場所の情報を格納している

(1)整数
 整数の型は、int(4バイト) とlong(8バイト)があるが、厳密にはshort(2バイト)とbyte(1バイト)がある。一般的にはintを使いましょう。

①int 4バイト整数

書き方は以下です。
int n;
n=123;

または
int n = 123;

intは整数型なので、i =5/2 とすると、2.5であるが、小数点は切り捨てられて2になる。
たとえば、以下を実行すると、2が表示される。
public class Main {
public static void main(String[] args) {
int i=5;
i=i/2;
System.out.println(i);
}
}

②long 8バイト整数
long m;
m=123456789L; //末尾にLまたはlをつける。小文字lだと1と間違えやすいので、大文字Lがいいだろう。

または、

long m=123456789L;

(2)小数
1.234などの小数(浮動小数点)を扱う場合は、float、double型を使う。一般的にはdoubleを使う。floatを使う場合は、longでLを付けたように、最後にF(またはf)をつける。

(3)文字および文字列
③char 文字(1文字) ★文字は'で囲う
char c;
c= 'A'; // 'で囲う(Stringは")

④String 文字列 ★Sは大文字、文字列は"で囲う
String mojiretsu = "Hello!";
改行コード(\r)を入れることも可能

(4)その他
⑤bolean型
boolean型(ブーリアンと読む)は、trueかfalseを表す

■変数の型変換
・ (double)a/b とすると、int型の値を割り算してdouble型にできる
・例は以下。iはintなので整数。jは小数点なので、double型。このとき、(double)をつけることで、doubleのか型に変換している。(double)をつけないと、i/2の結果の小数点が破棄されて2.0となってしまう。
public class Main {
public static void main(String[] args) throws Exception {
int i=5;
double j=(double)i/2;
System.out.println(j);
}
}

 ・int i = Integer.parseInt(a); //文字列を数字に変換する

 ■演算子
+ 和
- 差
* 積
/ 商
% 余り  たとえば、a%3 であれば、aを3で割った余り

n += 5;  // n=n+5
n -= 5;  // n=n-5
n++; // n=n+1
n--; // n=n-1

文字列でも使える。文字を結合することができる。
String a;
a="こん"+"にちは";
System.out.println(a);
※残念ながら、引き算や他の演算はできない・・・。まあ、当然か。

■コマンドライン引数
main関数に引数を渡すことができます。渡した引数は、argsの配列に格納されます。
※argsは、arguments(引数)という意味。

-----プログラム
class Test {
public static void main(String[] args) {
  System.out.print(args[0]);
  System.out.print(args[1]);
 }
}

------ 実行しましょう
> java Test orange apple
orange
apple

■キーボードからの文字や数字の入力
書き方はいろいろあるみたいだ。

(1)数字の入力 nextInt()を使う
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("好きな数字は?"); //文字列を表示
int num = scanner.nextInt();
System.out.println("あなたの好きな数字は " + num + " です!");
}
}

⇒まとめることも可能
public class Main {
public static void main(String[] args) {
System.out.println("好きな数字は?"); //文字列を表示
int num = new java.util.Scanner(System.in).nextInt();
System.out.println("あなたの好きな数字は " + num + " です!");
}
}

(2)文字列の入力   ・・・nextLine()を使う
文字列なのでString型にして、nextInt()の代わりにnextLine()を使う

■クラスとメソッド
冒頭の以下のTestというのがクラス名。
クラス名の先頭は大文字で
public class Test {

クラスの関数の中に記載するプログラムがメソッド

・言葉だけの説明ですが、・クラスの中で定義されている変数をメンバ変数(または属性)といい、メソッドは操作と言います。

ただ、広い意味のメソッドと、狭い意味ではメソッド(=手続き)があると思う。(確証はない)
狭義のメソッドの場合、クラスの中の処理の部分、つまり手続きという意味。広い意味のメソッドは、複数のメソッドも束ねた処理のひとまとまり。クラスで記載されるひとまとまりである。
なので、public class Main{ で始まるのもMainメソッドである。
MainがあることからわかるようにSubもある。サブメソッドを定義できる。このサブメソッドは、Mainから呼び出され、プログラムをまとめた部品となる。部品を活用することで、プログラムの保守性は格段に上がる。


(2)シンプルなメソッドを作ってみましょう。

public class Main {
public static void main(String[] args) { 
System.out.println("こんちくわ");
}
}

これを、methodとうメソッドで、処理を分けてみる。
部品化できるので、他でも流用可能だ。

public class Main {
public static void main(String[] args) {
method();
}

public static void method(){
System.out.println("こんちくわ");
}
}

■クラスとインスタンス
クラスを実体にしたのがインスタンス
インスタンス化(=クラスをインスタンスにする)にはnewを使う

class Fruits {
double size;
}
・・・  {

Fruits orange = new Fruits();
Fruits apple = new Fruits();}

--------事例
public class Main {
public static void main(String[] args) {
Main abc = new Main(); //Mainクラスのインスタンスをnewで作成
abc.print("A");//手続き
}
void print(String moji){
System.out.println(moji);
}
}

※シングルクォーテーション’にした場合、つまり obj.show('A') にしたら、以下に変更する。
void show(char sign)

■配列とは
変数をまとめて管理。番号(要素)をつけて管理できる。要素というか添え字は0から始まる。
配列に入るのは、同じ型のデータだけ

・配列の宣言
int[]data; 
data[]= new int[3];  //new によって、初期化するのとメモリ領域を確保している。int型が4つであれば、int(はたしか4バイトだったので)に必要なメモリを確保する。

※または、以下のように1行でも可
int[]data = new int[3];


注意点として、配列を宣言するだけのときには、要素数は指定できない。
つまり、int data[3]; とはできない。

・配列に値を入れる
 data[0] = 10;
 data[1] = 20;

①方法1
int[]data;// int data[]でも同じ
data=new int[3];
data[0]=10;
data[1]=20;
data[2]=30;

②方法2
int[]data={10,20,30}; 

③方法3
int[]data=new int[]{10,20,30};

★疑問 配列に入れるときは、クラスを作ってインスタンスに入れる方法と、いきなり変数に入れる方法があるのか(上記の②)
まあ、結果的には同じか。

・配列の長さを求めるのは、配列名に「.length]をつける
 int nagasa=data.length;

・配列でループさせる
以下のように、配列の長さの指定をdata.lengthにしておくといいでしょう。
int[] data=new int[]{10,20,30};
for (int i=0;i<data.length;i++){
System.out.println(data[i]);
}

⇒これは拡張forとう便利な構文を使って、簡略化して書くことができる。
int[] data=new int[]{10,20,30};
for (int a:data){
System.out.println(a);
}
これは、dataの配列の値を一つずつaに入れて処理してくれる。

■条件式
(1)基本
if (n>=10){ //nが10以上なら
if (n==10){ //nが10なら。=を2つつける。
if (moji.equals("終わり"){ //mojiが「終わり」だったら。文字列の場合は==ではなく、.equalsを使う
if (value != false){ //valueがfalseでなければ

(2)オプション
&& を使うと、2つの条件のAND
|| を使うと、2つの条件のOR
!  を使うと、条件の否定  →(例) if (!n==0) {

(3)三項演算子
a>b ? 1:2 a>bであれば1そうでなければ2を返します。

■ifの条件文
たとえば、年齢で大人か子供を判断する場合
int age=-10;
if (age>=20) {
System.out.print("大人");
} else if(0<=age){
System.out.print("子供");
} else {
System.out.print("正しく入力してください");
}

⇒⇒この場合は書きにくいが、if文をswitchでも書くことができる。
  switch(条件)
 case 条件の値1: //ここはコロン:
   処理;
   break;
  switch(条件)
 case 条件の値2: //ここはコロン:
   処理;
   break;

・同じ場合は==を使う
 ==  等しい
 <
 >
 >=
 <=
 != 等しくない
・ただし、文字列(String)の場合は、equalsを使う
★でも、以下はうまくいっていない。
String you="Gu";
if (you.eqals("Pa")) {
System.out.print("負け");
} else if(you.eqals("Choki")){
System.out.print("勝ち");
}
else if(you.eqals("Gu")){
System.out.print("アイコ");
}
}

■forによる繰り返し
int i=0;
for (i<5;i++){
system.out.println("iの値は" + i);
}

・減らしていく場合は i--

■while、forを使った繰り返し
簡単な例で、i=1 から5として、順に表示してみましょう。
(1)前判定
int i=1;
while(i<=4){
System.out.print(i); //改行コードを入れていません。
i++;
}
これは前判定で、後判定にすることも可能です。
その場合は、do whileを使います。
(2)後判定
int i=1;
  do{
System.out.print(i); //改行コードを入れていません。
i++;
} while(i<=4);

(3)forを使う場合
for (int i=1;i<=4;i++){
System.out.print(i); //改行コードを入れていません。
}
※こっちの方が、スッキリ書けますね。

■Forによるループの詳細
続きです。
forによる繰り返しを中断、またはスキップする方法があります。
①break 
 breakはswitchでも使いました。
 これを入れると、ループを中断して抜けます。
②continue
 continueは、1回だけ処理を抜ける場合に使います。ループ処理は継続されます。

■エスケープシーケンス
\n 改行
\' 'の意味。\をつけないと、プログラム上の意味で利用される

■コメントの書き方
1行のコメント → // コメント
複数行のコメント /*
           この間に複数行のコメントを書く
         */

 ■その他
System.exit(0); //プログラムの正常終了

 ■やってみよう!
①「こんにちは!」と表示するプログラムの作成

②変数に文字をいれてみよう

単純なプログラムとして、変数mojiに「こんにちは」と入れ、それを表示してみましょう。
public class Main {
public static void main(String[] args) {
String moji ;
moji = "こんにちは"; // String moji = "こんにちは"; と、1行にまとめても可
System.out.println(moji);
}
}

③文字列を入力してもらい、それを変数に入れてその文字を表示しましょう。