Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introduction to Modern Java
Search
Takumi Endo
June 15, 2014
Programming
9.1k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introduction to Modern Java
社内勉強会資料(2014/06/17 修正)
Takumi Endo
June 15, 2014
More Decks by Takumi Endo
See All by Takumi Endo
ヒトとクルマと業務をつなげるコネクテッドカーサービス「Cariot」のAPI/Cariot API
tqjappy
3
3.9k
5分くらいでわかるSwagger / 5minutes-swagger
tqjappy
1
1.6k
Writing Nice Code
tqjappy
1
820
Other Decks in Programming
See All in Programming
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
110
その問い、本当に正しいですか?AI時代のエンジニアに必要な哲学と認知科学 / ai-philosophy-cognitive-science
minodriven
11
5.9k
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
360
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
6
1.3k
Creating Composable Callables in Contemporary C++
rollbear
0
150
Webフレームワークの ベンチマークについて
yusukebe
0
170
ECSアプリログをFireLensでコスト削減しようとしたけど諦めた話 in Fargate×Node.js
akihisaikeda
2
4.2k
Agentic UI
manfredsteyer
PRO
0
180
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
880
TAKTでAI駆動開発の品質を設計する
j5ik2o
7
1.4k
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.6k
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
7k
Skip the Path - Find Your Career Trail
mkilby
1
150
Information Architects: The Missing Link in Design Systems
soysaucechin
0
970
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
390
Everyday Curiosity
cassininazir
0
230
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
How Software Deployment tools have changed in the past 20 years
geshan
0
34k
Evolving SEO for Evolving Search Engines
ryanjones
0
220
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
New Earth Scene 8
popppiees
3
2.3k
Transcript
͘Β͍Ͱ͔Δ ࠷৽+BWBࣄ ॳ৺ऀͷ ॳ৺ऀʹΑΔ ॳ৺ऀͷͨΊͷ
͜ͷεϥΠυͷझࢫ w ࠷ۙͷࢀՃͨ͠+BWBܥΠϕϯτͷϨϙʔτ w ࠷ۙͷ+BWBपลͷτϐοΫΛͬ͘͟ΓͬͯΒ ͏ w ͍ͭͰʹɺࣗͰΞτϓοτ͢Δ͜ͱͰใΛ ཧͯ͠ཧղΛਂΊΔ w
ਤগͳΊɻखൈ͖Ͱ͋Γ·ͤΜʢखൈ͖Ͱͳ͍ ͱݴͬͯͳ͍ʣ
λʔήοτ w +BWBͷ͕ࣝ+BWB +BWB4& ͘Β͍Ͱࢭ·ͬ ͯΔਓ w +BWB͕͖Ͱ͑ΔΑ͏ʹͳΓ͍ͨΤϯδχΞ ʢओʹ৽ೖࣾһɺएखͷਓʣ
໔ࣄ߲ w ใಠஅͱภݟͰϑΟϧλϦϯά͞Ε͍ͯΔ ͱ͜Ζ͕͋Γ·͢ w ͜ͷ༰͕શͯͰͳ͍͠ɺઈରʹਖ਼͍͠ͱ͍ ͏ͷͰ͋Γ·ͤΜ
ϨϙʔτରͱͳΔ ใݯʹ͍ͭͯ
ߦ͖ͬͯͨ w (MBTT'JTI6TFST(SPVQ+BQBOษڧձ w ++6(φΠτηϛφʮ+BWB&&ಛूʯ w %FWFMPQFST4VNNJU
w &OUFSQSJTFº+BWB8FC"QQMJDBUJPO $POGFSFODF w ++6(Πϕϯτʮॕˑ+BWB-BVODIʯ w +BWB%BZ5PLZP
ߦͬͯͳ͍͚Ͳʜ w +BQBO+#PTT6TFS(SPVQḐͷ+#PTT w ++6(φΠτηϛφʮ+BWBղੳπʔϧότ ϧʯ w
++6(+((6(ڞ࠵φΠτηϛφʮ ࣌ؒͰ͔Δʂ࣍ੈϏϧυπʔϧͷຊ໋(SBEMFͷશ ʯ w ++6($$$4QSJOH
ങͬͨˍʢେମʣ ಡΜͩ w +BWBٯҾ͖ϨγϐʢΦεεϝʂʣ w +6OJU࣮ફೖʢΦεεϝʂʣ w ࣮ફςετۦಈ։ൃ w +#PTTߏஙɾӡ༻ύʔϑΣΫτΨΠυ
w #FHJOOJOH+BWB&&ʢۚڕຊʣ
͜͜࠷ۙͷ+BWBܥ χϡʔε
w ݄+BWB&&ϦϦʔε ˞+BWB&&݄ w ݄+BWB +BWB4& ϦϦʔε ˞+BWB4&݄
ΞδΣϯμ w +BWB4&ͱ+BWB&&ͬͯԿ͕ҧ͏ͷʁ w +BWB&&ͳʹ͕৽͘͠ͳͬͨͷʁ w +BWB4&ͳʹ͕৽͘͠ͳͬͨͷʁ w ࢀՃͨ͠ΠϕϯτͷϨϙʔτɾײ w
+BWBͷτϐοΫམͪึर͍
+BWB4&ͱ+BWB&&ͬͯ Կ͕ҧ͏ͷʁʢ෮शʣ
+BWBϓϥοτϑΥʔϜ छྨ ֓ཁ λʔήοτ +BWB4&ͱͷ ؔΘΓ +BWB4& 4UBOEBSE&EJUJPO ඪ४ͷ ػೳηοτ
৭ʑ +BWB&& &OUFSQSJTF&EJUJPO اۀ༻ ػೳηοτ αʔόͳͲ +BWB4&ʴ֦ுػೳ javax.* +BWB.& .JDSP&EJUJPO ΈࠐΈ͚ͷ اۀηοτ ΈࠐΈػث +BWB4&ͷ αϒηοτʴ ΈࠐΈ͚"1* ˞ ͔ͭͯͦΕͧΕ+4& +&& +.&ͱݺΕ͍ͯͨ ˞ ʮ+BWB4&&NCFEEFEʯͬͯͷ͋Δɻ+BWB.&ͱผ ˞ +BWB4&ʹjavax.*ܥͷ"1*͍ͬͺ͍͋Δʢ+/%*ͱ͔ʣ
+43 +BWB4QFDJpDBUJPO3FRVFTU w +BWBքͰͷ3'$ͷΑ͏ͳͷ w +BWBͷ༷+43ͷू·Γ w +BWB4& +BWB&&
+BWB.& w +$1 +BWB$PNNVOJUZ1SPDFTT ͕༷Λࡦఆ w 0SBDMF *#. 3FE)BUͳͲ w -JTUPGBMM+43T IUUQTKDQPSHFOKTSBMM
ϓϩϑΝΠϧ w +BWB&&ʹ͓͍ͯඞཁͳ༷͚ͩબ͢ΔΈ w 'VMMϓϩϑΝΠϧ w શ෦ೖΓ w 8FCϓϩϑΝΠϧ w
8FCΞϓϦέʔγϣϯ༷ w IUUQFOXJLJQFEJBPSHXJLJ+BWB@&&@WFSTJPO@IJTUPSZ
ࢀর࣮ʢϦϑΝϨϯε࣮3*ʣ w ༷Λ࣮ݱ͢ΔιϑτΣΞɺϋʔυΣΞ w +BWB4& 0QFO+%,ͳͲ w +BWB&& (MBTT'JTIͳͲ
w +43͋͘·Ͱ༷ͳͷͰɺ࣮͕ඞཁ w ඪ४༷ͳͷͰʢجຊతʹʣೖΕସ͕͑ޮ͘
ೖΕସ͕͑ޮ͘ͱݴͬͯʜ w ఏڙ͞Ε͍ͯΔKBSΛͬͯɺϕϯμґଘͷ"1*Λ͑ ɺҠ২ੑࣦΘΕΔ w ͷίʔσΟϯάʮҎ֎ʯͷ෦ͰΞϓϦέʔγϣϯ αʔό͝ͱͷੑ֨ΛΔඞཁ͕͋Δ w ΫϥεϩʔσΟϯάͷΈͳͲ w
ӡ༻ϊϋҟͳͬͯ͘Δ w ཧπʔϧʢBTBENJOͳͲʣɺ+.9
+BWB&&ΞϓϦέʔγϣϯαʔό ʢ044ฤʣ ໊લ ࠷৽ όʔδϣϯ +BWB&& උߟ (MBTT'JTI
+BWB&& WҎ߱༻αϙʔτऴྃ 8JME'MZ چ+#PTT "QQMJDBUJPO4FSWFS 'JOBM +BWB&& +BWB4&ରԠ "QBDIF5PN&& +BWB&& ݺͼํʮτϛʔʯ "QBDIF(FSPOJNP +BWB&&
+BWB&&ΞϓϦέʔγϣϯαʔό ʢ༻ϓϩμΫτฤʣ w 8FC-PHJD 0SBDMF w 8FC4QIFSF *#.
w +#PTT&OUFSQSJTF"QQMJDBUJPO1MBUGPSN 3FE)BU w ͳͲ
+BWB&&ͳʹ͕ ৽͘͠ͳͬͨͷʁ
+BWB&& w σϒαϛͰͷࣉా͞ΜͷൃදεϥΠυ ʮOFXGFBUVSFTPG+BWB&&JONJOVUFTʯ w IUUQXXXTMJEFTIBSFOFU0SBDMF.JEEMF+1KBWBFF GFBUVSFT w ݸਓతͳ w
K#BUDI +43 ɺ8FC4PDLFU +43 ɺ $PODVSSFODZ +43 ɺ+5" +43 ɺ+.4 +43
2+BWB&&ͷػೳ+BWB&& ڥ͡Όͳ͍ͱ͑ͳ͍ͷʁ ! "͑ͨΓ͑ͳ͔ͬͨΓ
+BWB4&Ͱ99͕͍ͨ͠ʂ +43 ࣮ݱྫ +43$POUFYUBOE %FQFOEFODZ*OKFDUJPO GPS+BWB&& $%* 8FMEIUUQXFMEDEJTQFDPSH +43+BWB"1*GPS 8FC4PDLFU
5ZSVTIUUQTUZSVTKBWBOFU +FUUZIUUQXXXFDMJQTFPSHKFUUZ ˞+FUUZʙʢ8FC4PDLFUͷରԠࣗମ͔Βʣ +43+"9345IF +BWB"1*GPS3&45GVM 8FC4FSWJDFT +43+"934 +FSTFZIUUQTKFSTFZKBWBOFU +43+BWB 1FSTJTUFODF +1" )JCFSOBUFIUUQIJCFSOBUFPSH ˞+1"ରԠҎ߱ʁ +43#BUDI "QQMJDBUJPOTGPSUIF +BWB1MBUGPSN K#BUDI ࣉా͞Μϒϩά IUUQZPTIJPDPNKCBUDIKTSPOKBWBTFڥ
+BWB&&ͷֶͼํ w ϝδϟʔͳΈ߹Θͤ(MBTT'JTI /FU#FBOT w ࢲతʹ8JME'MZ &DMJQTFʢ͔ͳʁʣ w ࠷ॳ&+#ɺ$%*ɺ+"934ɺ+.4ʢɺ+1"ʣ͋ͨΓ w
νϡʔτϦΞϧ5IF+BWB&&5VUPSJBM w IUUQEPDTPSBDMFDPNKBWBFFUVUPSJBMEPD w +BWB&&ͷࠃॻ੶·ͩͳ͍
ۀͰͷ+BWB&& w ͍͜ͳͤΔͳΒɺ͔ͳΓ༗ྗͳબࢶ w ։ൃ༰қੑɺ༷ͷεϦϜԽɺܰྔԽɺγϯϓ ϧԽɺ)5.- w ͍͜ͳͤΔΑ͏ʹͳΔ·ͰͷϋʔυϧԼ͕ͬ ͯΔ͚ͲɺͰͬͺΓͦΕͳΓʹߴ͍ w
ʮϋϚΔʯͱղܾʹ͕͔͔࣌ؒΔ
+BWB4&ͳʹ͕ ৽͘͠ͳͬͨͷʁ
ʜͷલʹɺ
+BWBˠ+BWB w 1SPKFDU$PJO +43 w TXJUDIจͰͷจࣈྻධՁ w ਐϦςϥϧɺϦςϥϧͷΞϯμʔόʔ۠Γ
w ྫ֎ͷϚϧνΩϟονͱਖ਼֬ͳ࠶εϩʔ w μΠϠϞϯυԋࢉࢠ w USZXJUISFTPVSDFT w ՄมҾར༻࣌ͷ@SafeVarargs
+BWBˠ+BWB w /*0 +43 w 'PSL+PJO'SBNFXPSL +43ͷΞοϓσʔτʣ w
*OWPLF%ZOBNJD +43
μΠϠϞϯυԋࢉࢠ List<String> messages = new ArrayList<String>(); +BWB List<String> messages =
new ArrayList<>(); +BWB
ྫ֎ͷϚϧνΩϟον try { // ... } catch (FooException e)
{ // ... } catch (BarException e) { // ... } catch (BazException e) { // ... } +BWB
ྫ֎ͷϚϧνΩϟον ˞ܧঝؔʹ͋Δྫ֎ϚϧνΩϟονෆՄʢίϯύΠϧΤϥʔʣ try { // ... } catch (FooException
| BarException | BazException e) { // ... } +BWB
ྫ֎ͷਖ਼֬ͳ࠶εϩʔ public void method() throws FooException, BarException { try {
// ... } catch (Exception e) { throw e; } } +BWB
Ϧςϥϧ int a = 0b101; // => 5 +BWB ˞0b·ͨ0BͰ͡ΊΔͱਐϦςϥϧ
int a = 1_000_000; // => 1000000 +BWB ˞ਐϦςϥϧʹݶΒͣɺϦςϥϧ@Ͱ۠Δ͜ͱ͕Ͱ͖Δ
USZXJUISFTPVSDFT BufferedReader br = null; try { br =
new BufferedReader(new FileReader(path)); String line = null; while((line = br.readLine()) != null) { // … } } finally { if (br != null) { try { br.close(); } catch(IOException ignore) { } } } +BWB
USZXJUISFTPVSDFT try (BufferedReader br = new BufferedReader(new FileReader(path)) {
String line = null; while((line = br.readLine()) != null) { // … } } +BWB ˞ ϦιʔεΛ࣮֬ʹΫϩʔζͯ͘͠ΕΔ ˞ ϦιʔεෳఆٛՄʢ࡞ͷٯॱʹΫϩʔζ͞ΕΔʣ ˞ tryϒϩοΫͱtry-with-resourcesͷ྆ํ͔Βྫ֎͕εϩʔ͞Ε ͨ߹ɺޙऀͷྫ֎੍͞ΕΔʢ#getSuppressedͰऔಘՄʣ ˞ catchϒϩοΫfinallyϒϩοΫΫϩʔζޙʹ࣮ߦ͞ΕΔ
/*0 BufferedReader br = Files.newBufferedReader( Paths.get("a.txt"), StandardCharsets.UTF_8); +BWB ˞ ҆શͳจࣈίʔυࢦఆ
˞ ศརͳϢʔςΟϦςΟ͕͍ͬͺ͍͋Δ List<String> lines = Files.readAllLines( Paths.get("a.txt"), StandardCharsets.UTF_8); +BWB
ʢվΊͯʣ+BWBͷ ৽͘͠ͳͬͨͱ͜Ζ
+BWB w ϩʔϯνΠϕϯτͰͷࣉా͞ΜͷൃදεϥΠυ ʮ/FX'FBUVSF0G+BWB4&ʯ w IUUQXXXTMJEFTIBSFOFU0SBDMF.JEEMF+1OFXGFBUVSF PGKBWBTF w ৄࡉ+BWB4&*5QSPʢᓎఉ͞Μʣ w
৽ػೳ֓ཁ w IUUQXXXPSBDMFDPNUFDIOFUXPSLKBWBKBWBTFXIBUT OFXIUNM
+BWBˠ+BWB w ͔ͳΓେ͖ͳΞοϓσʔτ w 3FWPMVUJPOˠɺˠ w &WPMVUJPOˠɺˠ w +BWBϓϩάϥϚมԽ͕ඞཁ
w ྫʣ$BMMBCMFېࢭɺOVMMېࢭɺGPSจېࢭ
+BWBˠ+BWB w ϓϩάϥϜతͳมߋϙΠϯτʢҰ෦ʣ w ϥϜμࣜ +43 ɺ4USFBN"1* w %BUFBOE5JNF"1*
+43 w 0QUJPOBM w ූ߸ͳ͠ w ΠϯλϑΣʔεͷσϑΥϧτ࣮ w λΠϓΞϊςʔγϣϯ
+BWBˠ+BWB w ෦ɾपลπʔϧతͳมߋϙΠϯτʢҰ෦ʣ w +BWB4DSJQUΤϯδϯ͕ʮ/BTIPSOʯʹมߋ w DMBTTϑΝΠϧͷϑΥʔϚοτ͕มΘͬͨ w 1FSNBOFOUྖҬ͕ͳ͘ͳΓ.FUBTQBDFʹมߋ
w )PU4QPU+7.ͱ+3PDLJU+7.ͷ౷߹ʹ͚ͨಈ͖ w +BWB.JTTJPO$POUSPM JDK_HOME/bin/jmc.exe
ϥϜμࣜ w +BWBͰؔʢؔܕΠϯλϑΣʔεʣΛهड़͢Δ ͨΊͷͷ w ؔܕΠϯλϑΣʔεʹ࣮͕ඞཁͳϝιου ͕͚ͭͩͷΠϯλϑΣʔε w ΫϩʔδϟͱҟͳΔ (引数のリスト)
-> { 処理 } +BWB
ϥϜμࣜʙجຊʙ list.sort(new Comparator<String>() { @Override public int compare(String s1, String
s2) { return s1.length() - s2.length(); } }); +BWB list.sort((String s1, String s2) -> { return s1.length() - s2.length(); }); +BWB
ϥϜμࣜʙলུʙ list.sort((s1, s2) -> s1.length() - s2.length()); list.sort((s1, s2) ->
{ return s1.length() - s2.length(); }); +BWB ˞ ࣗ໌ͳҾͷܕলུͰ͖Δ +BWB ˞ {}Ͱғ·ͳ͍߹ɺࣜͷ݁Ռ͕ͦͷ··ϥϜμࣜͷΓʹͳΔ
ࡉ͔͍ҙ w thisͷείʔϓ w ϥϜμࣜͷதͷthis֎ଆΛࢦ͢ w ϥϜμࣜͷதͰͷྫ֎ w ϥϜμࣜͷதͰͷྫ֎ɺ֎ଆͷtry-catchͰ ΩϟονͰ͖ͳ͍ͷͰɺϥϜμࣜͷதͰΩϟον͢Δ
w V·ͰϥϜμࣜͰͷྫ֎ΛϚϧνΩϟον͢Δͱ ͕ى͖Δʢ+%,ʣ
ؔܕΠϯλϑΣʔε w java.util.funcitonύοέʔδʹ৭ʑ͋Δ w ҾͷܕͱݸɺΓͷܕͰ͏͖ؔܕΠϯλϑΣʔεܾ ·Δ w ༻ҙ͞Ε͍ͯͳ͍ͷ@FunctionalInterfaceΛ͚ͭͨΠϯλ ϑΣʔεͱͯ͠ಠࣗʹ࣮͢Δɻ͜ͷΞϊςʔγϣϯඞਢͰͳ͍ ͕ɺ͚͓ͭͯ͘ͱίϯύΠϥ͕৭ʑࢦఠͯ͘͠ΕΔ
w ϝιου͕ఆٛ͞Ε͍ͯͳ͔ͬͨΓɺෳఆٛ͞Ε͍ͯΔͱίϯ ύΠϧΤϥʔ w σϑΥϧτ࣮ʢޙड़ʣΛͭϝιουҰͭͰίϯύΠϧΤϥʔ
2ϥϜμࣜͬͯɺಗ໊ʢ෦ʣΫϥεΘͣʹ γϯϓϧʹॻ͚ΔΑ͏ʹͳ͚ͬͨͩʁ "/P4USFBN"1*ͰਅՁΛൃش͢Δɻ ͪͳΈʹɺಗ໊Ϋϥεʹରͯ͠ɺ୯ͳΔ γϯλοΫεγϡΨʔͱ͍͏Θ͚Ͱͳ͍
4USFBN"1*ಋೖฤ for (String s : list) { System.out.println(s); } +BWB
list.forEach((s) -> System.out.println(s)); +BWB +BWB ϝιουࢀরͰ͞Βʹ؆ܿʹ list.forEach(System.out::println);
ϝιουࢀর w ҾͱΓͷܕ͕ϥϜμࣜͱಉ͡߹ɺϥϜμࣜͷ͔ ΘΓʹ͏͜ͱ͕Ͱ͖Δ w Φʔόʔϩʔυ͞Ε͍ͯͯ0,ʢܕਪ͕ݡ͍ʣ クラス名::staticメソッド名 +BWB インスタンス名::インスタンスメソッド名 +BWB
4USFBN"1* w List, Map, Setʹ4USFBN༻ͷ"1*͕Ճ w ྻ͔ΒArrays.stream(配列) w よくある「n回繰り返し」もこの通り IntStream.range(0,
10).forEach(System.out::println); +BWB
ετϦʔϜɾύΠϓϥΠϯ List<Integer> list = Arrays.asList(5, 2, 4, 3, 1); !
List<Integer> list2 = list.stream() .filter(n -> n >= 3) .map(n -> n *= 2) .sorted((n1, n2) -> n1 - n2) .collect(Collectors.toList()); +BWB ^தؒૢ࡞ ऴૢ࡞ ˞ ݸҎ্ͷதؒૢ࡞ͱ࠷ޙͷͭͷऴૢ࡞͔ΒͳΔ ˞ தؒૢ࡞Ԇ͞Εɺऴૢ࡞࣌ʹ·ͱΊ࣮ͯߦ͞ΕΔ ˞ stream()ͷ͔ΘΓʹparallelStream()Λ͏ͱฒྻॲཧͰ͖Δ ετϦʔϜੜ
࣮࣭తpOBM String msg = "test"; ! Runnable r1 = new
Runnable() { @Override public void run() { System.out.println(msg); } }; ! // ϥϜμ Runnable r2 = () -> { System.out.println(msg); }; +BWB +BWB final String msg = "test"; ! Runnable r1 = new Runnable() { @Override public void run() { System.out.println(msg); } }; ˞ finalͳ͠ͰࢀরՄೳʢ࠶ೖ͢ΔͱίϯύΠϧΤϥʔʹͳΔʣ
%BUFBOE5JNF"1* w +PEB5JNFతͳɾ࣌ࠁૢ࡞ͷ"1*͕ඪ४ͱ͠ ͯఏڙ͞Εͨ w ɿjava.time.LocalDate w ࣌ؒɿjava.time.LocalTime w ࣌ɿjava.time.LocalDateTime
java.util.Optional w ͵ΔΆͷΈ w ݺͼग़͠ଆʹରͯ͠ɺʮ͕ଘࡏ͢Δ͔͠Ε ͳ͍͠ɺଘࡏ͠ͳ͍͔͠Εͳ͍ʯ͜ͱΛ໌ࣔ Ͱ͖Δ w ࠓ·ͰOVMMνΣοΫ͢Δ͔Ͳ͏͔ͷஅ͕ ͔ͬͨ͠
ΠϯλϑΣʔεͷσϑΥϧτ࣮ w ΠϯλϑΣʔε͕σϑΥϧτͷ࣮Λ࣋ͯΔ w ΠϯλϑΣʔεʹstaticϝιουఆٛͰ͖Δ public interface Foo { !
default void hoge() { // ... } } +BWB
+BWB4&ͷֶͼํ w ϥϜμࣜɺ4USFBN"1*पΓͰ"1*͕͔ͳΓ૿͑ͨ w ·ͣಡΊΔΑ͏ʹͳΔͨΊͷ࠷ݶͷͷΛशಘ w ʮԶͷͬͯΔ+BWBͱҧ͏ʯঢ়ଶʹͳΒͳ͍ w *%&/FU#FBOT͕Α͍ʢ͔ͳʜʣ w
ࢼͨ͠ڥ.BD049 /FU#FBOT w &DMJQTFͱγϣʔτΧοτඍົʹҧ͏
+BWBͷτϐοΫ མͪึर͍
+BWBͷपลࣝ w +7.্Ͱಈ͘ݴޠ w ϙʔλϒϧ8FCΞϓϦέʔγϣϯ w ςετ w +7.ҎԼͷͷ w
+BWBύϥϝʔλνϡʔχϯά w ($ϝϞϦཧͷΈ
+7.্Ͱಈ͘ݴޠ w (SPPWZ w +3VCZ 3VCZ w +ZUIPO 1ZUIPO
w 4DBMB
(SPPWZ w (SPPWZΛ֮͑Δ͖ࢲతೋͭͷେ͖ͳཧ༝ ʢඅ༻ରޮՌ͕େ͖͍ͱࢥΘΕΔͷʣ w Ϣχοτςετ w (SBEMF
ϙʔλϒϧ8FCΞϓϦέʔγϣϯ w +BWB&&ͱผͷΞϓϩʔνͱͯ͠ɺKBSXBSҰͭͰಈ͔ͤΔΑ͏ ͳܗଶͰͷΞϓϦέʔγϣϯ w +FOLJOT IUUQKFOLJOTDJPSH w (JU#VDLFU
IUUQTHJUIVCDPNUBLF[PFHJUCVDLFU w ͦͷͨΊͷϑϨʔϜϫʔΫ w %SPQXJ[BSE IUUQTESPQXJ[BSEHJUIVCJPESPQXJ[BSE w /JOKB IUUQOJOKBGSBNFXPSLPSH
Ϟμϯͳ+BWBςετ w ୯ମςετ w +6OJUʢ&ODMPTFEɺ5IFPSZ͋ͨΓͷൺֱత৽͍͠ػೳʣ w (SPPWZͰॻ͘ w ݁߹ςετ w
"SRVJMMJBO w ෛՙςετ w (BUMJOH w ϒϥβςετ w (FC 4QPDL w (SBQIFOFʢ"SRVJMMJBOͱͷ౷߹ʣ
ࢀՃͨ͠Πϕϯτͷ Ϩϙʔτɾײ
Ϩϙʔτ w ࢀՃͨ͠ΠϕϯτͲΕࣄલఆһΦʔόʔ w Πϕϯτگͩͬͨ w ֎ͷΠϕϯτʹߦ͘ͷܹʹͳ͍͍ͬͯ
ײɺͱ͍͏͔࠷ۙ ΅ΜΓͱߟ͍͑ͯΔ͜ͱ
+BWBͷΑ͍ͱ͜Ζ w +BWBϓϩάϥϚ͍ͬͺ͍͍Δ w ΈࠐΈػثɺ8FCɺΤϯλʔϓϥΠζ·ͰΛΧόʔ͢Δ ద༻ྖҬͷ͞ w ಘҙͳ෦͚ͩ+BWBʹͤΔΞʔΩςΫνϟͰΑ͍ w ϚογϡΞοϓɺ4JOHMF1BHF"QQMJDBUJPO
w +BWB࣮֬ʹਐԽ͍ͯ͠Δ w ใྔ͕๛ʢωοτɺॻ੶ʣ
ࣄͰ+BWBΛ͏্Ͱͷ՝ w ୭ͰͦΕͳΓʹॻ͚Δނʹ࣭ʢಛʹอकੑʣͰࠩ ͕ग़Δ w +BWBͰͰ͖ͨطଘͷϨΨγʔγεςϜͷଘࡏ w աڈͷࢿ࢈Ͱ+BWBΛ֮͑Δํ๏ͩͱਰୀ͍ͯ͘͠ w +BWBͷΞοϓσʔτͷͱɺ৫ͷ+BWBεΩϧΞο
ϓͷͷͣΕʢ+BWBʹݶΒͳ͍͚Ͳʜʣ w ৽͍͠+BWBͷڧΈΛੜ͔͢৫෩ͮ͘Γ
݁ہɺ͍͍ͷΛɺ ͍͔ʹૣ͘ɺָ͘͠࡞Δ͔
w ʮࠓ999͕͍͍Μ͡Όͳ͍ͷʁʯ w +BWB999྆ํ͑ΔΑ͏ʹͳͬͨΒΑ͍ w ࠷దͳಓ۩ΛબΔΑ͏ʹҾ͖ग़͕͠ଟ͍͜ ͱॏཁ
w ʮ+BWBͬͯকདྷੑ͋Δͷʁʯ w কདྷ҆ହͳ͜ͱ͕อূ͞ΕͯΔٕज़ͳ͍ͷ Ͱ͔Δ͕ͣͳ͍
࣌ؒ༗ݶ w %POFJTCFUUFSUIBOQFSGFDU w ʮ४උͷ४උʹ͕͔͔࣌ؒΔʯප w ղܾʹ͕͔͔࣌ؒΓ͗͢ΔͷͩΊ w ೋͷਖ਼ w
εϞʔϧελʔτ
աͳϓϥΠυࣗ৴ࣺͯΔ w ͍ͬͯΔ͜ͱΑΓΒͳ͍͜ͱͷํ͕ଟ͍ w ͭ·ΓɺΒͳͯͨ͘Γલ w ʮͳʹͬͯͳ͍ʯ͜ͱΛ·ͣΔ w ʮ࣭Ͱ͖Δͷ৽ਓ͚ͩͷಛݖʯʁ w
ए͍ਓ͔Βͨ͘͞ΜֶͿ͖
·ͱΊ w ৽͍͠+BWB4&ɺ+BWB&&͕ϦϦʔε w +BWB4&͔Ώ͍ͱ͜Ζʹख͕ಧ͘Ξοϓσʔτ w +BWB4&େ͖ͳΞοϓσʔτ w Δ͔͠ͳ͍ɺ͜ͷϏοάΤʔϒʹ w
+BWBΠϕϯτ׆ൃͰͨ͠ w దࡐదॴͰ͏·͘+BWBΛ׆༻͍͖ͯ͠·͠ΐ͏
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ