Java Advent Calendar 2014 - Qiita ã®9æ¥ç®ã§ãã9æ¥ã£ãã9æ¥ã§ãã ãªããé£ããã¨ã³ããªãå¤ãä¸ã§ããã空æ°ãèªã¾ãã«è»½ãã§ããã¾ãã
Javaã§ã¯è²ã ãªã³ã¼ãã®æ¸ãæ¹ãã§ãããã©ãå®éãã¾ããããªãããªã¼ã£ã¦æãã³ã¼ãã£ã³ã°ã«ã¤ãã¦ããããªãçç±ãç¡çç¢çæ¸ãã¦ã¿ãã
決ãã¦ããã£ã¦ã¯ãããªãã³ã¼ãã£ã³ã°ãã¨è¨ãæå³ã§ã¯ãªãã§ããåã«ãç§ã¯ãã¾ãããªããç¨åº¦ã§ãä¸è¬çãªï¼ï¼ï¼æ¥åéçºã§ããã¾ãè¦ãªãããããã®ä½ç½®ä»ããçè§£ããä¸ã§ããåã«ã¯å ¨ãåé¡ç¡ãã§ãããããè¨ãããã ã¨æã£ã¦ä½¿ã£ã¦ãè¯ãã¨ã¯æãã¾ãã
è¤æ°å¤æ°ãåæã«å®£è¨ãã
int i, j = 2, k;
åãåã®å¤æ°ï¼ãã£ã¼ã«ãã§ããã¼ã«ã«å¤æ°ã§ãï¼ã¯åãæã§å®£è¨ã§ãã¾ãã ãã©ããã¾ã使ã£ã¦ãã®ã¯è¦ã¾ããã åãåã§ãã使ããªããããã£ã¼ã«ãã ã¨JavaDocã³ã¡ã³ãæ¸ãè¾ãããåæå弿¸ãã«ããããã¾ã¨ããåä½ã©ãããã®ã¨ãé¢åãªè©±ã«ãªããã
ãããç¦æ¢ããã¦ãã³ã¼ãã£ã³ã°è¦ç´ã¨ãã¯ããè¦ãã ç¦æ¢ããã»ã©ãããªãã¨ã¯æãããã¹ãã¨ããéããä¸ã§ä½¿ãåã«ã¯å°ã楽ãªãã¨ããããã ã§ããããã¦å¤ãããªãã®ã§ç¦æ¢ã§ããããã¼ã
ä»£å ¥å¼ã䏿ã§ãã£ã±ããã
int i = 1; int j = 2; int k = i = j = 3; // âãã
i,j,kã¯å ¨é¨3ã«ãªãã¾ãã ããããã¾ã使ããªããã©ãä»£å ¥æ¼ç®å(=)ãå¤ãè¿ããã¨ã¨ãå³å´ããé çªã«è©ä¾¡ããããã¨ã¯ç¥ã£ã¦ãããªãã¨äºæ ãããã åæåæãå¤ãè¿ãããã¨ãã«ä»£å ¥ããããã¨ã¯ãã¾ã«ããã®ã§ããã®æã¯åºçªãforã®ä¸ã¨ãã§ãã¾ã«ä½¿ãæ°ãããã æ¼ç®é ã«è¿·ããªãã¨ããããæ¬å¼§ã§å ãã§ããã°è¯ãã§ãããã®æ¹ãæå³ã¯æç½ã«ãªããã ã§ãé çªã«æ©ããããªã³ã¼ããæ¸ããªãæ¹ãè¯ãã¨ã¯æãã¾ãã
ããã»ã©ä¾¿å©ãªããã§ããªãã®ã§ãæ®æ®µã¯ãã¾ãæèããã¦ãªãã£ããããã ã ããifæã§booleanã¨æ¯è¼ããã®ãééã£ã¦ä»£å ¥ãã¡ãã£ã¦ãã°ã£ããããããã ãã©ã
if (value = true) return;
ãã®ã³ã¼ãã¯trueã®å ´åã«returnããããã ãããã©ãvalueã«å¸¸ã«trueãä»£å ¥ããã¦ããã®å¤ãè¿ãããã®ã§ããã¤ã§ãreturnãããã¨ã«ãªãããã®ãã°ãèµ·ãããªãããã«ifã®ãbooleanãªãã©ã«ã¯å ã«æ¸ãããªãã¦ã®ããã¾ã«è¦ãããã©ããããªãã¨ããbooleanãªãæ¯è¼ã¨ããããã¨æããªããè¯ãã ãã§ãã
// ããã§ãæ¸ãééãã¦ãã³ã³ãã¤ã«ã¨ã©ã¼ã«ãªãï¼ã¹ããï¼ï¼ãã£ã¦è¨ã£ã¦ãªãã§â¦â¦ if (true = value) return; // ãããtrueã¨ãfalseã¨ãæ¸ãã®ããã¾ããããã¨ã if (value) return;
夿°åãvalueã¨ããã¡ãªæããã²ãã²ãã¨ã¯ããã®ã§ãããããã¯ã¹ã«ã¼ãã¦ãã ããã¾ãã
ãã ã®ãããã¯
void method() { { int i = 0; // iã®ã¹ã³ã¼ãã¯ãã®ä¸ã ã } // ããã§ã¯iã¯è¦ããªã }
ifæãforæãªã©ã¨ä¸ç·ã«ä½¿ãããªãããã ã®ãããã¯ã ã¡ã½ãããã³ã³ã¹ãã©ã¯ã¿ã®ä¸ã§ç»å ´ãããã¤ããã¤ã³ã¹ã¿ã³ã¹ã¤ãã·ã£ã©ã¤ã¶ã¨ã¯å¥ã ç¥ã£ã¦ããã¨ãã¾ã«ä¾¿å©ã ãã©ããã¾ã使ããªãã ç¡é§ã«éå±¤ãæ·±ãè¦ããããã¡ã½ããå ã§ãã®ãããªãã¨ããããã¨æã£ããããã¶ãã¡ã½ããã大ããããã
ç¨éãç¡ãããã«è¦ãããããããªããã©ãã³ããã§è¦ç´ ãå¢ããããæã¨ãã«ã¯ä½¿ããªããç¡ãããããªæãã§ã
List<Entry> list = new ArrayList<>(); { // 1ã¤ã Entry entry = new Entry(); entry.setValue("A"); list.add(entry); } { // 2ã¤ã Entry entry = new Entry(); entry.setValue("B"); list.add(entry); }
åã夿°åã使ããããã³ããã§ããï¼ã³ãããã¦å¤æ°åæ¸ãæãå¿ããã£ã¦å°å³ãªãã°ããªããªãï¼ã¹ããï¼ï¼â¦â¦ããã¡ãã£ã¨å¾ ã¦ããã¨ãã¾ãã¡ã½ããä½ãã£ã¦ã®ãæ£éã§ããã
æ°ãåãç´ãã¦ããããã¯ã使ãã¨ã¡ãã£ã¨å¤ãªã³ã¼ããæ¸ããããããªã
int i = 1; HOGE: { if (i > 0) break HOGE; System.out.println(i); }
ã¾ãã©ãã«èªä½ãã¾ã使ããªããã ãã©ããããã¯ã«ã¯ã©ãã«ãã¤ãããã®ã§ãã©ãã«ãæå®ãã¦breakãããã¨ãã§ããã ã¡ãªã¿ã«ã©ãã«ç¡ããããã¯ãbreakãããã¨ã¯ã§ããªãããæ³¨æãå¿ è¦ã ãã©ããããããããã¯ã使ããªãããã¾ãã¦ããããã¯ããbreakããªãã¨ã§ããªãå¦çã£ã¦æãã¤ããªãããã®æã®ãç´ ç´ã«ã¡ã½ããä½ã£ã¦returnããã°ããã ãã ãã
å¤ãªã³ã¼ãæ¸ãã¦ãªãã§ç´ ç´ã«æ¸ããæ¹ããã£ã½ã©è¯ãã¨æãã
ã©ãã«ãä»ãã
A: while(true) { B: while(true) { break A; } }
å¤éã«ã¼ãã¨ããæ¸ãã¨ç»å ´ãããã¨ããã¾ã«ããã©ãã«ããã ããèªä½ã¯ããã»ã©çãããç¡ããã©ããã£ã±ãã¾ãæ¸ããªãã ãããã¯ã©ãã«ã使ã£ã¦break(ãããã¯continue)ã ï¼ãã¨æã£ã¦æ¸ããã³ã¼ããããªããæ«ãããããããªã®ç¡ããªã£ã¦ããã¨ãå¤ããã¨ã¯è¨ã使ãæã¯ä½¿ãã¾ãã
ã§ããã¾ã使ããªãâ¦â¦ã¨è¨ããå ¨ã使ããªãã®ããã«ã¼ã以å¤ã«å¯¾ããã©ãã«ããããªã®ã
A: System.out.println("Aã©ãã«ä»ã");
ææ³ä¸ã¯ä»ãããããã©ç¨éãç¡ãâ¦â¦ã ããããã¦gotoã®åæ®ããªï¼Javaã«gotoæã¯ç¡ããã©ãä¸å¿ãã¼ã¯ã¼ãã«ã¯ãªã£ã¦ãã¦ã夿°ãªã©ã«ã¯ä½¿ç¨ã§ããªãã§ãã
switchæ
switch (hoge) { case FOO: // ... case BAR: // ... default: // ... }
enumã使ãããã¨ããJava SE 7以éã§ã¯Stringã使ãããã¨ãããªãã ããã ã§ãã¾ã使ããªãswitchæãããç§ã ãï¼
使ãæã¯ä½¿ãæ°ã¯ããã®ã ããã©ãnullå ¥ã£ããNullPointerExceptionãåºãããã¦enumãStringã§ã¯ä½¿ãè¾ã宿 ã switchãããã¯ã®ä¸ã¯caseã©ãã«ã並ã¹ãã ããªã®ã§ã·ã³ãã«ã«ãªããã¨ãããããããã¡ãã¡breakãå ¥ããªãã¨æ¬¡ã«è¡ã£ã¡ããã®ã§ãçµå±if-elseæã並ã¹ããããè¡æ°ãå¤ããªã£ã¦ãè¦éããæªããªãã®ãä¸å ã
enumã使ãæã¯switchã§åå²ãããã¨ã¯ããã®ã ãã©ããªãã ããã ã§enumã«å¦çæãããããå¦çãªãã¸ã§ã¯ãè¿ããããããæ¹ãè¦éããè¯ããªã£ã¦ãæ¸ãã¯ããã¯switch使ããã¨ããã®ã«â¦â¦ã£ã¦ãªããã¨ãå¤ãå°è±¡ããã£ãããªãã£ããã
ç¡åã¯ã©ã¹ã§ã®ã¤ã³ã¹ã¿ã³ã¹ã¤ãã·ã£ã©ã¤ã¶
new ArrayList<String>(Arrays.asList("X")) {{ add("A"); add("B"); }};
ããã¯å¾®å¦ãªã©ã¤ã³ã使ãå ´åã¯ãã£ã¤ã使ãã
æ¬å¼§ãäºéã«ãªã£ã¦ãããã«è¦ãããã©ãå®éã¯ç¡åã¯ã©ã¹ã®ä¸ã«å®ç¾©ãã¦ããã¤ã³ã¹ã¿ã³ã¹ã¤ãã·ã£ã©ã¤ã¶ã§ãã ã¤ã³ã¹ã¿ã³ã¹ã¤ãã·ã£ã©ã¤ã¶ã¯ã³ã³ã¹ãã©ã¯ã¿ãããåã«åä½ããããã©ãç¶æ¿ããç¡åã¯ã©ã¹ã®å ´åã¯ç¶æ¿å ã³ã³ã¹ãã©ã¯ã¿ãå®è¡ããã¦ããã«ãªãã¾ãã ã¨è¨ããã¨ã§ããã®ã³ã¼ãã®å ´åã¯ArrayListã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã§è¦ç´ ã追å ããã¦ããaddãããã®ã§ã[X,A,B]ã®é ã§å ¥ãã¾ãã
ãã®ã¿ã¤ãã³ã°ã¯çµæ§å¤§äºã§ãããç¡åã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã¤ãã·ã£ã©ã¤ã¶ã親ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ãããåã«åããªããæè§addããå¤ãã³ã³ã¹ãã©ã¯ã¿ã§ã®ç¶æ ã®åæåã«ããæ¶ãã¦ãªããªããã¨ã«ãªãã¾ãã ã¤ãã·ã£ã©ã¤ã¶ãã³ã³ã¹ãã©ã¯ã¿ã§ã¤ã³ã¹ã¿ã³ã¹ã®ç¶æ ã«ä¾åããå¦çãè¡ãã®ã¯é¿ããæ¹ãè¯ãã®ã¯ã¤ã³ã¹ã¿ã³ã¹ã®ç¶æ ãå®å®ããåï¼ä½æä¸ï¼ã®ç¶æ ã§è§¦ããã¨ã«ãªã£ã¦ãã¾ãããã ã£ãããã¾ãããç¡åã¯ã©ã¹ã§ã®ã¤ã³ã¹ã¿ã³ã¹ã¤ãã·ã£ã©ã¤ã¶ã¯è¦ªã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã®å¾ã«åãã¾ãã®ã§ãã¤ã³ã¹ã¿ã³ã¹ã®ç¶æ ã¯å®å®ãã¦ãã¨è¨ããªãã¯ç¡ãã®ã§ã大ä¸å¤«ãªæãã ã£ãããã¾ãã
ããããã§ãããã¤ãã·ã£ã©ã¤ã¶èªä½ããã¾ãè¦ãªãã®ã§ãåå¨ãç¥ããªã人ãçµæ§ããã¨ãããªãã¨ãã ç¡åã¯ã©ã¹ã¯ã³ã³ã¹ãã©ã¯ã¿ãæã¦ãªãã®ã§ã¤ãã·ã£ã©ã¤ã¶ã代ããã«ä½¿ããã¨ããããã©ã䏿 £ããªã¡ã³ãã¼ãå¤ããªã使ç¨ã¯æ éã«ãªã£ãæ¹ãããããããªãããªãã¨ãã
ãã¾ã使ããªãã¨è¨ãã¤ã¤ãæã¢ãã¯ã©ã¤ãã©ãªã使ãæã¨ãã¯å¤ç¨ããã®ã§ãæ§æã¨ãã¦ã¯æ¼ããã¦ããããã¨ããã
å¤ããã®ã¤ã³ãã¼ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹çæ
class Hoge { class Fuga { class Piyo {} } }; Hoge.Fuga.Piyo piyo = new Hoge().new Fuga().new Piyo();
ããªãããã ããããã¤ã³ãã¼ã¯ã©ã¹ãããã»ã©è¦ãªããã©ãããã¯ããã¨ãã¦ã ã¤ã³ãã¼ã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ã欲ãããªãæç¹ã§ä½ãããããæ°é ãããããã¾ãã¦ãçæãããªãã¦ãã ã¨ã¯è¨ãä½ããªãã¯ç¡ãã®ã§ãä½ãç¡çç¢çã¤ã³ã¹ã¿ã³ã¹ãçæãã¦ä½¿ãããæã¯å¯¾è±¡ã¤ã³ã¹ã¿ã³ã¹ã«ãããã§ç¶ãã¦newããã°ããã§ãã
ãã®ã³ã¼ãã§ã¯ã¡ã½ããå ã®ã¤ã¡ã¼ã¸ã§ããã¼ã«ã«ã¯ã©ã¹Hogeãå®ç¾©ãã¦ã¾ããã©ããã¼ã«ã«ã¯ã©ã¹ãè¦ããã¨ã¯ãã£ã¨ç¡ãã§ãã
è¤æ°è¡ã³ã¡ã³ã
// ãã®å½¢å¼ã®ã³ã¡ã³ãã¯ãã使ããã© /* ãã®å½¢å¼ã®ã³ã¡ã³ã㯠ãã¾ã 使ããªã */
ã³ã¡ã³ãã¢ã¦ãã¨ãããæãè¤æ°è¡é¸æã㦠Command+/
ã¨ãããã®ã§ããã
è¦è¾ãã¨ãçç±ã«ãããã¨ãããã©ãå®éã¯IDEã§ã³ã¡ã³ãã¯æåè²å¤ããããããã§ããªãã
è¤æ°è¡ã³ã¡ã³ãã¯ã³ã¡ã³ãã¢ã¦ãæã«å©ç¨ããã¨ã³ã¡ã³ãã¢ã¦ãé¨åãå·®åã¨ãã¦èªèããªãããå«ã / http://t.co/SnD5sedVVD
— Katsumi (@kokuzawa) December 9, 2014
https://twitter.com/takesi_yosimura/status/542533768729219072
ãã¼ãã¼ããããã«ã¼ã
ã»ãã³ãã³ã¬ã¹ãªãã¡ãã
ã¯ãã
ã¾ã¨ã
ãã£ã¨ãã£ã±ãæ¸ããã¨æã£ã¦ããã©ãæã£ãããæãæµ®ãã°ãªããã®ã§ããããã ããã¤ãã¯ãèªåã¯ãã¾ãæ¸ããªãï¼è¦ãªããã£ã¦ã ãã§ãä¸éã«ã¯æº¢ãã¦ãããã