fundamental java
DESCRIPTION
社内勉強会「Java基礎以前」講義資料TRANSCRIPT
Fundamental Java
HASUNUMA KenjiVice president, GlassFish Users Group Japan
[email protected]: @btnrouge
What’s Java?
Javaの特徴
• オープンな規格である
• 常に進化している
• 互換性を重視している
Javaはオープン規格
• 言語、標準API、仮想マシン仕様
• Java Community Processで標準化
• 現在はオープンソース (GPLv2)
•Write Once, Run Anywhere
•言語レベルでマルチスレッド対応•厳格な例外処理機構•Unicodeを全面的に採用
Write Once, Run Anywhere
• OS、Java VM実装に依存しない
• 古いコードが最新のJavaでも動く
• Blu-rayから巨大システムまで
������� ������� �������
������� ������� �������
����������������� �����������
当初: OSの差異をJava VMが吸収する
現在: Java VMが多言語の共通基盤へ
Essential Java
�������
�������
�������
��
��
��
�����������
����� �����
�����
��������������
��������������� �
Javaのエコシステム
������������
������������
������������
����������������
����������������
����������������
����������������
�����
��������
クラスとインタフェース
�����
�����
�����
�����������������
�������� !����
��������������
�����
�����
������
������
� ��������
� !�����
クラスの継承
����������������
����������������
����������������
����������������
��"������
#�������������"�
Polymorphismとは?
�����
������ ��
������ ����$%�������&�
����
'�&���(���
���(���
)�����&%%%
�������
プロセスとスレッド
�����
������ ��
������ ����$%�������&�
����
'�&���(���
���(���
)�����&%%%
�������
������ ����$%�* �
������ ����$%�* �
������ ����$%�* �
+������������
+�����
プロセスとスレッド
���� ��������
���� ��������
���� ��������
����� ,�
��"��-#�����
.��/��0� ,�
����0���
����
#���-
.��/��0
������
������
������
� �� ������"
�� ������"
� �� ������"
�� ������"
� �� ������"
�� ������"
���-"������"1
Javaの入出力(Stream)
現在では文字列データに特化したReader/Writerや、高速I/Oを実現するChannelもよく使われている
Javaのパッケージ�������������� ������������� ������
���
����
��
����� ��
���� ��
クラス名の表記方法
•原則: パッケージを含む完全名(例) java.util.List
• import宣言: 特定のパッケージを省略可(方法1) import java.util.List;(方法2) import java.util.*;
• java.lang…常にパッケージを省略可
Javaクラスの同一性
• クラス名が同一である
• パッケージ名が完全に一致している
• 同じクラスローダーから読み込まれた
Java Core Parts
クラスとオブジェクト
• クラスは定義のみ…実体がない
• オブジェクト(インスタンス)
…クラスから作成した実体のこと
• フィールドとメソッドはオブジェクトに属する(⇔staticはクラスに属する)
java.lang.Object
• Javaの全クラスのスーパークラス
• クラスの根幹に関わるメソッドを持つ
• プリミティブ型に対してリファレンス型と呼ばれることもある
java.lang.Object のメソッドjava.lang.Object のメソッドequals 同一チェックに使う
※原則としてオーバーライドするhashCode同一チェックに使う※原則としてオーバーライドする
toString 文字列表現を返す ※用途は様々wait スレッド制御用メソッド
※通常はConcurrency Utilitiesを経由して使用する(オーバーライド不可)
notifyスレッド制御用メソッド※通常はConcurrency Utilitiesを経由して使用する(オーバーライド不可)notifyAll
スレッド制御用メソッド※通常はConcurrency Utilitiesを経由して使用する(オーバーライド不可)
clone コピー(最近は使われない)finalize 後処理(通常はオーバーライドしない)
Object o = new Object();
Object o = new Object();
Object o = new Object();右辺と同じクラス
orスーパークラス
or実装インタフェース
Object o = new ArrayList();
キャスト
Object o = new ArrayList();• objの定義はObject、実体はArrayList
• アクセスは定義を通じて行う• 実体への直接アクセス→キャスト
ArrayList list = (ArrayList) o; • キャスト=サブクラスの定義でアクセス• キャスト後は実体に直接アクセス可能
プリミティブ型
• クラスではないデータ型
• 対応するクラス(ラッパー)を持つ
• auto-boxing/unboxing:プリミティブ型とラッパーの相互変換
プリミティブ型 ラッパークラスboolean Boolean
byte Bytechar Charactershort Short
int Integerlong Longfloat Float
double Double
配列
• 同じクラスorプリミティブ型の連続
• 演算子 [ ] で要素にアクセスする
• 内部的にはjava.lang.Arrayクラス
Object[ ] o = new Object[8];o は Objectの配列
(要素数は指定しない)配列の要素数は 8(必ず定数=後で変更不可)
配列の場合、左辺と右辺は同じクラス
その他の重要なトピック
• Generics (J2SE 5.0)
• Annotation (J2SE 5.0)
• Project Coin (Java SE 7)
• Collections Framework (J2SE 1.2)
• New I/O (J2SE 1.4 & Java SE 7)
• Concurrency Utilitites (J2SE 5.0 & Java SE 7)
Fundamental JavaHASUNUMA [email protected]: @btnrouge