■ APIとは
"Application Programming Interface"
簡潔にいうと、外部から呼び出して利用するシステム
例えば「Facebook Graph API 」
facebookのユーザー情報を自分のアプリケーションに入力してもらい、facebookのAPIに問い合わせ、true or falseでログインの可否を返してもらう
他にはクレジット系の課金システム ⇒ GMOのAPI
ユーザー情報の登録や利用、true or falseで返す など
■ JavaのAPI
JavaもAPIを標準で誰でも便利に使えるクラス(オブジェクト指向のクラスと同じで、呼び出して使える)を大量にまとめている
よく見るJava SE や Java EE は、これらJavaが提供しているAPIをまとめたもの
※補足:Java SE、Java EEについて
Java SE (Java Platform "Standard" Edition)は"Standard"、つまり基本的なAPIをまとめたもの Java.lang.Stringクラスはここに入っている
Java EE (Java Platform "Enterprise" Edition)は"Enterprise"(企業)、つまり企業システムなど大規模な開発を行う場合に必要となるAPIをまとめたもの
Java SE + 拡張機能 というイメージ
SE、EEともに定期的にバージョン更新され、新たな機能が追加されていっている(例えば、ラムダ式やStream APIなどはJava 8で追加された新機能)
(参考)
https://www.javadrive.jp/start/install/index5.html
https://www.sejuku.net/blog/12902
(以下続き)
Eclipseをイメージすると、関連する○○クラスはまとめて○○パッケージに格納されている
APIも同じで、大量に用意したクラスはそれぞれのパッケージに格納されており、よく聞くJava.utilパッケージや、Java.langパッケージがそれにあたる
またこれも同じく、通常作成したクラスは当たり前だがフィールドとメソッドを持っており、APIも同じく各クラスに様々なメソッドを持っている
例えば、文字列の長さを計算する「文字列変数名.length()」はJava.langパッケージのStringクラスが持っているメソッド
因みに配列の要素数を取得する際に使用した「配列名.length」は別物、メソッドではなく配列のフィールド
配列のフィールド…?(未解決)
⇒ 配列はそもそも参照型のデータ型であり、int型などの基本データ型の変数のように各要素1つ1つに値そのものが格納されているわけではない
int[] n = new int[5];
上記のように new することで
1.コンピュータのメモリに int 型の要素を5つもつ配列の領域を確保し
2.さらに配列変数 n の領域がメモリ上に確保され
3.最初の要素の「アドレス」が配列変数に代入される
つまり配列はインスタンスであり、そのフィールドとして length を持っている?
■ APIの利用
APIを実際のプログラムで利用する場合、例えば乱数を発生させるnextInt()メソッドを例に
public class Main{
public static void main(String[] args){
int a = new java.util.Rondom().nextInt(100);
system.out.println(a + "点です")
意味的にはnewでRondomクラスをインスタンス化させて、クラス内のnextIntメソッドを実行している
上記のようにパッケージ名を含めたクラス名を完全修飾名というが、java.utilパッケージのクラスを何度も使用する場合は、毎回の記述が面倒なため、クラス全体でインポート(パッケージ外のクラスを読み込む)する
また、クラス内のメソッドを複数使用する場合はクラスも含めてインポートする
import java.util.Rondom;
//パッケージすべての場合は
import java.util.*;
因みに、system.out.println()もJavaの標準APIで用意されているメソッド(Java.langパッケージのsystemクラス)のため、本来であればJava.langの記述、若しくはインポートが必要だが、Java.langパッケージに関しては使用頻度がかなり高いため、デフォルトでインポートされるようになっている
また参照型として使用している「String」も、Java.langパッケージに含まれるStringクラスで、比較の際に使用するequalsメソッドなどを含んでいる(先述のlengthメソッドも)
(参考)
https://www.internetacademy.jp/it/programming/java/using-java-api-and-class-library.html
https://style.potepan.com/articles/28932.html