所以我对Java相当陌生,我查阅了很多关于静态方法和静态字段的信息,似乎没有什么能真正回答我的问题,所以我想在这里提问。我正在创建一个程序,它使用卡片对象的arrayList并对这些卡片对象执行方法。例如:
Card chooseNewCard() {
currentCardIndex = num;
return myCards.get(currentCardIndex);
}
myCards是数组的名称。列表我不确定是否允许两部分的问题,但我的问题是,像这样的方法应该是静态的,如果是静态的,那么应该在哪里创建类的对象呢?为了澄清最后一部分,在处理静态对象时,应该在实例变量附近创建对象,还是在主方法中或在另一个方法中创建对象?
提前谢谢,我对Java还是个新手,所以我可能会完全错误地思考这个问题。
因此,静态变量将在指定类的所有实例中更新。另一方面,静态方法允许您在不创建实例的情况下访问类中的函数,因此您无法访问任何非静态字段,因为它们只有在创建新实例时才会存在。下面我创建了一个简单的类来解释这个概念,看看下面的例子:
public class Employee
{
private static int idcount = 1;
private int id;
public Employee()
{
this.id = idcount;
idcount++; //cant use "this" with static variables
}
public int getId()
{
return this.id;
}
public static int getIdCount()
{
return idcount; //can only use static variables
}
public static void main (String [] args)
{
Employee employee1 = new Employee();
Employee employee2 = new Employee();
System.out.println(employee1.getId()); //will print 1
System.out.println(employee2.getId()); // will print 2
System.out.println(Employee.getIdCount()); // will print 3 and see how the static method is called straight on the Employee class and not a instance
}
}
因此,如果您运行上面的java类,您将看到静态变量将在Employee类的两个实例中得到更新。
因此,对于你的问题,你可以做的是有一个card类,其中有一个静态变量,保存创建的card实例,还有一个静态方法,例如获取特定的card
import java.util.ArrayList;
public class Card
{
private static ArrayList<Card> Cards = new ArrayList<Card>();
private int index; //field to store the index of the card in the array
private String name; //test field
public Card(String name)
{
this.name = name;
this.index = Cards.size();
//when you create a new card add it to the list
Cards.add(this);
}
public int getIndex()
{
return this.index;
}
public String getName()
{
return this.name;
}
public static Card getCard(int index)
{
return Cards.get(index);
}
public static void main(String [] args)
{
Card KingOfClubs = new Card("King Of Clubs");
Card KingOfHearts = new Card("King Of Hearts");
System.out.println(Card.getCard(KingOfClubs.getIndex()).getName()); // will print King of Clubs
System.out.println(Card.getCard(KingOfHearts.getIndex()).getName()); // will print King of Hearts
}
}
我不知道你实际上在做什么,所以我只是想向你解释静态变量和方法是如何工作的。希望这对你有所帮助。
参数是数组还是其他对象无关紧要。通常,在确定答案时不涉及对象状态(即实例字段)时,使用静态方法。查看java。lang.Math
课程中的例子。
由于您不能从静态方法访问实例字段,因此在执行涉及实例字段的计算时,您别无选择,只能使用实例方法。
静态方法也可以用于创建工厂方法。在这种情况下,普通构造函数是私有的,您有返回类的专用实例的静态方法。一个例子是javax.swing.BorderFactory
类。
这里没有足够的信息来确保回答您的问题。我没有num
的定义,数组上也没有get()
方法,只需将索引放在括号中:myCards[currentCardIndex]
。
静态方法可以合理地用于执行与程序中所有对象相关的操作(而不是与一个对象相关)。我不确定你所说的“静态对象”是什么意思,创建对象的正确位置完全取决于它们在你正在编写的程序中的使用。所以我认为你需要回到你想知道的问题上,重新措辞。我知道对于一个你一开始不确定的主题来说很难,但是我们只能猜测和假设你在做什么。
我正在使用存储库模式并尝试建立模型之间的关系。当我尝试运行存储()方法(在控制器中),该方法试图使用用户()方法(与方模型建立关系)时,我收到以下错误消息: 非静态方法不应该静态调用::user(),假设$this来自不兼容的上下文 我不明白为什么在尝试运行user()relationship方法时会出现此错误,但所有其他方法(包括$this- 以下是相关代码:
我有一个简单的模式,有一个索引方法从数据库中获取数据 模态:国家 现在我想从控制器调用这个函数: 控制器: 为此,我以这种方式创建了一个正面: 创建了一个提供者 在config/app.php中注册了提供程序 创建了门面 在config/app.php中注册别名 第1步-提供商: php artisan make:提供者NationServiceProvider 第2步:在config/app.p
我有一个带有下面代码的php文件,我收到错误: 严格标准:非静态方法LinkCore::GetImageLink()不应静态调用,假设$this来自....中的不兼容上下文。 但如果我改变这行: 我得到了 分析错误:语法错误,在/xxx/xxx/publ_html/modules/supplierreports/htmlTemplateCustompdf.php第44行中出现意外的“->”(T_O
问题内容: 假设我有一个要实例化的类。我在类中有几个私有的“帮助器”方法,它们不需要访问任何类成员,而仅对它们的参数进行操作,并返回结果。 有没有指定任何特别的原因,并为静态方法-或任何特别的理由不? 将它们设置为非静态无疑是最容易的,即使它们可以肯定是静态的而不会引起任何问题。 问题答案: 我更喜欢这样的帮助方法; 这将使读者清楚地知道他们不会修改对象的状态。我的IDE还将以斜体显示对静态方
问题内容: 我来自Java背景,是python的新手。我有几个脚本,它们共享一些与读取和写入文件有关的应用程序特有的辅助功能。有些功能与阅读有关,有些与写作有关。在寻找正确的方法时,我看到了这一点:Python中的静态方法? 他在回答中提到: 最后,请谨慎使用staticmethod!在极少数情况下,Python中需要使用静态方法,而我已经看到它们使用了很多次,而使用单独的“顶层”函数会更加清楚。
我来自Java背景,对python不熟悉。我有几个脚本,它们共享与读取和写入文件相关的应用程序独有的一些帮助函数。一些功能与阅读相关,一些与写作相关。在搜索正确的方法时,我看到了这个:Python中的静态方法? 他在回答中提到: 最后,谨慎使用staticmethod!Python中很少需要静态方法,我也见过很多次使用静态方法时,单独的“顶级”函数会更加清晰。 我不太理解顶级函数,我不确定给出这个