User.java
public class User {
// ユーザーå(インスタンス変数)
private String name;
// å„ユーザーãŒä½•回メッセージをé€ã£ãŸã‹ï¼ˆã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹å¤‰æ•°ï¼‰
private int messageCount = 0;
// 全ユーザーã§å…±æœ‰ã•ã‚Œã‚‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ç·æ•°ï¼ˆstatic = クラス変数)
private static int totalMessageCount = 0;
// コンストラクタã§ãƒ¦ãƒ¼ã‚¶ãƒ¼åã‚’å—ã‘å–ã£ã¦åˆæœŸåŒ–
public User(String name) {
this.name = name;
}
// メッセージé€ä¿¡æ™‚ã®å‡¦ç†
public void sendMessage() {
messageCount++; // ã“ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹å°‚用ã®ã‚«ã‚¦ãƒ³ãƒˆã‚’1増やã™
totalMessageCount++; // クラス全体ã§å…±é€šã®ã‚«ã‚¦ãƒ³ãƒˆã‚‚1増やã™
// 出力(個別ã®é€ä¿¡å›žæ•°ã¨ã€å…¨ä½“ã®é€ä¿¡å›žæ•°ã‚’両方表示)
System.out.println(name + " ã®é€ä¿¡å›žæ•°: " + messageCount + "(全体: " + totalMessageCount + ")");
}
}
Main.java
public class Main {
public static void main(String[] args) {
User u1 = new User("Alice");
User u2 = new User("Bob");
u1.sendMessage(); // Alice: 1(全体: 1)
u2.sendMessage(); // Bob: 1(全体: 2)
u1.sendMessage(); // Alice: 2(全体: 3)
}
}
å®Ÿè¡Œçµæžœ
Alice ã®é€ä¿¡å›žæ•°: 1(全体: 1)
Bob ã®é€ä¿¡å›žæ•°: 1(全体: 2)
Alice ã®é€ä¿¡å›žæ•°: 2(全体: 3)
解説
ã“ã®å•題ã§ã¯ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹å¤‰æ•°ã¨ static(クラス)変数ã®é•ã„ã‚’å‡ºåŠ›ã§æ˜Žç¢ºã«ç†è§£ã—ã¾ã™ã€‚
インスタンス変数:messageCount
private int messageCount;
ã“れ㯠å„オブジェクトã”ã¨ã«ç‹¬ç«‹ã—ã¦å˜åœ¨ã™ã‚‹å€¤ã§ã™ã€‚new User("Alice") 㨠new User("Bob") ã§ã¯ã€ãれãžã‚Œã® messageCount ãŒåˆ¥ã€…ã«ç®¡ç†ã•れã¦ã„ã¾ã™ã€‚
static変数:totalMessageCount
private static int totalMessageCount;
ã“れ㯠クラス全体ã§1ã¤ã—ã‹ãªã„変数ã§ã™ã€‚u1.sendMessage() ã§ã‚‚ u2.sendMessage() ã§ã‚‚ã€å…±é€šã®å€¤ãŒæ›´æ–°ã•れã¾ã™ã€‚
å‡ºåŠ›çµæžœã§å·®ã‚’実感
Alice ã®é€ä¿¡å›žæ•°ã¯ã€Alice自身ã®ã‚«ã‚¦ãƒ³ãƒˆï¼ˆmessageCount)ã ã‘を見ã¦ã„る全体:ã®éƒ¨åˆ†ã¯ã€totalMessageCountãªã®ã§ ã™ã¹ã¦ã®é€ä¿¡ã®åˆè¨ˆãŒå‡ºã¦ãã‚‹
ã“ã®ã‚ˆã†ã«ã€ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹å¤‰æ•°ã¨static変数ãŒåŒã˜ã‚ˆã†ã«è¦‹ãˆã¦ã¾ã£ãŸãé•ã†å½¹å‰²ã‚’æŒã£ã¦ã„ã‚‹ã“ã¨ãŒã€å‡ºåŠ›ã‚’é€šã—ã¦ç›´æ„Ÿçš„ã«ç†è§£ã§ãã¾ã™ã€‚
ã¾ã¨ã‚
- インスタンス変数ã¯ã€Œãれãžã‚Œã®ã‚ªãƒ–ã‚¸ã‚§ã‚¯ãƒˆå°‚ç”¨ã®æƒ…å ±ã€
- static変数ã¯ã€Œã™ã¹ã¦ã®ã‚ªãƒ–ジェクトãŒå…±æœ‰ã™ã‚‹æƒ…å ±ã€
staticを使ã†ã‹ã©ã†ã‹ã¯ã€ã€Œãã®æƒ…å ±ã‚’å…±æœ‰ã—ãŸã„ã‹ã©ã†ã‹ã€ã§åˆ¤æ–ã™ã‚‹
104 ステップアップå•題 「static修羅é“ã€
Just Keep Typing, Baby!ã§ã¯ã€ã“ã®ã€Œstatic修羅é“ã€ã§ã¤ã¾ã¥ã„ãŸäººå‘ã‘ã®è§£èª¬ã‚’ã—ã¦ã„ã¾ã™ã€‚ã“ã¡ã‚‰ã‚‚ãœã²ï¼
// tesh:
// 自分ã«èžã„ã¦ã¿ã‚。「ã‚ã‹ã£ã¦ã‚‹ã€ã£ã¦è¨€ã„切れる?
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™



コメント