クラスObject

java.lang.Object

public class Object
Objectクラスã¯ã€ã‚¯ãƒ©ã‚¹éšŽå±¤ã®ãƒ«ãƒ¼ãƒˆã§ã™ã€‚ ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¹ã¯ã€ã‚¹ãƒ¼ãƒ‘ー・クラスã¨ã—ã¦Objectã‚’æŒã¡ã¾ã™ã€‚ é…列をå«ã‚€ã™ã¹ã¦ã®ã‚ªãƒ–ジェクトã¯ã€ã“ã®ã‚¯ãƒ©ã‚¹ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’実装ã—ã¾ã™ã€‚
å°Žå…¥ã•れãŸãƒãƒ¼ã‚¸ãƒ§ãƒ³:
1.0
関連項目:
  • コンストラクタã®ã‚µãƒžãƒªãƒ¼

    コンストラクタ
    コンストラクタ
    説明
    æ–°ã—ã„オブジェクトを構築ã—ã¾ã™ã€‚
  • メソッドã®ã‚µãƒžãƒªãƒ¼

    修飾å­ã¨åž‹
    メソッド
    説明
    protected Object
    ã“ã®ã‚ªãƒ–ジェクトã®ã‚³ãƒ”ーを作æˆã—ã¦ã€è¿”ã—ã¾ã™ã€‚
    boolean
    ã“ã®ã‚ªãƒ–ジェクトã¨ä»–ã®ã‚ªãƒ–ジェクトãŒç­‰ã—ã„ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚
    protected void
    削除予定ã®ãŸã‚éžæŽ¨å¥¨: ã“ã®APIè¦ç´ ã¯ã€å°†æ¥ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å‰Šé™¤ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
    最終決定ã¯éžæŽ¨å¥¨ã§ã‚りã€å°†æ¥ã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
    final Class<?>
    ã“ã®Objectã®å®Ÿè¡Œæ™‚クラスを返ã—ã¾ã™ã€‚
    int
    ã“ã®ã‚ªãƒ–ジェクトã«å¯¾ã™ã‚‹ãƒãƒƒã‚·ãƒ¥ãƒ»ã‚³ãƒ¼ãƒ‰å€¤ã‚’è¿”ã—ã¾ã™ã€‚
    final void
    ã“ã®ã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã§å¾…機中ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã‚’1ã¤å†é–‹ã—ã¾ã™ã€‚
    final void
    ã“ã®ã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã§å¾…機中ã®ã™ã¹ã¦ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã‚’å†é–‹ã—ã¾ã™ã€‚
    ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æ–‡å­—列表ç¾ã‚’è¿”ã—ã¾ã™ã€‚
    final void
    ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒç›®è¦šã‚ã‚‹ã¾ã§å¾…機ã—ã¾ã™ã€‚通常ã€notifiedã¾ãŸã¯interruptedã§ã™ã€‚
    final void
    wait(long timeoutMillis)
    ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã¯ã€é€šå¸¸ã€notifiedã¾ãŸã¯interruptedã§ã‚ã‚‹ã‹ã€ä¸€å®šã®ãƒªã‚¢ãƒ«ã‚¿ã‚¤ãƒ ãŒçµŒéŽã™ã‚‹ã¾ã§ã€ç›®è¦šã‚ã‚‹ã¾ã§å¾…機ã—ã¾ã™ã€‚
    final void
    wait(long timeoutMillis, int nanos)
    ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã¯ã€é€šå¸¸ã€notifiedã¾ãŸã¯interruptedã§ã‚ã‚‹ã‹ã€ä¸€å®šã®ãƒªã‚¢ãƒ«ã‚¿ã‚¤ãƒ ãŒçµŒéŽã™ã‚‹ã¾ã§ã€ç›®è¦šã‚ã‚‹ã¾ã§å¾…機ã—ã¾ã™ã€‚
  • コンストラクタã®è©³ç´°

    • Object

      public Object()
      æ–°ã—ã„オブジェクトを構築ã—ã¾ã™ã€‚
  • メソッドã®è©³ç´°

    • getClass

      public final Class<?> getClass()
      ã“ã®Objectã®å®Ÿè¡Œæ™‚クラスを返ã—ã¾ã™ã€‚ è¿”ã•れるClassオブジェクトã¯ã€è¡¨ã•れãŸã‚¯ãƒ©ã‚¹ã® static synchronizedメソッドã«ã‚ˆã£ã¦ãƒ­ãƒƒã‚¯ã•れるオブジェクトã§ã™ã€‚

      実際ã®çµæžœåž‹ã¯Class<? extends |X|>ã§ã™ã€‚ã“ã“ã§ã€|X|ã¯getClassãŒå‘¼ã³å‡ºã•れるå¼ã®staticåž‹ã®æ¶ˆåŽ»ã§ã™ã€‚ ãŸã¨ãˆã°ã€ã“ã®ã‚³ãƒ¼ãƒ‰ã®æŠœç²‹ã§ã¯ã‚­ãƒ£ã‚¹ãƒˆã¯å¿…è¦ã‚りã¾ã›ã‚“。

      Number n = 0;
      Class<? extends Number> c = n.getClass();

      戻り値:
      ã“ã®ã‚ªãƒ–ジェクトã®å®Ÿè¡Œæ™‚クラスを表ã™Classオブジェクト。
      Java言語仕様をå‚ç…§ã—ã¦ãã ã•ã„:
      15.8.2 クラス・リテラル
    • hashCode

      public int hashCode()
      ã“ã®ã‚ªãƒ–ジェクトã«å¯¾ã™ã‚‹ãƒãƒƒã‚·ãƒ¥ãƒ»ã‚³ãƒ¼ãƒ‰å€¤ã‚’è¿”ã—ã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€HashMapã«ã‚ˆã£ã¦æä¾›ã•れるãƒãƒƒã‚·ãƒ¥è¡¨ãªã©ã®ã€ãƒãƒƒã‚·ãƒ¥è¡¨ã®åˆ©ç‚¹ã®ãŸã‚ã«ã‚µãƒãƒ¼ãƒˆã•れã¦ã„ã¾ã™ã€‚

      hashCodeã®ä¸€èˆ¬çš„ãªè¦å‰‡ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚

      • Javaアプリケーションã®å®Ÿè¡Œä¸­ã«åŒã˜ã‚ªãƒ–ジェクトã«å¯¾ã—ã¦è¤‡æ•°å›žå‘¼ã³å‡ºã•れãŸå ´åˆã¯å¸¸ã«ã€ã“ã®ã‚ªãƒ–ジェクトã«å¯¾ã™ã‚‹equalsã®æ¯”較ã§ä½¿ç”¨ã•れる情報ãŒå¤‰æ›´ã•れã¦ã„ãªã‘れã°ã€hashCodeメソッドã¯å¸¸ã«åŒã˜æ•´æ•°ã‚’è¿”ã™å¿…è¦ãŒã‚りã¾ã™ã€‚ ãŸã ã—ã€ã“ã®æ•´æ•°ã¯åŒã˜ã‚¢ãƒ—リケーションã®å®Ÿè¡Œã”ã¨ã«åŒã˜ã§ã‚ã‚‹å¿…è¦ã¯ã‚りã¾ã›ã‚“。
      • 2ã¤ã®ã‚ªãƒ–ジェクトãŒequalsメソッドã«å¾“ã£ã¦ç­‰ã—ã„å ´åˆã€2ã¤ã®ã‚ªãƒ–ジェクトã®ãれãžã‚Œã§ hashCodeメソッドを呼ã³å‡ºã™ã¨ã€åŒã˜æ•´æ•°çµæžœãŒç”Ÿæˆã•れる必è¦ãŒã‚りã¾ã™ã€‚
      • 2ã¤ã®ã‚ªãƒ–ジェクトãŒequalsメソッドã«å¾“ã£ã¦ç­‰ã—ããªã„å ´åˆã€2ã¤ã®ã‚ªãƒ–ジェクトã®ãれãžã‚Œã§hashCodeメソッドを呼ã³å‡ºã™ã¨ã€å€‹åˆ¥ã®æ•´æ•°çµæžœãŒç”Ÿæˆã•れる必è¦ã¯ã‚りã¾ã›ã‚“。 ãŸã ã—ã€ãƒ—ログラマã¯ã€ç­‰ã—ããªã„オブジェクトã«å¯¾ã—ã¦ç•°ãªã‚‹æ•´æ•°ã®çµæžœã‚’生æˆã™ã‚‹ã¨ã€ãƒãƒƒã‚·ãƒ¥è¡¨ã®ãƒ‘フォーマンスãŒå‘上ã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹ã“ã¨ã«æ³¨æ„ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。

      APIã®ãƒŽãƒ¼ãƒˆ:
      Objectsã®hashãŠã‚ˆã³hashCodeメソッドを使用ã™ã‚‹ã¨ã€å˜ç´”ãªãƒãƒƒã‚·ãƒ¥ãƒ»ã‚³ãƒ¼ãƒ‰ã‚’構築ã§ãã¾ã™ã€‚
      実装è¦ä»¶:
      厳密ã«å®Ÿç”¨çš„ãªæ–¹æ³•ã¨ã—ã¦ã€ã‚¯ãƒ©ã‚¹Objectã«ã‚ˆã£ã¦å®šç¾©ã•れãŸhashCodeメソッドã¯ã€å€‹åˆ¥ã®ã‚ªãƒ–ジェクトã«å¯¾ã—ã¦å€‹åˆ¥ã®æ•´æ•°ã‚’è¿”ã—ã¾ã™ã€‚
      戻り値:
      ã“ã®ã‚ªãƒ–ジェクトã®ãƒãƒƒã‚·ãƒ¥ãƒ»ã‚³ãƒ¼ãƒ‰å€¤
      関連項目:
    • equals

      public boolean equals(Object obj)
      ã“ã®ã‚ªãƒ–ジェクトã¨ä»–ã®ã‚ªãƒ–ジェクトãŒç­‰ã—ã„ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚

      equalsメソッドã¯ã€NULL以外ã®ã‚ªãƒ–ジェクトå‚ç…§ã«å¯¾ã—ã¦ã€ŒåŒå€¤é–¢ä¿‚ã€ã‚’実装ã—ã¾ã™:

      • å射性(reflexive): null以外ã®å‚照値xã«ã¤ã„ã¦ã€x.equals(x)ã¯trueã‚’è¿”ã—ã¾ã™ã€‚
      • 対称性(symmetric): null以外ã®å‚照値xãŠã‚ˆã³yã«ã¤ã„ã¦ã€y.equals(x)ãŒtrueã‚’è¿”ã™å ´åˆã«é™ã‚Šã€x.equals(y)ã¯trueã‚’è¿”ã—ã¾ã™ã€‚
      • 推移性(transitive): null以外ã®å‚照値xã€yã€ãŠã‚ˆã³zã«ã¤ã„ã¦ã€x.equals(y)ãŒtrueã‚’è¿”ã—ã€y.equals(z)ãŒtrueã‚’è¿”ã™å ´åˆã€x.equals(z)ã¯trueã‚’è¿”ã—ã¾ã™ã€‚
      • 一貫性(consistent): null以外ã®å‚照値xãŠã‚ˆã³yã«ã¤ã„ã¦ã€x.equals(y)ã®è¤‡æ•°ã®å‘¼å‡ºã—ã¯ã€ã“ã®ã‚ªãƒ–ジェクトã«å¯¾ã™ã‚‹equalsã«ã‚ˆã‚‹æ¯”較ã§ä½¿ã‚ã‚ŒãŸæƒ…å ±ãŒå¤‰æ›´ã•れã¦ã„ãªã‘れã°ã€ä¸€è²«ã—ã¦trueã‚’è¿”ã™ã‹ã€ä¸€è²«ã—ã¦falseã‚’è¿”ã—ã¾ã™ã€‚
      • null以外ã®å‚照値xã«ã¤ã„ã¦ã€x.equals(null)ã¯falseã‚’è¿”ã—ã¾ã™ã€‚

      等価関係ã¯ã€æ“作対象ã®è¦ç´ ã‚’「åŒç­‰ã‚¯ãƒ©ã‚¹ã€ã«ãƒ‘ーティション化ã—ã€ç­‰ä¾¡ã‚¯ãƒ©ã‚¹ã®ã™ã¹ã¦ã®ãƒ¡ãƒ³ãƒãƒ¼ã¯äº’ã„ã«ç­‰ã—ããªã‚Šã¾ã™ã€‚ 等価クラスã®ãƒ¡ãƒ³ãƒãƒ¼ã¯ã€å°‘ãªãã¨ã‚‚ãªã‚“らã‹ã®ç›®çš„ã§äº’ã„ã«ç½®æ›å¯èƒ½ã§ã™ã€‚

      APIã®ãƒŽãƒ¼ãƒˆ:
      通常ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ãŒã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã•れるãŸã³ã«hashCodeメソッドをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã€hashCodeメソッドã®ä¸€èˆ¬å¥‘ç´„ã‚’ç¶­æŒã™ã‚‹ã«ã¯ã€åŒç­‰ã®ã‚ªãƒ–ジェクトãŒåŒç­‰ã®ãƒãƒƒã‚·ãƒ¥ãƒ»ã‚³ãƒ¼ãƒ‰ã‚’æŒã¤å¿…è¦ãŒã‚ã‚‹ã“ã¨ã‚’示ã—ã¾ã™ã€‚

      2ã¤ã®å¼•æ•°ã®Objects.equalsメソッドã¯ã€NULLã®å¯èƒ½æ€§ãŒã‚ã‚‹2ã¤ã®ã‚ªãƒ–ジェクトå‚ç…§ã«å¯¾ã—ã¦ç­‰ä¾¡é–¢ä¿‚を実装ã—ã¾ã™ã€‚

      実装è¦ä»¶:
      Objectクラスã®equalsメソッドã¯ã€ã‚‚ã£ã¨ã‚‚比較ã—ã‚„ã™ã„オブジェクトã®åŒå€¤é–¢ä¿‚を実装ã—ã¾ã™ã€‚ã¤ã¾ã‚Šã€null以外ã®å‚照値xã¨yã«ã¤ã„ã¦ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯xã¨yãŒåŒã˜ã‚ªãƒ–ジェクトをå‚ç…§ã™ã‚‹(x == yãŒtrue)å ´åˆã«ã ã‘trueã‚’è¿”ã—ã¾ã™ã€‚ ã¤ã¾ã‚Šã€å‚照等価関係ã®ä¸‹ã§ã€å„等価クラスã«ã¯å˜ä¸€ã®è¦ç´ ã®ã¿ãŒã‚りã¾ã™ã€‚
      パラメータ:
      obj - 比較対象ã®å‚照オブジェクト。
      戻り値:
      ã“ã®ã‚ªãƒ–ジェクトãŒobj引数ã¨åŒã˜ã§ã‚ã‚‹å ´åˆã¯trueã€ãれ以外ã®å ´åˆã¯false。
      関連項目:
    • clone

      protected Object clone() throws CloneNotSupportedException
      ã“ã®ã‚ªãƒ–ジェクトã®ã‚³ãƒ”ーを作æˆã—ã¦ã€è¿”ã—ã¾ã™ã€‚ 「コピーã€ã®æ­£ç¢ºãªæ„味åˆã„ã¯ã€ã‚ªãƒ–ジェクトã®ã‚¯ãƒ©ã‚¹ã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚ ä¸€èˆ¬çš„ãªæ„図ã¯ã€ä»»æ„ã®ã‚ªãƒ–ジェクトxã«ã¤ã„ã¦ã€æ¬¡ã®å¼
       x.clone() != x
      ãŒtrueã§ã‚ã‚Šã€æ¬¡ã®å¼
       x.clone().getClass() == x.getClass()
      ãŒtrueã«ãªã‚‹ã“ã¨ã§ã™ãŒã€ã“れらã¯çµ¶å¯¾çš„ãªè¦ä»¶ã§ã¯ã‚りã¾ã›ã‚“。 ã¾ãŸæ¬¡ã®å¼
       x.clone().equals(x)
      ãŒtrueã«ãªã‚Šã¾ã™ãŒã€ã“れã¯çµ¶å¯¾çš„ãªè¦ä»¶ã§ã¯ã‚りã¾ã›ã‚“。

      慣例上ã€è¿”ã•れãŸã‚ªãƒ–ジェクトã¯ã€super.cloneを呼ã³å‡ºã™ã“ã¨ã«ã‚ˆã£ã¦å–å¾—ã™ã‚‹ã‚ˆã†ã«ã—ã¦ãã ã•ã„。 クラスã¨ãã®ã™ã¹ã¦ã®ã‚¹ãƒ¼ãƒ‘ー・クラス(Objectを除ã)ãŒã“ã®è¦å‰‡ã«å¾“ã£ã¦ã„ã‚‹å ´åˆã¯ã€x.clone().getClass()== x.getClass()ãŒæˆç«‹ã—ã¾ã™ã€‚

      通常ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã«ã‚ˆã‚Šè¿”ã•れるオブジェクトã¯ã€ã“ã®ã‚ªãƒ–ジェクト(複製ã•れã¦ã„ã¾ã™)ã‹ã‚‰ç‹¬ç«‹ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ ã“ã®ç‹¬ç«‹æ€§ã‚’実ç¾ã™ã‚‹ã«ã¯ã€super.cloneã«ã‚ˆã£ã¦è¿”ã•れãŸã‚ªãƒ–ジェクトを返ã™å‰ã«ã€ãã®1ã¤ä»¥ä¸Šã®ãƒ•ィールドを変更ã™ã‚‹ã“ã¨ãŒå¿…è¦ã«ãªã‚‹å ´åˆãŒã‚りã¾ã™ã€‚ ã“れã¯ã€é€šå¸¸ã€è¤‡è£½ã™ã‚‹ã‚ªãƒ–ジェクトã®å†…部「深層構造ã€ã‚’æ§‹æˆã™ã‚‹å¯å¤‰ã‚ªãƒ–ジェクトã®ã‚³ãƒ”ーã€ãŠã‚ˆã³ã“れらã®ã‚ªãƒ–ジェクトã¸ã®å‚照をコピーã¸ã®å‚ç…§ã«ç½®ãæ›ãˆã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ クラスã«ãƒ—リミティブ・フィールドã¾ãŸã¯ä¸å¤‰ã‚ªãƒ–ジェクトã¸ã®å‚ç…§ã—ã‹å«ã¾ã‚Œã¦ã„ãªã„å ´åˆã¯ã€é€šå¸¸ã€super.cloneã«ã‚ˆã£ã¦è¿”ã•れãŸã‚ªãƒ–ジェクト内ã®ãƒ•ィールドを変更ã™ã‚‹å¿…è¦ãŒã‚りã¾ã›ã‚“。

      実装è¦ä»¶:
      クラスObjectã®ãƒ¡ã‚½ãƒƒãƒ‰cloneã¯ã€ç‰¹å®šã®ã‚¯ãƒ­ãƒ¼ãƒ‹ãƒ³ã‚°æ“作を実行ã—ã¾ã™ã€‚ ã¾ãšã€ã“ã®ã‚ªãƒ–ジェクトã®ã‚¯ãƒ©ã‚¹ãŒã‚¤ãƒ³ã‚¿ãƒ•ェースCloneableを実装ã—ã¦ã„ãªã„å ´åˆã¯ã€CloneNotSupportedExceptionãŒã‚¹ãƒ­ãƒ¼ã•れã¾ã™ã€‚ ã™ã¹ã¦ã®é…列ãŒã‚¤ãƒ³ã‚¿ãƒ•ェースCloneableを実装ã—ã¦ã„ã‚‹ã¨è¦‹ãªã•れるã“ã¨ã€ãŠã‚ˆã³é…列型T[]ã®cloneãƒ¡ã‚½ãƒƒãƒ‰ã®æˆ»ã‚Šå€¤ã®åž‹ã¯T[] (ã“ã“ã§ã€Tã¯ä»»æ„ã®å‚ç…§ã¾ãŸã¯ãƒ—リミティブ型)ã§ã™ã€‚ 実装ã—ã¦ã„ãªã„å ´åˆã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã“ã®ã‚ªãƒ–ジェクトã®ã‚¯ãƒ©ã‚¹ã®æ–°ã—ã„インスタンスを生æˆã—ã€ãã®ãƒ•ィールドをã™ã¹ã¦ã€ã“ã®ã‚ªãƒ–ジェクトã®å¯¾å¿œã™ã‚‹å„フィールドã®å†…容ã§åˆæœŸåŒ–ã—ã¾ã™ã€‚ã“れã¯ä»£å…¥ã¨åŒæ§˜ã§ã€ãƒ•ィールドã®å†…容自身ãŒè¤‡è£½ã•れるã®ã§ã¯ã‚りã¾ã›ã‚“。 ã¤ã¾ã‚Šã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã‚ªãƒ–ジェクトã®ã€Œã‚·ãƒ£ãƒ­ãƒ¼ãƒ»ã‚³ãƒ”ーã€ã‚’生æˆã—ã¾ã™ãŒã€ã€Œãƒ‡ã‚£ãƒ¼ãƒ—・コピーã€ã¯ç”Ÿæˆã—ã¾ã›ã‚“。

      クラスObject自体ã¯ã‚¤ãƒ³ã‚¿ãƒ•ェースCloneableを実装ã—ã¦ã„ãªã„ãŸã‚ã€ã‚¯ãƒ©ã‚¹ãŒObjectã§ã‚るオブジェクトã«å¯¾ã—ã¦cloneメソッドを呼ã³å‡ºã™ã¨ã€å®Ÿè¡Œæ™‚ã«ä¾‹å¤–ãŒã‚¹ãƒ­ãƒ¼ã•れã¾ã™ã€‚

      戻り値:
      ã“ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã®è¤‡è£½ã€‚
      スロー:
      CloneNotSupportedException - オブジェクトã®ã‚¯ãƒ©ã‚¹ãŒCloneableインタフェースをサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„å ´åˆã€‚ cloneメソッドをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ãŸã‚µãƒ–クラスもã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’複製ã§ããªã„ã“ã¨ã‚’示ã™ãŸã‚ã«ã“ã®ä¾‹å¤–をスローã™ã‚‹ã“ã¨ãŒã‚る。
      関連項目:
    • toString

      public String toString()
      ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æ–‡å­—列表ç¾ã‚’è¿”ã—ã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã®ç¸®å°ã‚’満ãŸã™ã¨ã€null以外ã®çµæžœãŒè¿”ã•れる必è¦ãŒã‚りã¾ã™ã€‚
      APIã®ãƒŽãƒ¼ãƒˆ:
      一般ã«ã€toStringメソッドã¯ã€ã“ã®ã‚ªãƒ–ジェクトを「テキストã§è¡¨ã™ã€æ–‡å­—列を返ã—ã¾ã™ã€‚ ã“ã®çµæžœã¯ã€äººé–“ãŒèª­ã‚ã‚‹ç°¡æ½”ã§æœ‰ç›Šãªæƒ…å ±ã§ã‚ã‚‹ã¹ãã§ã™ã€‚ ã™ã¹ã¦ã®ã‚µãƒ–クラスã§ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ 文字列ã®å‡ºåŠ›ã¯ã€å¿…ãšã—も時間ã®çµŒéŽã¨ã¨ã‚‚ã«ã€ã¾ãŸã¯JVM呼出ã—全体ã§å®‰å®šã—ã¦ã„ã‚‹ã‚ã‘ã§ã¯ã‚りã¾ã›ã‚“。
      実装è¦ä»¶:
      クラスObjectã®toStringメソッドã¯ã€ã‚ªãƒ–ジェクトãŒã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«ãªã£ã¦ã„ã‚‹å…ƒã®ã‚¯ãƒ©ã‚¹ã®åå‰ã€ã‚¢ãƒƒãƒˆãƒžãƒ¼ã‚¯æ–‡å­—「@ã€ã€ãŠã‚ˆã³ã‚ªãƒ–ジェクトã®ãƒãƒƒã‚·ãƒ¥ãƒ»ã‚³ãƒ¼ãƒ‰ã®ç¬¦å·ãªã—16進数表ç¾ã‹ã‚‰æ§‹æˆã•れる文字列を返ã—ã¾ã™ã€‚ ã¤ã¾ã‚Šã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯æ¬¡ã®å€¤ã¨ç­‰ã—ã„æ–‡å­—列を返ã—ã¾ã™ã€‚
      getClass().getName() + '@' + Integer.toHexString(hashCode())
      
      Objects.toIdentityStringメソッドã¯ã€toStringメソッドもhashCodeメソッドもオブジェクトã®ã‚¯ãƒ©ã‚¹ã«ã‚ˆã£ã¦ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã•れãªã‹ã£ãŸå ´åˆã«è¿”ã•れる文字列ã¨ç­‰ã—ã„ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æ–‡å­—列を返ã—ã¾ã™ã€‚
      戻り値:
      ã“ã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã®æ–‡å­—列表ç¾
    • notify

      public final void notify()
      ã“ã®ã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã§å¾…機中ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã‚’1ã¤å†é–‹ã—ã¾ã™ã€‚ ã“ã®ã‚ªãƒ–ジェクトã§è¤‡æ•°ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒå¾…機中ã®å ´åˆã¯ã€ãã®ã†ã¡ã®1ã¤ã‚’å†é–‹ã—ã¾ã™ã€‚ ã“ã®é¸æŠžã¯ä»»æ„ã§ã€å®Ÿè£…ã«ã‚ˆã£ã¦ç•°ãªã‚Šã¾ã™ã€‚ スレッドã¯ã€waitメソッドを呼ã³å‡ºã™ã¨ã€ã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã§å¾…機ã—ã¾ã™ã€‚

      å†é–‹ã•れãŸã‚¹ãƒ¬ãƒƒãƒ‰ã®å‡¦ç†ã¯ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒã“ã®ã‚ªãƒ–ジェクトã®ãƒ­ãƒƒã‚¯ã‚’解除ã™ã‚‹ã¾ã§ã¯é€²ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。 å†é–‹ã•れãŸã‚¹ãƒ¬ãƒƒãƒ‰ã¯ã€ã»ã‹ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã¨åŒã˜ã‚ˆã†ã«ã€ã“ã®ã‚ªãƒ–ジェクトã¨åŒæœŸã™ã‚‹ã‚ˆã†ã«ç©æ¥µçš„ã«ç«¶ã„ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã“ã®ã‚ªãƒ–ジェクトをロックã™ã‚‹æ¬¡ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«ãªã‚ã†ã¨ã™ã‚‹å ´åˆã§ã‚‚ã€å†é–‹ã•れãŸã‚¹ãƒ¬ãƒƒãƒ‰ã®æ‰±ã„ã¯ã»ã‹ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã‚ˆã‚Šå„ªå‹¢ã§ã‚‚劣勢ã§ã‚‚ã‚りã¾ã›ã‚“。

      ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’呼ã³å‡ºã™ã®ã¯ã€ã“ã®ã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã‚’所有ã™ã‚‹ã‚¹ãƒ¬ãƒƒãƒ‰ã ã‘ã§ãªã‘れã°ã„ã‘ã¾ã›ã‚“。 スレッドãŒã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã®ã‚ªãƒ¼ãƒŠãƒ¼ã«ãªã‚‹æ–¹æ³•ã¯ã€æ¬¡ã®3通りãŒã‚りã¾ã™ã€‚

      • オブジェクトã®synchronizedインスタンス・メソッドを実行ã™ã‚‹ã€‚
      • ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆã‚’åŒæœŸåŒ–ã™ã‚‹synchronizedæ–‡ã®æœ¬ä½“を実行ã™ã‚‹ã€‚
      • Class,åž‹ã®ã‚ªãƒ–ジェクトã®å ´åˆã€ãã®ã‚¯ãƒ©ã‚¹ã®é™çš„åŒæœŸãƒ¡ã‚½ãƒƒãƒ‰ã‚’実行ã—ã¾ã™ã€‚

      オブジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã‚’所有ã§ãるスレッドã¯1回ã«1ã¤ã ã‘ã§ã™ã€‚

      スロー:
      IllegalMonitorStateException - ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒã“ã®ã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã‚’所有ã—ã¦ã„ãªã„å ´åˆã€‚
      関連項目:
    • notifyAll

      public final void notifyAll()
      ã“ã®ã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã§å¾…機中ã®ã™ã¹ã¦ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã‚’å†é–‹ã—ã¾ã™ã€‚ スレッドã¯ã€waitメソッドを呼ã³å‡ºã™ã¨ã€ã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã§å¾…機ã—ã¾ã™ã€‚

      å†é–‹ã•れãŸã‚¹ãƒ¬ãƒƒãƒ‰ã®å‡¦ç†ã¯ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒã“ã®ã‚ªãƒ–ジェクトã®ãƒ­ãƒƒã‚¯ã‚’解除ã™ã‚‹ã¾ã§ã¯é€²ã‚€ã“ã¨ãŒã§ãã¾ã›ã‚“。 å†é–‹ã•れãŸã‚¹ãƒ¬ãƒƒãƒ‰ã¯ã€ã»ã‹ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã¨åŒã˜ã‚ˆã†ã«ã€ã“ã®ã‚ªãƒ–ジェクトã¨åŒæœŸã™ã‚‹ã‚ˆã†ã«ç©æ¥µçš„ã«ç«¶ã„ã¾ã™ã€‚ãŸã¨ãˆã°ã€ã“ã®ã‚ªãƒ–ジェクトをロックã™ã‚‹æ¬¡ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«ãªã‚ã†ã¨ã™ã‚‹å ´åˆã§ã‚‚ã€å†é–‹ã•れãŸã‚¹ãƒ¬ãƒƒãƒ‰ã®æ‰±ã„ã¯ã»ã‹ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã‚ˆã‚Šå„ªå‹¢ã§ã‚‚劣勢ã§ã‚‚ã‚りã¾ã›ã‚“。

      ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’呼ã³å‡ºã™ã®ã¯ã€ã“ã®ã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã‚’所有ã™ã‚‹ã‚¹ãƒ¬ãƒƒãƒ‰ã ã‘ã§ãªã‘れã°ã„ã‘ã¾ã›ã‚“。 スレッドãŒã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã®ã‚ªãƒ¼ãƒŠãƒ¼ã«ãªã‚‹æ–¹æ³•ã«ã¤ã„ã¦ã¯ã€notifyメソッドをå‚ç…§ã—ã¦ãã ã•ã„。

      スロー:
      IllegalMonitorStateException - ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒã“ã®ã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã‚’所有ã—ã¦ã„ãªã„å ´åˆã€‚
      関連項目:
    • wait

      public final void wait() throws InterruptedException
      ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒç›®è¦šã‚ã‚‹ã¾ã§å¾…機ã—ã¾ã™ã€‚通常ã€notifiedã¾ãŸã¯interruptedã§ã™ã€‚

      ã™ã¹ã¦ã®ç‚¹ã§ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯wait(0L, 0)ãŒå‘¼ã³å‡ºã•れãŸã‹ã®ã‚ˆã†ã«å‹•作ã—ã¾ã™ã€‚ 詳細ã«ã¤ã„ã¦ã¯ã€wait(long, int)メソッドã®ä»•様をå‚ç…§ã—ã¦ãã ã•ã„。

      スロー:
      IllegalMonitorStateException - ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã‚’所有ã—ã¦ã„ãªã„å ´åˆ
      InterruptedException - ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒå¾…機ã—ã¦ã„ãŸå‰ã¾ãŸã¯ä¸­ã«ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«å‰²ã‚Šè¾¼ã¿ãŒç™ºç”Ÿã—ãŸå ´åˆã€‚ ã“ã®ä¾‹å¤–ãŒã‚¹ãƒ­ãƒ¼ã•れるã¨ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã®å‰²è¾¼ã¿ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã‚¯ãƒªã‚¢ã•れる。
      関連項目:
    • wait

      public final void wait(long timeoutMillis) throws InterruptedException
      ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã¯ã€é€šå¸¸ã€notifiedã¾ãŸã¯interruptedã§ã‚ã‚‹ã‹ã€ä¸€å®šã®ãƒªã‚¢ãƒ«ã‚¿ã‚¤ãƒ ãŒçµŒéŽã™ã‚‹ã¾ã§ã€ç›®è¦šã‚ã‚‹ã¾ã§å¾…機ã—ã¾ã™ã€‚

      ã™ã¹ã¦ã®ç‚¹ã§ã€ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯wait(timeoutMillis, 0)ãŒå‘¼ã³å‡ºã•れãŸã‹ã®ã‚ˆã†ã«å‹•作ã—ã¾ã™ã€‚ 詳細ã«ã¤ã„ã¦ã¯ã€wait(long, int)メソッドã®ä»•様をå‚ç…§ã—ã¦ãã ã•ã„。

      パラメータ:
      timeoutMillis - 待機ã™ã‚‹æœ€å¤§æ™‚é–“(ミリ秒å˜ä½)
      スロー:
      IllegalArgumentException - timeoutMillisãŒè² ã®å ´åˆ
      IllegalMonitorStateException - ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã‚’所有ã—ã¦ã„ãªã„å ´åˆ
      InterruptedException - ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒå¾…機ã—ã¦ã„ãŸå‰ã¾ãŸã¯ä¸­ã«ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«å‰²ã‚Šè¾¼ã¿ãŒç™ºç”Ÿã—ãŸå ´åˆã€‚ ã“ã®ä¾‹å¤–ãŒã‚¹ãƒ­ãƒ¼ã•れるã¨ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã®å‰²è¾¼ã¿ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã‚¯ãƒªã‚¢ã•れる。
      関連項目:
    • wait

      public final void wait(long timeoutMillis, int nanos) throws InterruptedException
      ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã¯ã€é€šå¸¸ã€notifiedã¾ãŸã¯interruptedã§ã‚ã‚‹ã‹ã€ä¸€å®šã®ãƒªã‚¢ãƒ«ã‚¿ã‚¤ãƒ ãŒçµŒéŽã™ã‚‹ã¾ã§ã€ç›®è¦šã‚ã‚‹ã¾ã§å¾…機ã—ã¾ã™ã€‚

      ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã¯ã€ã“ã®ã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ãƒ»ãƒ­ãƒƒã‚¯ã‚’所有ã—ã¦ã„ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ スレッドãŒãƒ¢ãƒ‹ã‚¿ãƒ¼ãƒ»ãƒ­ãƒƒã‚¯ã®æ‰€æœ‰è€…ã«ãªã‚‹æ–¹æ³•ã«ã¤ã„ã¦ã¯ã€notifyメソッドをå‚ç…§ã—ã¦ãã ã•ã„。

      ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰(ã“ã“ã§ã¯Tã¨å‘¼ã°ã‚Œã¾ã™)ã‚’ã“ã®ã‚ªãƒ–ジェクトã®å¾…機セットã«é…ç½®ã—ã€ã“ã®ã‚ªãƒ–ジェクトã®åŒæœŸè¦æ±‚ã‚’ã™ã¹ã¦æ”¾æ£„ã—ã¾ã™ã€‚ ã“ã®ã‚ªãƒ–ジェクトã®ãƒ­ãƒƒã‚¯ã ã‘ãŒè§£æ”¾ã•れるã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。スレッドãŒå¾…機ã—ã¦ã„ã‚‹é–“ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒåŒæœŸåŒ–ã•れã¦ã„ã‚‹ä»–ã®ã‚ªãƒ–ジェクトã¯ãƒ­ãƒƒã‚¯ã•れãŸã¾ã¾ã§ã™ã€‚

      スレッドTã¯ã‚¹ãƒ¬ãƒƒãƒ‰ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒªãƒ³ã‚°ã®ç›®çš„ã§ç„¡åйã«ãªã‚Šã€æ¬¡ã®ã„ãšã‚Œã‹ãŒç™ºç”Ÿã™ã‚‹ã¾ã§ä¼‘止状態ã«ãªã‚Šã¾ã™:

      • ã»ã‹ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒã“ã®ã‚ªãƒ–ジェクトã«å¯¾ã—ã¦notifyメソッドを呼ã³å‡ºã—ã€å†é–‹ã•れるスレッドã¨ã—ã¦ã‚¹ãƒ¬ãƒƒãƒ‰TãŒé¸ã°ã‚ŒãŸã€‚
      • ã»ã‹ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒã“ã®ã‚ªãƒ–ジェクトã«å¯¾ã—ã¦notifyAllメソッドを呼ã³å‡ºã—ãŸã€‚
      • ã»ã‹ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒã‚¹ãƒ¬ãƒƒãƒ‰Tã«å‰²ã‚Šè¾¼ã¿ã‚’ã‹ã‘る。
      • 指定ã•れãŸå®Ÿæ™‚é–“ãŒçµŒéŽã—ãŸã€‚ リアルタイムã®é‡(ナノ秒å˜ä½)ã¯ã€å¼1000000 * timeoutMillis + nanosã«ã‚ˆã£ã¦ä¸Žãˆã‚‰ã‚Œã¾ã™ã€‚ timeoutMillisã¨nanosãŒä¸¡æ–¹ã¨ã‚‚ゼロã§ã‚ã‚‹å ´åˆã€å®Ÿæ™‚é–“ã¯è€ƒæ…®ã•れãšã€ã‚¹ãƒ¬ãƒƒãƒ‰ã¯ä»–ã®åŽŸå› ã®1ã¤ã«ã‚ˆã£ã¦èµ·ã“ã•れるã¾ã§å¾…ã¤ã€‚
      • スレッドTãŒå½ã£ã¦èµ·ã“ã•れã¾ã™ã€‚ (後述ã®èª¬æ˜Žã‚’å‚ç…§ã—ã¦ãã ã•ã„)

      ãã®å¾Œã‚¹ãƒ¬ãƒƒãƒ‰Tã¯ã“ã®ã‚ªãƒ–ジェクトã®å¾…機セットã‹ã‚‰å‰Šé™¤ã•れã€ã‚¹ãƒ¬ãƒƒãƒ‰ã®ã‚¹ã‚±ã‚¸ãƒ¥ãƒ¼ãƒªãƒ³ã‚°ãŒãµãŸãŸã³å¯èƒ½ã«ãªã‚Šã¾ã™ã€‚ é€šå¸¸ã®æ–¹æ³•ã§ä»–ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã¨ç«¶åˆã—ã€ã‚ªãƒ–ジェクト上ã§åŒæœŸã‚’ã¨ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚オブジェクトã®åˆ¶å¾¡ã‚’回復ã™ã‚‹ã¨ã€ãã®ã‚ªãƒ–ジェクトã«å¯¾ã™ã‚‹ã™ã¹ã¦ã®åŒæœŸè¦æ±‚ãŒç¾çŠ¶ç¶­æŒã«æˆ»ã•れã¾ã™ - ã¤ã¾ã‚Šã€waitメソッドãŒå‘¼ã³å‡ºã•ã‚ŒãŸæ™‚点ã®çжæ³ã«æˆ»ã‚Šã¾ã™ã€‚ 次ã«ã‚¹ãƒ¬ãƒƒãƒ‰Tã¯waitメソッドã®å‘¼ã³å‡ºã—ã‹ã‚‰å¾©å¸°ã—ã¾ã™ã€‚ ã“ã†ã—ã¦ã€waitメソッドã‹ã‚‰å¾©å¸°ã—ãŸæ™‚点ã§ã€ã‚ªãƒ–ジェクトãŠã‚ˆã³ã‚¹ãƒ¬ãƒƒãƒ‰Tã®åŒæœŸã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã€waitメソッドãŒå‘¼ã³å‡ºã•れãŸã¨ãã¨ã¾ã£ãŸãåŒã˜ã«ãªã‚Šã¾ã™ã€‚

      スレッドã¯ã€é€šçŸ¥ã€ä¸­æ–­ã¾ãŸã¯ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã™ã‚‹ã“ã¨ãªãã€ã„ã‚ゆる「å½ã®èµ·åºŠã€ã§èµ·å‹•ã§ãã¾ã™ã€‚ スプリアス・ウェイクアップã¯ã€å®Ÿéš›ã«ã¯ã¾ã‚Œã«ã—ã‹ç™ºç”Ÿã—ã¾ã›ã‚“ãŒã€ã‚¢ãƒ—リケーションã§ã¯ã€ã‚¹ãƒ¬ãƒƒãƒ‰ãŒå†é–‹ã•れるã“ã¨ã§ç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚ã‚‹æ¡ä»¶ã‚’テストã—ã€æ¡ä»¶ãŒæº€ãŸã•れãªã„å ´åˆã¯å¾…機を続ã‘ã¦ã€ã‚¹ãƒ—リアス・ウェイクアップã‹ã‚‰ä¿è­·ã—ãªã‘れã°ã„ã‘ã¾ã›ã‚“。 次ã®ä¾‹ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

      ã“ã®ãƒˆãƒ”ックã®è©³ç´°ã¯ã€Brian Goetzã®14.2ã€"æ¡ä»¶å¾…ã¡è¡Œåˆ—ã€"ã€ãŠã‚ˆã³Joshua Bloch 「Effective Javaã€ç¬¬3版〠(Addison-Wesley, 2018)ã®Java Concurrency in Practice (Addison-Wesley, 2006)ã¾ãŸã¯Item 81ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

      ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã®å¾…機中ã¾ãŸã¯å¾…機å‰ã«ä»»æ„ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã‹ã‚‰å‰²ã‚Šè¾¼ã¿ãŒã‹ã‹ã£ãŸå ´åˆã€InterruptedExceptionãŒã‚¹ãƒ­ãƒ¼ã•れã¾ã™ã€‚ ã“ã®ä¾‹å¤–ãŒã‚¹ãƒ­ãƒ¼ã•れるã¨ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã®å‰²è¾¼ã¿ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã‚¯ãƒªã‚¢ã•れる。 ã“ã®ä¾‹å¤–ã¯ã€ã“ã®ã‚ªãƒ–ジェクトã®ãƒ­ãƒƒã‚¯ãƒ»ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãŒå‰è¿°ã®ã‚ˆã†ã«å¾©å…ƒã•れるã¾ã§ã¯ã‚¹ãƒ­ãƒ¼ã•れã¾ã›ã‚“。

      APIã®ãƒŽãƒ¼ãƒˆ:
      待機ã™ã‚‹ãŸã‚ã®æŽ¨å¥¨ã•れる方法ã¯ã€ä»¥ä¸‹ã®ä¾‹ã«ç¤ºã™ã‚ˆã†ã«ã€waitã¸ã®å‘¼ã³å‡ºã—ã®å‘¨ã‚Šã®whileループã§å¾…ã£ã¦ã„る状態をãƒã‚§ãƒƒã‚¯ã™ã‚‹ã“ã¨ã§ã™ã€‚ ã¨ã‚Šã‚ã‘ã€ã“ã®ã‚¢ãƒ—ローãƒã¯ã€å½ã®ã‚¦ã‚§ã‚¤ãƒ»ã‚¯ アップã«ã‚ˆã£ã¦å¼•ãèµ·ã“ã•れるå¯èƒ½æ€§ã®ã‚ã‚‹å•題を回é¿ã—ã¾ã™ã€‚
          synchronized (obj) {
              while ( <condition does not hold and timeout not exceeded> ) {
                  long timeoutMillis = ... ; // recompute timeout values
                  int nanos = ... ;
                  obj.wait(timeoutMillis, nanos);
              }
              ... // Perform action appropriate to condition or timeout
          }
      
      パラメータ:
      timeoutMillis - 待機ã™ã‚‹æœ€å¤§æ™‚é–“(ミリ秒å˜ä½)
      nanos - 追加時間(ナノ秒) (0ã‹ã‚‰999999 (包å«)ã®ç¯„囲)
      スロー:
      IllegalArgumentException - timeoutMillisãŒè² ã®å ´åˆã€ã¾ãŸã¯nanosã®å€¤ãŒç¯„囲外ã®å ´åˆ
      IllegalMonitorStateException - ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒã‚ªãƒ–ジェクトã®ãƒ¢ãƒ‹ã‚¿ãƒ¼ã‚’所有ã—ã¦ã„ãªã„å ´åˆ
      InterruptedException - ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒå¾…機ã—ã¦ã„ãŸå‰ã¾ãŸã¯ä¸­ã«ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã«å‰²ã‚Šè¾¼ã¿ãŒç™ºç”Ÿã—ãŸå ´åˆã€‚ ã“ã®ä¾‹å¤–ãŒã‚¹ãƒ­ãƒ¼ã•れるã¨ã€ç¾åœ¨ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã®å‰²è¾¼ã¿ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ã¯ã‚¯ãƒªã‚¢ã•れる。
      関連項目:
    • finalize

      @Deprecated(since="9", forRemoval=true) protected void finalize() throws Throwable
      削除予定ã®ãŸã‚éžæŽ¨å¥¨: ã“ã®APIè¦ç´ ã¯ã€å°†æ¥ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã§å‰Šé™¤ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚
      最終決定ã¯éžæŽ¨å¥¨ã§ã‚りã€å°†æ¥ã®ãƒªãƒªãƒ¼ã‚¹ã§å‰Šé™¤ã•れるå¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ ファイナライズを使用ã™ã‚‹ã¨ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ã€ãƒ‘フォーマンスãŠã‚ˆã³ä¿¡é ¼æ€§ã®å•題ãŒç™ºç”Ÿã™ã‚‹å¯èƒ½æ€§ãŒã‚りã¾ã™ã€‚ 詳細ãŠã‚ˆã³ä»£æ›¿æ‰‹æ®µã«ã¤ã„ã¦ã¯ã€JEP 421ã‚’å‚ç…§ã—ã¦ãã ã•ã„。

      クリーンアップを実行ã™ã‚‹ãŸã‚ã«finalizeをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã‚µãƒ–クラスã¯ã€ä»£æ›¿ã®ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—・メカニズムを使用ã—ã€finalizeメソッドを削除ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ オブジェクトã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªããªã£ãŸå ´åˆã«ãƒªã‚½ãƒ¼ã‚¹ã‚’解放ã™ã‚‹ã‚ˆã‚Šå®‰å…¨ãªæ–¹æ³•ã¨ã—ã¦ã€CleanerãŠã‚ˆã³PhantomReferenceを使用ã—ã¾ã™ã€‚ ã¾ãŸã¯ã€closeメソッドを追加ã—ã¦ãƒªã‚½ãƒ¼ã‚¹ã‚’明示的ã«è§£æ”¾ã—ã€AutoCloseableを実装ã—ã¦try-with-resourcesæ–‡ã®ä½¿ç”¨ã‚’有効ã«ã—ã¾ã™ã€‚

      ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ãƒ•ァイナライザãŒã»ã¨ã‚“ã©ã®æ—¢å­˜ã‚³ãƒ¼ãƒ‰ã‹ã‚‰å‰Šé™¤ã•れるã¾ã§æœ‰åйã§ã™ã€‚

      ã“ã®ã‚ªãƒ–ジェクトã¸ã®å‚ç…§ã¯ã‚‚ã†ãªã„ã¨ã‚¬ãƒ™ãƒ¼ã‚¸ãƒ»ã‚³ãƒ¬ã‚¯ã‚·ãƒ§ãƒ³ã«ã‚ˆã£ã¦åˆ¤æ–­ã•れãŸã¨ãã«ã€ã‚¬ãƒ™ãƒ¼ã‚¸ãƒ»ã‚³ãƒ¬ã‚¯ã‚¿ã«ã‚ˆã£ã¦å‘¼ã³å‡ºã•れã¾ã™ã€‚ サブクラスã¯finalizeメソッドをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¦ã€ã‚·ã‚¹ãƒ†ãƒ ãƒ»ãƒªã‚½ãƒ¼ã‚¹ã‚’破棄ã—ãŸã‚Šã€ãã®ä»–ã®ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—を行ã£ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚

      ファイナライズãŒç„¡åйã¾ãŸã¯å‰Šé™¤ã•れã¦ã„ã‚‹Java仮想マシンã§å®Ÿè¡Œã•れã¦ã„ã‚‹Whenã¯ã€ã‚¬ãƒ™ãƒ¼ã‚¸ãƒ»ã‚³ãƒ¬ã‚¯ã‚¿ãŒfinalize()をコールã™ã‚‹ã“ã¨ã¯ã‚りã¾ã›ã‚“。 ãƒ•ã‚¡ã‚¤ãƒŠãƒ©ã‚¤ã‚ºãŒæœ‰åйãªJava仮想マシンã§ã¯ã€ã‚¬ãƒ™ãƒ¼ã‚¸ãƒ»ã‚³ãƒ¬ã‚¯ã‚¿ãŒç„¡æœŸé™ã®delay.ã®å¾Œã«ã®ã¿finalizeをコールã™ã‚‹å ´åˆãŒã‚りã¾ã™

      finalizeã®ä¸€èˆ¬è¦ç´„ã§ã¯ã€ãƒ•ã‚¡ã‚¤ãƒŠãƒ©ã‚¤ã‚ºã®æº–å‚™ãŒã§ãã¦ã„ã‚‹ä»–ã®ã‚ªãƒ–ジェクトã¾ãŸã¯ã‚¯ãƒ©ã‚¹ã®ãƒ•ァイナライズã«ã‚ˆã£ã¦å®Ÿè¡Œã•れãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’除ãã€ã¾ã çµ‚了ã—ã¦ã„ãªã„スレッドãŒã“ã®ã‚ªãƒ–ジェクトã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„ã¨Java仮想マシンãŒåˆ¤æ–­ã—ãŸå ´åˆã«å‘¼ã³å‡ºã•れã¾ã™ã€‚ finalizeメソッドã¯ã€ã“ã®ã‚ªãƒ–ジェクトを別ã®ã‚¹ãƒ¬ãƒƒãƒ‰ã§ãµãŸãŸã³åˆ©ç”¨å¯èƒ½ã«ã™ã‚‹ã“ã¨ã‚‚å«ã‚ã¦ã€ä»»æ„ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’行ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ã—ã‹ã—ã€finalizeã®é€šå¸¸ã®ç”¨é€”ã¯ã€ã‚ªãƒ–ジェクトをå†ç”Ÿä¸å¯èƒ½ãªå½¢ã§ç ´æ£„ã™ã‚‹å‰ã®ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—を実行ã™ã‚‹ã“ã¨ã§ã™ã€‚ ãŸã¨ãˆã°ã€å…¥å‡ºåŠ›ã®æŽ¥ç¶šã‚’è¡¨ã™ã‚ªãƒ–ジェクトã®finalizeメソッドã¯ã€ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆãŒæ°¸ä¹…çš„ã«ç ´æ£„ã•れるå‰ã«ã€æŽ¥ç¶šã‚’切断ã™ã‚‹ãŸã‚ã®æ˜Žç¤ºçš„ãªå…¥å‡ºåЛ処ç†ã‚’行ã„ã¾ã™ã€‚

      Objectクラスã®finalizeメソッドã¯ã€ç‰¹åˆ¥ãªå‡¦ç†ã‚’行ã„ã¾ã›ã‚“。通常ã¯ã€ä½•ã‚‚ã—ãªã„ã§å¾©å¸°ã—ã¾ã™ã€‚ Objectã®ã‚µãƒ–クラスã¯ã€ã“ã®å®šç¾©ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚

      Javaプログラミング言語ã¯ã€ä»»æ„ã®ã‚ªãƒ–ジェクトã«ã¤ã„ã¦ã©ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒfinalizeメソッドを呼ã³å‡ºã™ã‹ã‚’ä¿è¨¼ã—ã¾ã›ã‚“。 ã—ã‹ã—ã€finalizeを呼ã³å‡ºã™ã‚¹ãƒ¬ãƒƒãƒ‰ãŒã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«å¯è¦–ãªåŒæœŸãƒ­ãƒƒã‚¯ã‚’finalize呼出ã—ã®æ™‚点ã§ã¯ä¿æŒã—ã¦ã„ãªã„ã“ã¨ã«ã¤ã„ã¦ã¯ä¿è¨¼ã•れã¾ã™ã€‚ キャッãƒã•れãªã„例外をfinalizeメソッドãŒã‚¹ãƒ­ãƒ¼ã—ãŸå ´åˆã€ä¾‹å¤–ã¯ç„¡è¦–ã•れã€ã‚ªãƒ–ジェクトã®ãƒ•ァイナライズã¯çµ‚了ã—ã¾ã™ã€‚

      ã‚るオブジェクトã«ã¤ã„ã¦finalizeメソッドãŒå‘¼ã³å‡ºã•れãŸã‚ã¨ã«æ¬¡ã®å‡¦ç†ãŒç™ºç”Ÿã™ã‚‹ã®ã¯ã€ã¾ã ç”Ÿå­˜ã—ã¦ã„ã‚‹ä»»æ„ã®ã‚¹ãƒ¬ãƒƒãƒ‰ãŒã“ã®ã‚ªãƒ–ジェクトã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãる方法ã¯ãªã„ã¨ã€Java Virtual MachineãŒãµãŸãŸã³åˆ¤æ–­ã—ãŸã¨ãã§ã™ã€‚ã“れã«ã¯ã€ãƒ•ã‚¡ã‚¤ãƒŠãƒ©ã‚¤ã‚ºã®æº–å‚™ãŒã§ãã¦ã„ã‚‹ã»ã‹ã®ã‚ªãƒ–ジェクトã¾ãŸã¯ã‚¯ãƒ©ã‚¹ã«ã‚ˆã£ã¦ç™ºç”Ÿã—ãŸå‡¦ç†ã‚‚å«ã¾ã‚Œã€ãã®æ™‚点ã§ã“ã®ã‚ªãƒ–ジェクトã¯ç ´æ£„ã•れã¾ã™ã€‚

      ä»»æ„ã®ã‚ªãƒ–ジェクトã«ã¤ã„ã¦Java Virtual MachineãŒfinalizeメソッドを複数回呼ã³å‡ºã™ã“ã¨ã¯ã‚りã¾ã›ã‚“。

      finalizeメソッドã«ã‚ˆã£ã¦ä¾‹å¤–ãŒã‚¹ãƒ­ãƒ¼ã•れるã¨ã€finalizeメソッドã®å‡¦ç†ã¯åœæ­¢ã•れã¾ã™ã€‚ãã†ã§ãªã„å ´åˆã¯ç„¡è¦–ã•れã¾ã™ã€‚

      APIã®ãƒŽãƒ¼ãƒˆ:
      ヒープ以外ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’埋ã‚込むクラスã«ã¯ã€ãれらã®ãƒªã‚½ãƒ¼ã‚¹ã‚’クリーンアップã™ã‚‹ãŸã‚ã®å¤šãã®ã‚ªãƒ—ションãŒã‚りã¾ã™ã€‚ クラスã¯ã€å„インスタンスã®å­˜ç¶šæœŸé–“ãŒã€ãã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒåŸ‹ã‚込むリソースã®å­˜ç¶šæœŸé–“よりも長ã„ã“ã¨ã‚’確èªã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ Reference.reachabilityFence(java.lang.Object)を使用ã™ã‚‹ã¨ã€ã‚ªãƒ–ジェクトã«åŸ‹ã‚è¾¼ã¾ã‚ŒãŸãƒªã‚½ãƒ¼ã‚¹ãŒä½¿ç”¨ã•れã¦ã„ã‚‹é–“ã«ã€ã‚ªãƒ–ジェクトãŒåˆ°é”å¯èƒ½ã§ã‚ã‚‹ã“ã¨ã‚’ä¿è¨¼ã§ãã¾ã™ã€‚

      サブクラスã¯ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒåŽé›†ã•れるå‰ã«ã‚¯ãƒªãƒ¼ãƒ³ã‚¢ãƒƒãƒ—ã™ã‚‹å¿…è¦ãŒã‚ã‚‹éžãƒ’ープ・リソースをサブクラスã«åŸ‹ã‚è¾¼ã¾ãªã„ã‹ãŽã‚Šã€finalizeメソッドã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã‚’回é¿ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ ファイナライザã®èµ·å‹•ã¯ã€ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã¨ã¯ç•°ãªã‚Šã€è‡ªå‹•çš„ã«é€£éŽ–ã•れるã“ã¨ã¯ã‚りã¾ã›ã‚“。 サブクラスãŒfinalizeをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹å ´åˆã€ã‚¹ãƒ¼ãƒ‘ークラス・ファイナライザを明示的ã«å‘¼ã³å‡ºã™å¿…è¦ãŒã‚りã¾ã™ã€‚ ファイナライズ・ãƒã‚§ãƒ¼ãƒ³ã‚’途中ã§çµ‚了ã™ã‚‹ä¾‹å¤–ã‹ã‚‰ä¿è­·ã™ã‚‹ã«ã¯ã€ã‚µãƒ–クラスã§try-finallyブロックを使用ã—ã¦ã€super.finalize()ãŒå¸¸ã«å‘¼ã³å‡ºã•れるよã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚ ãŸã¨ãˆã°ã€

          @Override
          protected void finalize() throws Throwable {
              try {
                  ... // cleanup subclass state
              } finally {
                  super.finalize();
              }
          }
      

      スロー:
      Throwable - ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ç”Ÿã˜ãŸException
      Java言語仕様をå‚ç…§ã—ã¦ãã ã•ã„:
      12.6 クラス・インスタンスã®ãƒ•ァイナライズ
      関連項目: