为了账号安全,请及时绑定邮箱和手机立即绑定

对象的变量——Java

对象的变量——Java

慕哥9229398 2023-03-31 15:27:43
我有两个班级,Main.java并且Car.javaMain.java:class Main{    public static void main(String[] args)    {        Car ferrari = new Car(18, 25.43);        System.out.println(ferrari.efficiency);    }}Car.java:class Car{    public Car(double mpg, double initFuel)    {        double efficiency = mpg;        double fuel = initFuel;    }}我显然试图将效率分配给创建对象时传入的第一个构造函数,但这似乎不起作用(即当我在 Main.java 中使用时找不到变量println)。如何将变量分配给稍后引用的对象?
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

您在 的构造函数中使用局部变量Car。它们的生命周期限制在您的构造函数内。只需在您的班级中声明您的成员并使用 getter 和 setter 来访问它们。


class Car

{

    private double efficiency;

    private double fuel;


    public Car(double mpg, double initFuel)

    {

        this.efficiency = mpg;

        this.fuel = initFuel;

    }


    public void setEfficiency(double efficiency) {

        this.efficiency = efficiency;

    }


    public double getEfficiency() {

        return efficiency;

    }


    // Same thing for fuel...

}

在你的Main:


class Main

{

    public static void main(String[] args)

    {

        Car ferrari = new Car(18, 25.43);

        System.out.println(ferrari.getEfficiency());

    }

}


查看完整回答
反对 回复 2023-03-31
?
ibeautiful

TA贡献1993条经验 获得超5个赞

使效率和燃料在你的类中全局化,而不是在你的构造函数中局部化。 Main.java


public class Main

{

    public static void main(String[] args)

    {

        Car ferrari = new Car(18, 25.43);

        System.out.println(ferrari.efficiency);

    }

}

Car.java


public class Car

{

    public double efficiency;

    public double fuel;

    public Car(double mpg, double initFuel)

    {

        efficiency = mpg;

        fuel = initFuel;

    }

}

那应该有效。但是您可以将实例变量设为私有而不是公共,并使用 setters/getters 还将您的 Main 和 Car 设置为公共,以便可以从另一个类访问/实例化它们。 Main.java


public class Main

{

    public static void main(String[] args)

    {

        Car ferrari = new Car(18, 25.43);

        System.out.println(ferrari.getEfficiency());

    }

}

Car.java


public class Car

{

    private double efficiency;

    private double fuel;

    public Car(double mpg, double initFuel)

    {

        efficiency = mpg;

        fuel = initFuel;

    }

    public double getEfficiency(){

        return efficiency;

    }

}


查看完整回答
反对 回复 2023-03-31
?
UYOU

TA贡献1878条经验 获得超4个赞

将您的Car课程更改为:


class Car

    private double efficiency;

    private double fuel;


    public Car(double mpg, double initFuel)

    {

        this.efficiency = mpg;

        this.fuel = initFuel;

    }

}

当为实例化的对象使用变量时,您需要在Class范围而不是本地范围内声明变量。这些变量通常是从构造函数中设置的,因此以后可以从对象本身访问它们。


大多数时候,它们也被声明为private使用单独的方法来get访问set它们,而不是直接访问它们。


例子:


public double getEfficiency(){

    return this.efficiency;    

}

public void setEfficiency(double mpg){

    this.efficiency = mpg;

}

大多数 IDE 可以为您自动生成 Getters 和 Setters,因此您无需为每个变量手动编写它们。


要使用 getter/setter,您可以从类的实例调用方法,而不是直接使用变量:


Car tesla = new Car(35.5, 90.5);


tesla.efficiency = 15.5; //YOU CAN'T DO THIS

tesla.setEfficiency(15.5); //Do this instead


System.out.println(tesla.getEfficiency()); //Will print 15.5


查看完整回答
反对 回复 2023-03-31
  • 3 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信