gpt4 book ai didi

Java 初始化对象 - 静态访问与非静态访问

转载 作者:行者123 更新时间:2023-12-01 18:28:31 24 4
gpt4 key购买 nike

我已经有一段时间没有编写任何代码了,我决定练习一下。我在程序一开始就提出了这个问题,昨晚我试图找出或找到解决这个问题的方法,但没有得到任何预期的结果。

首先,让我们看一下类:

public class Task {
private static int priority;
private static int taskTime;
private static boolean solved;

public void setPriority(int p){this.priority = p;}
public void setTasktime(int t){this.taskTime = t;}
public void setSolved(boolean s){solved = s;}

public int getPriority(){return this.priority;}
public int getTaskTime(){return this.taskTime;}
public boolean getSolved(){return this.solved;}

public Task(int p, int t){
this.priority = p;
this.taskTime = t;
this.solved = false;
}

public static class ComparePriority implements Comparator<Task>{
@Override
public int compare(Task t1, Task t2){
return Integer.compare(t1.getPriority(), t2.getPriority());
}

}
}

现在,这是我尝试运行的代码:

public class main {

public static void main(String[] args) {
Task t1 = new Task(20,1);
Task t2 = new Task(13,2);
Task t3 = new Task(10,5);
ArrayList<Task> t = new ArrayList<Task>();
t.add(t2);
t.add(t3);
t.add(t1);
System.out.println("List size: " + t.size());
System.out.println("T1 object's priority: " + t1.getPriority());
System.out.println("T2 object's priority: " + t2.getPriority());
System.out.println("T3 object's priority: " + t3.getPriority());


for(int i=0;i<t.size();i++){
System.out.println("Current object task time: "+ t.get(i).getTaskTime());
System.out.println("Current index:" + i);
}

Collections.sort(t, new Task.ComparePriority());

for(int i=0;i<t.size();i++){
System.out.println("Current object task time (post sort): " + t.get(i).getTaskTime());
System.out.println("Current index: " + i);
}
}

我知道这些属性是以静态方式定义的,我应该以 Class.method(); 的形式访问它们

如果我要实例化 3 个对象(如上面的示例所示),是否有任何方法可以静态访问它们,但仍然使从对象读取的每条信息都是唯一的,而不是“相同”?

另外,为什么不鼓励以非静态方式访问它们?

最佳答案

您要求的事情是矛盾的。

access them statically

矛盾

still get every piece of information read from the object to be unique instead of "the same"

如果您希望前者,您应该期望所有实例都看到相同的值。

如果您希望后者,请不要将它们定义为静态。

至于非静态访问它们,据我所知这没有什么区别。我避免非静态访问静态成员(即通过取消引用该类的对象)的唯一原因是可读性。当您读取 object.member 时,您期望 member 是一个非静态成员。当您阅读ClassName.member时,您知道它是一个静态成员。

关于Java 初始化对象 - 静态访问与非静态访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25168396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com