我想知道什么时候使用静态方法?假设我有一个类,有几个getter和setter,一个或两个方法,我希望这些方法只能在类的实例对象上调用。这是否意味着我应该使用静态方法?
例子:
Obj x = new Obj();
x.someMethod();
或:
Obj.someMethod(); // Is this the static way?
我很困惑!
我想知道什么时候使用静态方法?假设我有一个类,有几个getter和setter,一个或两个方法,我希望这些方法只能在类的实例对象上调用。这是否意味着我应该使用静态方法?
例子:
Obj x = new Obj();
x.someMethod();
或:
Obj.someMethod(); // Is this the static way?
我很困惑!
当前回答
静态方法应该在类上调用,实例方法应该在类的实例上调用。但这在现实中意味着什么呢?下面是一个有用的例子:
car类可能有一个名为Accelerate()的实例方法。你只能加速一个汽车,如果汽车确实存在(已经构造),因此这将是一个实例方法。
car类也可能有一个名为GetCarCount()的计数方法。这将返回创建(或构造)的汽车总数。如果没有构造汽车,这个方法将返回0,但它仍然可以被调用,因此它必须是一个静态方法。
其他回答
我想知道什么时候使用静态方法?
静态方法的一个常见用途是访问静态字段。 但是你可以有静态方法,而不需要引用静态变量。不引用静态变量的Helper方法可以在一些java类中找到,如java.lang. math 公共静态int min(int a, int b) { 返回(a <= b) ?A: b; } 另一个用例,我认为这些方法与同步方法相结合是在多线程环境中实现类级锁定。
假设我有一个类,有几个getter和setter,一个或两个方法,我希望这些方法只能在类的实例对象上调用。这是否意味着我应该使用静态方法?
如果你需要访问类的实例对象上的方法,你的方法应该是非静态的。
Oracle文档页提供了更多详细信息。
不是所有的实例和类变量和方法的组合都被允许:
实例方法可以直接访问实例变量和实例方法。 实例方法可以直接访问类变量和类方法。 类方法可以直接访问类变量和类方法。 类方法不能直接访问实例变量或实例方法——它们必须使用对象引用。而且,类方法不能使用this关键字,因为没有this的实例可以引用。
如果将静态关键字应用于任何方法,则称为静态方法。
静态方法属于类,而不是类的对象。 不需要创建类实例而调用的静态方法。 方法可以访问静态数据成员,并可以更改它的值。 静态方法可以通过类名。静态名来访问。示例:Student9.change(); 如果要使用类的非静态字段,则必须使用非静态方法。
//改变所有对象的公共属性的程序(静态字段)。
class Student9{
int rollno;
String name;
static String college = "ITS";
static void change(){
college = "BBDIT";
}
Student9(int r, String n){
rollno = r;
name = n;
}
void display (){System.out.println(rollno+" "+name+" "+college);}
public static void main(String args[]){
Student9.change();
Student9 s1 = new Student9 (111,"Indian");
Student9 s2 = new Student9 (222,"American");
Student9 s3 = new Student9 (333,"China");
s1.display();
s2.display();
s3.display();
} }
O/P: 111印度BBDIT 222美国BBDIT 333中国BBDIT
静态方法和变量是Java中“全局”函数和变量的受控版本。其中方法可以作为classname.methodName()或classInstanceName.methodName()访问,即静态方法和变量可以使用类名以及类的实例访问。
类不能被声明为静态的(因为它没有意义。如果一个类被声明为public,它可以从任何地方访问),内部类可以被声明为static。
静态的: Obj.someMethod
当你想要提供对方法的类级访问时,使用static,即在没有类实例的情况下,方法应该是可调用的。
当您不想在代码中创建对象来调用方法时,只需将该方法声明为静态方法。因为静态方法不需要调用实例,但这里的问题是,并不是所有的静态方法都由JVM自动调用。此特权仅由main()节点享有。“public static void main[字符串…]方法,因为在运行时,这是方法Signature public“static”void main[], JVM寻求作为开始执行代码的入口点。
例子:
public class Demo
{
public static void main(String... args)
{
Demo d = new Demo();
System.out.println("This static method is executed by JVM");
//Now to call the static method Displ() you can use the below methods:
Displ(); //By method name itself
Demo.Displ(); //By using class name//Recommended
d.Displ(); //By using instance //Not recommended
}
public static void Displ()
{
System.out.println("This static method needs to be called explicitly");
}
}
输出: 这个静态方法由JVM执行 这个静态方法需要显式调用 这个静态方法需要显式调用 这个静态方法需要显式调用