只需要快速帮助。
我试图在面向对象的编程中使用Java的内置日期类。我的问题是我在课堂的数据部分放了什么?
目前,我有这个:
private double balance;
private String name;
private java.util.Date creationDate; (Wrong I know, but you get what I am tring to do here.)
private boolean frozen;
private double limit;
private double MAXLIMIT;
private int accountNumber;
private static int howMany;
如何正确命名creationDate?
最后,我的最后一个问题是可以在类中抛出异常而不是主要的吗?我教授在课堂上展示的所有例子都是主要的或者是司机。我很奇怪是否有可能在我的课堂上这样做,如果我可以和主要相同,即使用try然后捕捉等。
感谢您的帮助。
答案 0 :(得分:1)
从评论中听起来你的问题是:“我如何让我的对象记录知道实例化时的日期时间,施工期间的当前时刻?”。
你有一半的解决方案:在类上为每个实例定义一个成员变量来记录当前时刻。
不幸的是,您使用的Java.util.Date类在Java 8中已经过时了。该类和相关的java.util.Calendar令人困惑且麻烦。而是使用新的java.time类。为了您的目的,java.time.Instant是最佳选择,可以在UTC时区的时间轴上捕捉片刻。
其次,你的类需要一个构造函数。只要某些代码为您的类调用new
,就会自动调用此方法。在那个构造函数中,我们捕获当前时刻。
这是一个示例类。我们有两个成员变量。构造函数对传递的帐号执行几项检查,如果这些检查失败,则会抛出异常(正如您在问题中提到的那样)。
在学习Java时尝试忽略main
方法。这种方法很时髦,令人困惑。想想它只是解决启动应用程序的鸡与蛋问题所需的必要之恶。
package com.example.javatimestuffmaven;
import java.time.Instant;
public class Account {
String accountNumber;
Instant whenInstantiated;
public Account ( String accountNumber ) {
if ( accountNumber == null ) {
throw new IllegalArgumentException ( "Null value passed as account number." );
}
if ( accountNumber.length () != 8 ) {
throw new IllegalArgumentException ( "Value passed as account number is not 8 characters in length: " + accountNumber );
}
this.accountNumber = accountNumber;
this.whenInstantiated = Instant.now (); // Grab the current date-time in UTC time zone.
}
@Override
public String toString () {
return "Account{ " + "accountNumber=" + accountNumber + " | whenInstantiated=" + whenInstantiated + " }";
}
public static void main ( String[] args ) {
// Try to ignore the 'main' method.
Account account = new Account ( "X4092253" );
System.out.println ( "account: " + account );
}
}
跑步时。
帐户:帐户{accountNumber = X4092253 | whenInstantiated = 2015-11-29T02:12:10.683Z}