teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

ソースの追記

2017/07/06 04:15

投稿

mr-hisa-child
mr-hisa-child

スコア294

answer CHANGED
@@ -1,13 +1,36 @@
1
1
  ```java
2
+ <User.class>
3
+ public class User {
4
+ public static List<User> instances = new ArrayList<>();
2
5
 
6
+ private String name;
7
+
3
- public class T {
8
+ public User(String name){
4
- private static List<T> instances = new ArrayList<>();
5
- public T(){
9
+ this.name = name;
6
10
  instances.add(this);
7
11
  }
12
+
13
+ public String getName(){
14
+ return name;
15
+ }
8
16
  }
9
17
 
18
+ <Main.class>
19
+ public class Main{
20
+ public static void main(String[] args){
21
+ User u1 = new User("太郎");
22
+ User u2 = new User("花子");
23
+
24
+ u1 = null; // インスタンス解放
25
+ u2 = null; // インスタンス解放
26
+
27
+ User.instances.forEach((u) -> {
28
+ System.out.println(u.getName()); // 名前が出力される
29
+ });
30
+ }
31
+ }
32
+
10
33
  ```
11
- ```instances```に格納されているTクラスのインスタンスは、明示的に```instances```から削除してあげないと、Tクラスのインスタンスは残り続けますよという意味かな?
34
+ ```instances```に格納されているUserクラスのインスタンスは、明示的に```instances```から削除してあげないと、Tクラスのインスタンスは残り続けますよという意味かな?
12
35
 
13
36
  通常、使われなくなったインスタンスはGCで解放されます。

1

コードの修正

2017/07/06 04:15

投稿

mr-hisa-child
mr-hisa-child

スコア294

answer CHANGED
@@ -1,9 +1,8 @@
1
1
  ```java
2
2
 
3
3
  public class T {
4
- private static List<T> instances;
4
+ private static List<T> instances = new ArrayList<>();
5
5
  public T(){
6
- instances = new ArrayList<>();
7
6
  instances.add(this);
8
7
  }
9
8
  }