加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java:为什么我的变量不能传递给我的方法可用的构造函数?

发布时间:2020-12-15 04:11:33 所属栏目:Java 来源:网络整理
导读:所以我在main中声明了一些变量并创建了一个新对象;将变量作为参数传递给构造函数.现在,当我在类中调用一个方法时,我会认为这些变量可以被方法访问,而不必将它们作为参数传递给它.这不是这样吗? 这是代码: import java.util.Scanner;public class Step2_lab
所以我在main中声明了一些变量并创建了一个新对象;将变量作为参数传递给构造函数.现在,当我在类中调用一个方法时,我会认为这些变量可以被方法访问,而不必将它们作为参数传递给它.这不是这样吗?

这是代码:

import java.util.Scanner;

public class Step2_lab11 {

    public static void main(String[] args) {

        final int TAO = 50;
        final double DELTA_MINUTES = 0.1;

        System.out.println("VINETS AVKYLNINGSTID n");
        System.out.println("Ange vinets temperatur:");

        Scanner userIn = new Scanner(System.in);
        double wineTemp = userIn.nextDouble();

        System.out.println("Vinets ?nskade temperatur:");
        double preferredTemp = userIn.nextDouble();

        System.out.println("Kylens/frysens temperatur:");
        double chillTemp = userIn.nextDouble();

        WineChiller wineChiller = new WineChiller(wineTemp,preferredTemp,chillTemp);

    }

}

这是WineChiller.java类:

public class WineChiller {

    public WineChiller(double wineTemp,double preferredTemp,double chillTemp) {
        getChillingTime();

    }

    public void getChillingTime() {

        while(wineTemp>preferredTemp)
        {
            elapsedTime += DELTA_MINUTES;
            double dT = (wineTemp - chillTemp) * DELTA_MINUTES  / TAO;
            wineTemp -= dT;
        }
        System.out.println(Math.round(elapsedTime));

    }

}

为什么getChillingTime不能将wineTemp等解析为变量?

编辑添加:非常感谢指点家伙.但还有一个警告!说明似乎暗示WineChiller类应该只包含构造函数和方法getChillingTime,并且getChillingTime不应该带参数!作业文件中是否有拼写错误?

解决方法

虽然这可能在Scala或Ceylon等语言中可能实现(见下文),但在Java中,您必须明确地将构造函数参数分配给实例变量.从而:

public class WineChiller {

    double wineTemp;
    double preferredTemp;
    double chillTemp;

    public WineChiller(double wineTemp,double chillTemp) {
        this.wineTemp = wineTemp;
        this.preferredTemp = preferredTemp;
        this.chillTemp = chillTemp;

        getChillingTime();
    }

构造函数参数仅在构造函数的范围内可见.构造函数调用getChillingTime()这一事实无关紧要.如果希望它们在WineChiller实例的范围内可见,则必须在该类中创建成员.然后,该类的所有方法都可以访问实例成员.

无论如何,我强烈建议你仔细阅读Java教程.这是一个:

http://docs.oracle.com/javase/tutorial

其他JVM语言的构造函数

我认为你主要是在努力解决Java的冗长问题,你必须将构造函数参数显式复制到实例字段才能实现encapsulation.其他语言更优雅地解决了这个问题,其中构造函数可以与类本身一起隐式定义.但是,它们仍将转换为与上述Java代码等效的内容.例如:

斯卡拉:

class Greeter(message: String) {
    def SayHi() = println(message)
}

val greeter = new Greeter("Hello world!")
greeter.SayHi()

示例来自:http://joelabrahamsson.com/learning-scala-part-four-classes-and-constructors/

锡兰

class Point(Float x,Float y) { ... }
object origin extends Point(0.0,0.0) {}

示例来自:http://ceylon-lang.org/documentation/1.0/spec/html_single/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读