12月10日、「徹底攻略 Java SE 8 Gold 問題集 [1Z0-809] 対応」著者より学ぶ試験対策ポイント解説セミナー
に行ってきたので、内容メモメモ
黒い本の著者の先生からのお話
■挨拶 インプレスの人
・Amazonのレビューいれてくれるとうれしいな
■試験のお話 Oracleの人
・前説:Oracle認定Java資格の動向
・JavaSE7/8:ブロンズ、シルバー、ゴールド
・新規のほかに、移行もある
・ところで、資格って役に立つと思いますか?
実務、キャリアで役立つ資格
・古いバージョンのままで大丈夫
1.1→1.2、1.4→1.5、1.7→1.8で大きな変化
・3年間でおよそ2倍。大部分が新しいバージョン
日本はSE8の選択はやい
・出題数85台、試験時間150分、合格ライン65%
→定期的に見直しをしている。ただし、出題範囲は変わらない
・青字がSE8の新機能
→ラムダ式、StreamAPI以外も結構出題範囲
・トピックは均等に出る
・ファイルIOはNIO2よりは基礎のほうがよく出ます
→しかもNIO2は突っ込んだものが出ない
・スレッドは満遍なく出る
・きゃんぺーんやってます。
期間変わった。オリジナルTシャツ
→申し込んでね。アメリカから船便で来る
再受験無料キャンペーン
■Java SE 8 Gold[1ZO-809]試験対策ポイント解説セミナー 米山 学 先生
・自己紹介
徹底攻略シリーズ書いている
・当初;引っ掛け問題→今:基礎知識を身に付ければ大丈夫。ただし、範囲が広い
Java8で関数型を取り入れ、Javaは大きく生まれ変わった→問われる
全部やってると収まらないので、ピックアップ
・試験の重要ポイント
関数型インターフェースとラムダ式
ストリームAPI
Date and Time API
ストリームAPIに関連するI/O
JDBC
→何らかの形で関数型インターフェース、ラムダ式が絡むものが
・どのように勉強していって、業務に生かしていくか
→コードを書いて理解
・実際に受験で受けて、書いている
→丸暗記だと、違った問題が出るかも
→応用問題が出題されても解ける:コードを書きながら
ダウンロードできる
●関数型インターフェースとラムダ式
・関数型インターフェースとは?
抽象メソッドが1つしか宣言されていないインターフェース
これまでもあったが、ことばがなかった。
それに名前を付けた
SAM(Single Abstruct Method)
→抽象メソッドの名前:単一の抽象メソッド
・関数型インターフェースの宣言
抽象メソッド(SAM)が1つしか存在しない
・staticメソッド、defaultメソッドは関数型インターフェースの要件とは関係がない
→Java8で、メソッドの実装を宣言できる
→これらは「抽象メソッドではない」:それ以外のメソッドは宣言されている可能性
→JavaDocもかわって、タブできりかえてみれる
・関数型インターフェースとラムダ式
匿名クラス(内部クラス、無名クラス)の実装を簡潔に書けるようにしたのがラムダ式
と考えてしまってもいいかな(細かく見ると差がある)
→ラムダ式:関数型プログラミングの定義はあるけど・・・
→匿名クラスが理解できていないと:コードを書いてみる
デモ:書いてみる
//関数型インターフェース
//アノテーションを付けられる
@FunctionalInterface
public interface Foo{
void x();
//ここでvoid y();とかくと、アノテーションがあるとエラーになる
}
// 実装するクラスを作れる
class FooImpl implements Foo {
@override
public void x()
{
System.out.println("OK");
}
}
// 匿名クラスで実装してみる
public class FooClient{
public static void main(String[] args){
// FOO foo = new FooImpl(); と書く代わりに
// 匿名クラス
Foo foo = new Foo() {
@override
public void x()
{
System.out.println("OK");
}
}
// ラムダ式で(匿名クラスから)
// 型推論で new Foo()と書かなくても分かる
// メソッド1つしかないので、関数は書かなくても分かる:けど、引数は残す
// つなぐためにー>
// 1行なら中括弧もいらない
public class FooClient{
public static void main(String[] args){
Foo foo =()ー>System.out.println("OK");
}
実際には、引数を取るもの、戻り値を返すものもある。
・メソッド参照とコンストラクタ参照
ラムダ式の簡略記述
ラムダ式が単一のメソッド呼び出しだけで完結している場合に記述可能
戻り値と引数のシグニチャが一致していなければならない
1行だけでかけるならメソッド参照でかける
Foo foo = System.out::println;
この場合、OKとかけない
テキスト137から139ページ
●java.util.functionパッケージの関数型インターフェース
・関数型インターフェース:汎用的な集合みたいなものがある
java.util.functionこのAPI重要。これわからないとStreamAPI使えない
java.util.streamも重要
・java.util.functionパッケージ
全てインターフェース、43→4つ完璧に理解する(試験では他もでる)
→のこりはだいたいわかる。
→覚える量はそんなにない(メソッド1つだけだから):あいまいだと狙われる
インターフェースのなまえ、メソッドの名前
・(1)Supplier<T> 供給者:なにかをあたえるだけ
メソッド 引数とらず、供給するだけのget() 呼び出し側から見て
ここがちがうと、コンパイルエラーになる
・(2)Consumer<T> 消費者:なにかを受け取る
メソッド accept受け取る=引数を受け取る。消費するだけなので、戻り値返さない
副作用(試験に問われることはない)
・(3)Predicate<T> 述語(論理学)確かめる
メソッド test 確かめる 受け取って、真か偽か返す
・(4)Function<T、R> 関数(関数型の関数) 型変数が2つある TとR
メソッド apply:引数を受け取って、戻り値を返す
・デモ:プログラム
// まず、匿名クラスで書く
import java.util.function.Supplier;
public class SupplierExample{
public static void main(String args){
Supplier<Integer>s = new Supplier<Integer>(){
public Integer get(){
return 1;
}
System.out.println(s.get());
}
}
//ラムダ式で書く
import java.util.function.Supplier;
public class SupplierExample{
public static void main(String args){
// 1行で書く場合、return と書いてはいけない
Supplier<Integer>s = () -> 1;
System.out.println(s.get());
}
}
・プリミティブ特殊化型
プリミティブ特殊化型:プリミティブ型だけを扱う
注意:Booloeanは、Supplierしかない
Supplierのメソッドはgetでなく、getAs●●の形
・型変換Function(Functionだけ)
・引数を2つ取るBiXxx
参照型とプリミティブ特殊化型がある
・UnaryOperatorとbinaryOperator
FunctionとBiFunctionの特殊化型(同一型を扱う)
継承の関係にあるので、型の互換性がある
全部同じ型なところに注意
・ラムダ式を返すラムダ式
X引数 -> y->x*y戻り値
↓
ここが返ってくる=ラムダ式を返す
テキスト P422
・でも かいてみる
public class Example{
public static void main(String args)
{
Function<Integer,Function<Integer,Integer>> f = x -> y -> x * y;
}
}
UnaryOperatorでも書き換えられる
public class Example{
public static void main(String args)
{
Function<Integer,UnaryOparator<Integer>> f = x -> y -> x * y;
f.apply(t);
}
}
ここで、FunctionとintFunctionは互換性がないので、applyになる
●StreamAPI
・関数型インターフェースをしっかり理解
・StreamAPI
StreamとCollectorsをしっかり
メソッドの引数が関数型インターフェース(ラムダ式)
・Stream Pipeline
データソース(配列、コレクション)→別のものへ
終端操作を実行する必要有り。最後に1回だけしか
戻り値にStreamを返すものは中間操作、そうでないものは終端操作
・特に重要なのはfilterとmap
mapメソッドのバリエーションまで
flatmap
reduceひとつにまとめる:畳み込み
2つメソッド
バイナリオペレータだけ取る:
2つの引数:初期値を取れる
collect:可変コンテナの中に入れる
●DateあんどTime
・java.timeパッケージのTemporalオブジェクトをまとめる
・計算をするためのメソッドTemporalあくせっさー
・ゾーンデートタイム UTC-1、UTC+1
●StreamAPIとI/O
・ためしてみてね
●JDBC
・仕組みも重要だけど、SQLの実行3種類、カーソル移動
・交信可能なResultSetの使い方
・データベース:JavaDBがあるので、簡単にアクセスできる
に行ってきたので、内容メモメモ
黒い本の著者の先生からのお話
■挨拶 インプレスの人
・Amazonのレビューいれてくれるとうれしいな
■試験のお話 Oracleの人
・前説:Oracle認定Java資格の動向
・JavaSE7/8:ブロンズ、シルバー、ゴールド
・新規のほかに、移行もある
・ところで、資格って役に立つと思いますか?
実務、キャリアで役立つ資格
・古いバージョンのままで大丈夫
1.1→1.2、1.4→1.5、1.7→1.8で大きな変化
・3年間でおよそ2倍。大部分が新しいバージョン
日本はSE8の選択はやい
・出題数85台、試験時間150分、合格ライン65%
→定期的に見直しをしている。ただし、出題範囲は変わらない
・青字がSE8の新機能
→ラムダ式、StreamAPI以外も結構出題範囲
・トピックは均等に出る
・ファイルIOはNIO2よりは基礎のほうがよく出ます
→しかもNIO2は突っ込んだものが出ない
・スレッドは満遍なく出る
・きゃんぺーんやってます。
期間変わった。オリジナルTシャツ
→申し込んでね。アメリカから船便で来る
再受験無料キャンペーン
■Java SE 8 Gold[1ZO-809]試験対策ポイント解説セミナー 米山 学 先生
・自己紹介
徹底攻略シリーズ書いている
・当初;引っ掛け問題→今:基礎知識を身に付ければ大丈夫。ただし、範囲が広い
Java8で関数型を取り入れ、Javaは大きく生まれ変わった→問われる
全部やってると収まらないので、ピックアップ
・試験の重要ポイント
関数型インターフェースとラムダ式
ストリームAPI
Date and Time API
ストリームAPIに関連するI/O
JDBC
→何らかの形で関数型インターフェース、ラムダ式が絡むものが
・どのように勉強していって、業務に生かしていくか
→コードを書いて理解
・実際に受験で受けて、書いている
→丸暗記だと、違った問題が出るかも
→応用問題が出題されても解ける:コードを書きながら
ダウンロードできる
●関数型インターフェースとラムダ式
・関数型インターフェースとは?
抽象メソッドが1つしか宣言されていないインターフェース
これまでもあったが、ことばがなかった。
それに名前を付けた
SAM(Single Abstruct Method)
→抽象メソッドの名前:単一の抽象メソッド
・関数型インターフェースの宣言
抽象メソッド(SAM)が1つしか存在しない
・staticメソッド、defaultメソッドは関数型インターフェースの要件とは関係がない
→Java8で、メソッドの実装を宣言できる
→これらは「抽象メソッドではない」:それ以外のメソッドは宣言されている可能性
→JavaDocもかわって、タブできりかえてみれる
・関数型インターフェースとラムダ式
匿名クラス(内部クラス、無名クラス)の実装を簡潔に書けるようにしたのがラムダ式
と考えてしまってもいいかな(細かく見ると差がある)
→ラムダ式:関数型プログラミングの定義はあるけど・・・
→匿名クラスが理解できていないと:コードを書いてみる
デモ:書いてみる
//関数型インターフェース
//アノテーションを付けられる
@FunctionalInterface
public interface Foo{
void x();
//ここでvoid y();とかくと、アノテーションがあるとエラーになる
}
// 実装するクラスを作れる
class FooImpl implements Foo {
@override
public void x()
{
System.out.println("OK");
}
}
// 匿名クラスで実装してみる
public class FooClient{
public static void main(String[] args){
// FOO foo = new FooImpl(); と書く代わりに
// 匿名クラス
Foo foo = new Foo() {
@override
public void x()
{
System.out.println("OK");
}
}
// ラムダ式で(匿名クラスから)
// 型推論で new Foo()と書かなくても分かる
// メソッド1つしかないので、関数は書かなくても分かる:けど、引数は残す
// つなぐためにー>
// 1行なら中括弧もいらない
public class FooClient{
public static void main(String[] args){
Foo foo =()ー>System.out.println("OK");
}
実際には、引数を取るもの、戻り値を返すものもある。
・メソッド参照とコンストラクタ参照
ラムダ式の簡略記述
ラムダ式が単一のメソッド呼び出しだけで完結している場合に記述可能
戻り値と引数のシグニチャが一致していなければならない
1行だけでかけるならメソッド参照でかける
Foo foo = System.out::println;
この場合、OKとかけない
テキスト137から139ページ
●java.util.functionパッケージの関数型インターフェース
・関数型インターフェース:汎用的な集合みたいなものがある
java.util.functionこのAPI重要。これわからないとStreamAPI使えない
java.util.streamも重要
・java.util.functionパッケージ
全てインターフェース、43→4つ完璧に理解する(試験では他もでる)
→のこりはだいたいわかる。
→覚える量はそんなにない(メソッド1つだけだから):あいまいだと狙われる
インターフェースのなまえ、メソッドの名前
・(1)Supplier<T> 供給者:なにかをあたえるだけ
メソッド 引数とらず、供給するだけのget() 呼び出し側から見て
ここがちがうと、コンパイルエラーになる
・(2)Consumer<T> 消費者:なにかを受け取る
メソッド accept受け取る=引数を受け取る。消費するだけなので、戻り値返さない
副作用(試験に問われることはない)
・(3)Predicate<T> 述語(論理学)確かめる
メソッド test 確かめる 受け取って、真か偽か返す
・(4)Function<T、R> 関数(関数型の関数) 型変数が2つある TとR
メソッド apply:引数を受け取って、戻り値を返す
・デモ:プログラム
// まず、匿名クラスで書く
import java.util.function.Supplier;
public class SupplierExample{
public static void main(String args){
Supplier<Integer>s = new Supplier<Integer>(){
public Integer get(){
return 1;
}
System.out.println(s.get());
}
}
//ラムダ式で書く
import java.util.function.Supplier;
public class SupplierExample{
public static void main(String args){
// 1行で書く場合、return と書いてはいけない
Supplier<Integer>s = () -> 1;
System.out.println(s.get());
}
}
・プリミティブ特殊化型
プリミティブ特殊化型:プリミティブ型だけを扱う
注意:Booloeanは、Supplierしかない
Supplierのメソッドはgetでなく、getAs●●の形
・型変換Function(Functionだけ)
・引数を2つ取るBiXxx
参照型とプリミティブ特殊化型がある
・UnaryOperatorとbinaryOperator
FunctionとBiFunctionの特殊化型(同一型を扱う)
継承の関係にあるので、型の互換性がある
全部同じ型なところに注意
・ラムダ式を返すラムダ式
X引数 -> y->x*y戻り値
↓
ここが返ってくる=ラムダ式を返す
テキスト P422
・でも かいてみる
public class Example{
public static void main(String args)
{
Function<Integer,Function<Integer,Integer>> f = x -> y -> x * y;
}
}
UnaryOperatorでも書き換えられる
public class Example{
public static void main(String args)
{
Function<Integer,UnaryOparator<Integer>> f = x -> y -> x * y;
f.apply(t);
}
}
ここで、FunctionとintFunctionは互換性がないので、applyになる
●StreamAPI
・関数型インターフェースをしっかり理解
・StreamAPI
StreamとCollectorsをしっかり
メソッドの引数が関数型インターフェース(ラムダ式)
・Stream Pipeline
データソース(配列、コレクション)→別のものへ
終端操作を実行する必要有り。最後に1回だけしか
戻り値にStreamを返すものは中間操作、そうでないものは終端操作
・特に重要なのはfilterとmap
mapメソッドのバリエーションまで
flatmap
reduceひとつにまとめる:畳み込み
2つメソッド
バイナリオペレータだけ取る:
2つの引数:初期値を取れる
collect:可変コンテナの中に入れる
●DateあんどTime
・java.timeパッケージのTemporalオブジェクトをまとめる
・計算をするためのメソッドTemporalあくせっさー
・ゾーンデートタイム UTC-1、UTC+1
●StreamAPIとI/O
・ためしてみてね
●JDBC
・仕組みも重要だけど、SQLの実行3種類、カーソル移動
・交信可能なResultSetの使い方
・データベース:JavaDBがあるので、簡単にアクセスできる