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}