Variables 定义方法和变量

Variables 定义方法和变量,variables,methods,static,Variables,Methods,Static,我是一个初学者,我试图理解什么是静态的,私有的,公共的。请看下面我写的例子。它是有效的,但我非常怀疑这是否是定义变量和方法的正确方法。提前谢谢 import java.util.Scanner; import java.util.Date; import java.text.ParseException; import java.text.SimpleDateFormat; public class Biorhytm { private static String nameOne; pri

我是一个初学者,我试图理解什么是静态的,私有的,公共的。请看下面我写的例子。它是有效的,但我非常怀疑这是否是定义变量和方法的正确方法。提前谢谢

import java.util.Scanner;
import java.util.Date; 
import java.text.ParseException;
import java.text.SimpleDateFormat;

public class Biorhytm {

private static String nameOne;
private static String nameTwo;
private static String dobOneIn;
private static String dobTwoIn;
private static Date dobOne;
private static Date dobTwo;
static int diff;

public static Date getDobOne() {
    return dobOne;
    }

public static void setDobOne(Date dobOne) {
    Biorhytm.dobOne = dobOne;
    }

public static Date getDobTwo() {
    return dobTwo;
    }

public static void setDobTwo(Date dobTwo) {
    Biorhytm.dobTwo = dobTwo;
    }

public static String getDobOneIn() {
    return dobOneIn;
    }

public static void setDobOneIn(String dobOneIn) {
    Biorhytm.dobOneIn = dobOneIn;
    }

public static String getDobTwoIn() {
    return dobTwoIn;
    }

public static void setDobTwoIn(String dobTwoIn) {
    Biorhytm.dobTwoIn = dobTwoIn;
    }

public static String getNameOne() {
    return nameOne;
    }

public static void setNameOne(String nameOne) {
    Biorhytm.nameOne = nameOne;
    }

public static String getNameTwo() {
    return nameTwo;
    }

public static void setNameTwo(String nameTwo) {
    Biorhytm.nameTwo = nameTwo;
    }

public static int diffCalc() {
    return diff = Math.abs((int)((getDobOne().getTime() - getDobTwo().getTime()) / (24 * 60 * 60 * 1000)));
}

public static void main(String[] args) {

        float physicalBio;
        float emotionalBio;
        float intellectualBio;
        boolean validEntry;

        Scanner input = new Scanner(System.in);

        SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy");
        SimpleDateFormat format2 = new SimpleDateFormat("EEEE, MMMM d, yyyy", java.util.Locale.US);

        System.out.println("Enter name of first person!");
        setNameOne(input.nextLine());

            if (getNameOne().equals("")) {
                setNameOne("first person");
            }

            System.out.println("Enter name of second person!");
            setNameTwo(input.nextLine());

            if (getNameTwo().equals("")) {
                setNameTwo("second person");
            }

         do {
                try {
                    System.out.println("Enter date of birth of " + getNameOne() + "! (MM/DD/YYYY)");
                    setDobOneIn(input.nextLine());
                    setDobOne(format.parse(getDobOneIn()));
                    validEntry = true;
                    }
                catch (ParseException e) {
                    validEntry = false;
                     }
            } while (!validEntry);

         do {
                try {
                    System.out.println("Enter date of birth of " + getNameTwo() + "! (MM/DD/YYYY)");
                    setDobTwoIn(input.nextLine());
                    setDobTwo(format.parse(getDobTwoIn()));
                    validEntry = true;
                    }
                catch (ParseException e) {
                    validEntry = false;
                     }
            } while (!validEntry);

        System.out.println();
        System.out.println("DOB of " + getNameOne() + ": " + format2.format(getDobOne()) + ".");
        System.out.println("DOB of " + getNameTwo() + ": " + format2.format(getDobTwo()) + ".");
        System.out.println("Difference between DOBs (days): " + diffCalc() + ".");

        physicalBio = diffCalc() % 23;
        emotionalBio = diffCalc() % 28;
        intellectualBio = diffCalc() % 33;

        physicalBio /= 23;
        emotionalBio /= 28;
        intellectualBio /= 33;

        if (physicalBio > 0.5) {
            physicalBio = 1 - physicalBio;
        }

        if (emotionalBio > 0.5) {
            emotionalBio = 1 - emotionalBio;
        }

        if (intellectualBio > 0.5) {
            intellectualBio = 1 - intellectualBio;
        }

        physicalBio = 100 - (physicalBio * 100);
        emotionalBio = 100 - (emotionalBio  * 100);
        intellectualBio = 100 - (intellectualBio * 100);

        System.out.println("Physical compatibility: " + java.lang.Math.round(physicalBio) + " %.");
        System.out.println("Emotional compatibility: " + java.lang.Math.round(emotionalBio) + " %.");
        System.out.println("Intellectual compatibility: " + java.lang.Math.round(intellectualBio) + " %.");

}

}

你更希望你的生物节律类能够代表一个人的数据。所以你要创建它的两个实例,称它们为一和二,比如说,并使它们成为非静态的。它将有实例变量,而不是静态变量,代表姓名和出生日期

类生物节律{ 私人约会日期; 私有字符串名称; 生物节律字符串名称、日期和日期{ this.name=名称; this.dob=dob; } 公共字符串getName{ 返回名称; } 公开日期{ 返回dob; } } 公共静态无效字符串[]args{ 日期onedob=/*省略实施*/
生物节律1=新的生物节律MaxVal,onedob; System.out.printlnone:name=+one.getName+date=+one.getDob; /*诸如此类*/ } 您实际上不需要setXXX方法,因为这些值在您的程序中可能不会改变


现在在main方法中创建这个类的两个实例。我暂时把计算方法的实现作为一个练习,因为根据您提出的面向对象的问题,实现它们会有一些不错的设计。

首先让我解释一下这些关键字是什么- private、default、protected.public是访问说明符。 正如这个词所说,公众可以在任何地方访问,所有成员都可以是公众的。 在继承的情况下,可以在包外部访问受保护的。 默认访问可以在包内进行,并且所有成员都可以是默认的。 私有作用域位于类中,无法继承。 记住这些可以用于变量、方法甚至类

当不需要使用对象调用方法或访问变量时,可以使用static。 静态成员不属于对象,并在加载类时初始化。 例如:

感谢信的可能副本。但是如何从main访问getName呢?我无法从静态方法访问非静态方法;System.out.printlnone name=+one.getName;我尝试了oneName=input.nextLine;oneDob=format.parsedobOneIn;在那之后是新的名字,oneDob;但是,我得到的局部变量oneDob可能尚未初始化。有什么问题?我是否应该声明Date oneDob=null;一开始?是的;这是Java编译器的一个怪癖。 class Converter{ public static long convert(long val){ return val; } class User{ long value=Converter.convert(500);//calling convert with class name}