User.java
public class User {
// ユーザーå(ã“れã¯ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã”ã¨ã«ç•°ãªã‚‹ã®ã§ã€éžstaticã§å®šç¾©ï¼‰
private String name;
// 全ユーザーã§å…±æœ‰ã™ã‚‹ãƒã‚°ã‚¤ãƒ³å›žæ•°ï¼ˆstaticを使ã£ã¦ã‚¯ãƒ©ã‚¹ã«å±žã•ã›ã‚‹ï¼‰
private static int loginCount = 0;
// コンストラクタã§ãƒ¦ãƒ¼ã‚¶ãƒ¼åã‚’è¨å®šã™ã‚‹
public User(String name) {
this.name = name;
}
// ユーザーãŒãƒã‚°ã‚¤ãƒ³ã—ãŸã¨ãã«å‘¼ã°ã‚Œã‚‹ãƒ¡ã‚½ãƒƒãƒ‰
public void login() {
// クラス全体ã§å…±æœ‰ã•れã¦ã„ã‚‹ loginCount ã‚’1ã¤å¢—ã‚„ã™
loginCount++;
// ユーザーåã¨ã€å…¨ä½“ã§ã®ç´¯è¨ˆãƒã‚°ã‚¤ãƒ³å›žæ•°ã‚’出力ã™ã‚‹
System.out.println(name + " ãŒãƒã‚°ã‚¤ãƒ³ã—ã¾ã—ãŸï¼ˆç´¯è¨ˆãƒã‚°ã‚¤ãƒ³å›žæ•°: " + loginCount + ")");
}
}
Main.java
public class Main {
public static void main(String[] args) {
// ユーザーを2人作æˆ
User u1 = new User("Alice");
User u2 = new User("Bob");
// å„ユーザーãŒãƒã‚°ã‚¤ãƒ³ã™ã‚‹
u1.login(); // 1回目ã®ãƒã‚°ã‚¤ãƒ³
u2.login(); // 2回目ã®ãƒã‚°ã‚¤ãƒ³
u1.login(); // 3回目ã®ãƒã‚°ã‚¤ãƒ³
}
}
å‡ºåŠ›çµæžœ
Alice ãŒãƒã‚°ã‚¤ãƒ³ã—ã¾ã—ãŸï¼ˆç´¯è¨ˆãƒã‚°ã‚¤ãƒ³å›žæ•°: 1)
Bob ãŒãƒã‚°ã‚¤ãƒ³ã—ã¾ã—ãŸï¼ˆç´¯è¨ˆãƒã‚°ã‚¤ãƒ³å›žæ•°: 2)
Alice ãŒãƒã‚°ã‚¤ãƒ³ã—ã¾ã—ãŸï¼ˆç´¯è¨ˆãƒã‚°ã‚¤ãƒ³å›žæ•°: 3)
解説
ã“ã®å•題ã§ã¯ã€static 変数ãŒã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«å±žã•ãšã€ã‚¯ãƒ©ã‚¹å…¨ä½“ã§å…±æœ‰ã•れるã¨ã„ã†æ€§è³ªã‚’体験ã—ã¾ã™ã€‚
🔸 staticã§ãªã„変数(name)
javaCopyEditprivate String name;
ã“れ㯠User ã®å„ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒæŒã¤ã€Œè‡ªåˆ†å°‚用ã®å€¤ã€ã§ã™ã€‚new ã™ã‚‹ãŸã³ã«åˆ¥ã€…ã® name ãŒä¿æŒã•れã¾ã™ã€‚
🔹 staticãªå¤‰æ•°ï¼ˆloginCount)
javaCopyEditprivate static int loginCount = 0;
ã“ã®å¤‰æ•°ã¯ クラス全体ã§1ã¤ã ã‘å˜åœ¨ã™ã‚‹å…±æœ‰ã®ã‚«ã‚¦ãƒ³ã‚¿ã§ã™ã€‚
複数ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒã“ã®å¤‰æ•°ã‚’使ã„回ã—ã¾ã™ã€‚ã©ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‹ã‚‰å‘¼ã³å‡ºã—ã¦ã‚‚値ã¯å…±é€šã§ã€æ›¸ãæ›ãˆãŸå†…容ãŒå…¨ä½“ã«åæ˜ ã•れã¾ã™ã€‚
ã¤ã¾ã‚Šï¼š
u1.login()㧠1 → 2u2.login()㧠2 → 3
ã¨ã‚«ã‚¦ãƒ³ãƒˆã‚¢ãƒƒãƒ—ã•れるã®ã¯ã€ã“ã® loginCount ãŒã‚¯ãƒ©ã‚¹ã«å±žã—ã¦ã„ã‚‹ã‹ã‚‰ã§ã™ã€‚
ãªãœ static を使ã†ã®ã‹ï¼Ÿ
ã“ã®ã‚±ãƒ¼ã‚¹ã§ã¯ã€Œãƒã‚°ã‚¤ãƒ³å›žæ•°ã‚’全体ã§ç®¡ç†ã—ãŸã„ã€ã¨ã„ã†æ„図ãŒã‚りã¾ã™ã€‚
インスタンス(個人)ã§ã¯ãªãã€å…¨ä½“ã§ã®çŠ¶æ…‹ã‚’ä¿æŒã™ã‚‹ãªã‚‰ã€static ãŒå¿…è¦ã§ã™ã€‚
逆ã«è¨€ãˆã°ã€ã€Œã“ã®æƒ…å ±ã¯å…¨ä½“ã§1ã¤ã ã‘ã§ã„ã„ã‹ï¼Ÿã€ã¨è€ƒãˆã‚‹ã¨ã€static を使ã†ã¹ãã‹ã©ã†ã‹ã®åˆ¤æ–ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚
ã¾ã¨ã‚
static変数㯠クラスã«1ã¤ã ã‘å˜åœ¨ã™ã‚‹- ã™ã¹ã¦ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã§ 共有ã•れる
- çŠ¶æ…‹ã‚„æƒ…å ±ã‚’ 全体ã§ä¿æŒã—ãŸã„ã¨ãã«ä½¿ã†
- 対ã—ã¦ã€å€‹åˆ¥ã«ä¿æŒã—ãŸã„æƒ…å ±ã¯ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹å¤‰æ•°ã¨ã—ã¦å®£è¨€ã™ã‚‹
104 ステップアップå•題 「static修羅é“ã€
Just Keep Typing, Baby!ã§ã¯ã€ã“ã®ã€Œstatic修羅é“ã€ã§ã¤ã¾ã¥ã„ãŸäººå‘ã‘ã®è§£èª¬ã‚’ã—ã¦ã„ã¾ã™ã€‚ã“ã¡ã‚‰ã‚‚ãœã²ï¼
// tesh:
// ã“ã“ã€ã‚¹ãƒ«ãƒ¼ã—ã¦ã‚‚通れる。ã§ã‚‚通ã˜ãªããªã‚‹ãžã€‚
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™



コメント