我想删除在其他类中创建的我的类的先前对象,并在其后创建一个新对象。
以下是我的代码的一部分:
//DataBase
DataBase data_base;
Document financial_document;
/**
* Creates new form FinancialDocumentsJFrame
*/
public FinancialDocumentsJFrame() {
frameWidth = this.getWidth();
frameHeight = this.getHeight();
panelWidth = frameWidth;
panelHeight = frameHeight;
data_base = new DataBase();
code_table_hashmap = data_base.code_table;
activity_table_hashmap = data_base.activity_table;
client_table_hashmap = data_base.client_table;
employee_table_hashmap = data_base.employee_table;
initComponents();
// Sets size of the frame.
if(false) // Full screen mode
{
// Disables decorations for this frame.
//this.setUndecorated(true);
// Puts the frame to full screen.
this.setExtendedState(this.MAXIMIZED_BOTH);
}
else // Window mode
{
// Size of the frame.
this.setSize(1100, 800);
// Puts frame to center of the screen.
this.setLocationRelativeTo(null);
// So that frame cannot be resizable by the user.
this.setResizable(false);
}
}
我在课前声明了对象,并在我班级的一个方法中创建了一个新对象。
现在我需要在另一个方法中删除此对象并创建一个新对象。
以下是我的代码:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
if (bill_documentType==1){
fd_document_type = true;
}
else if (bill_documentType==0){
fd_document_type = false;
}
else {
System.out.println("Error in Document Type!!!!!!!!!");
}
if (bill_documentStatus==1){
fd_document_status = true;
}
else if (bill_documentStatus==0){
fd_document_status = false;
}
else {
System.out.println("Error in Document Status!!!!!!!!!");
}
if (jTextField1.getText().equals("") || jTextField2.getText().equals("") || jTextField3.getText().equals("")|| jTextField4.getText().equals("")|| jTextField5.getText().equals("")|| bill_documentStatus==-1){
JOptionPane.showConfirmDialog(null, "لطفا همه فيلد ها را پر كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else if (jTextField1.getText().length()!=7 || jTextField2.getText().length()!=10 || jTextField3.getText().length()>10 || jTextField5.getText().length()>10) {
JOptionPane.showConfirmDialog(null, "ورودي نامعتبر است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else if (!checkDocumentNumberText(jTextField1.getText())){
JOptionPane.showConfirmDialog(null, "ورودي شماره سند نامعتبر است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else if (!checkDocumentDateText(jTextField2.getText())){
JOptionPane.showConfirmDialog(null, "ورودي تارخ سند نامعتبر است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else if (!checkDocumentClientNumberText(jTextField3.getText())){
JOptionPane.showConfirmDialog(null, "ورودي شماره مشتري نامعتبر است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else if (!checkDocumentAmountText(jTextField4.getText())){
JOptionPane.showConfirmDialog(null, "ورودي مبلغ نامعتبر است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else if (!checkDocumentEmployeeNumberText(jTextField5.getText())) {
JOptionPane.showConfirmDialog(null, "ورودي شماره پرسنلي نامعتبر است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else if (!checkDocumentEmployeeNumberExistence(Integer.parseUnsignedInt(jTextField5.getText())) || !checkDocumentClientNumberExistence(Integer.parseUnsignedInt(jTextField3.getText()))){
JOptionPane.showConfirmDialog(null, "ورودي شماره مشتري يا شماره پرسنلي ناموجود است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else if (jComboBox2.getSelectedIndex()==-1){
JOptionPane.showConfirmDialog(null, "كد معين انتخاب نشده است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else if (jComboBox1.getSelectedIndex()==-1 && jTextField6.getText().equals("") ){
JOptionPane.showConfirmDialog(null, "شرح انتخاب نشده است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else {
boolean exists = data_base.selectQueryCheckDocument("Select * From document;",Integer.parseUnsignedInt(jTextField1.getText()), fd_document_type, fd_document_status, jTextField2.getText(), Integer.parseUnsignedInt(jTextField3.getText()));
if (exists) {
JOptionPane.showConfirmDialog(null, "ورودي موجود است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else {
jButton2.setEnabled(true);
jButton3.setEnabled(true);
jTextField1.setEnabled(false);
jTextField2.setEnabled(false);
jTextField3.setEnabled(false);
jButton1.setEnabled(false);
fd_document_number = Integer.parseUnsignedInt(jTextField1.getText());
fd_document_date = jTextField2.getText();
fd_document_statement = jComboBox1.getSelectedItem().toString();
fd_document_code_number = getCodeNumber(jComboBox2.getSelectedItem().toString());
fd_document_employee_number = Integer.parseUnsignedInt(jTextField5.getText());
fd_document_client_number = Integer.parseUnsignedInt(jTextField3.getText());
document_amount = Integer.parseUnsignedInt(jTextField4.getText());
***here is the object creation: financial_document = new Document(fd_document_number, fd_document_type, fd_document_status, fd_document_date, fd_document_statement, fd_document_code_number, fd_document_employee_number, fd_document_client_number, document_amount);
financial_document.printDocumentInformation();
}
}
}
现在我需要删除对象并创建新对象的下一个方法:
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
*** deleting: financial_document = null;
if (bill_documentType==1){
fd_document_type = true;
}
else if (bill_documentType==0){
fd_document_type = false;
}
else {
System.out.println("Error in Document Type!!!!!!!!!");
}
if (bill_documentStatus==1){
fd_document_status = true;
}
else if (bill_documentStatus==0){
fd_document_status = false;
}
else {
System.out.println("Error in Document Status!!!!!!!!!");
}
if (jTextField4.getText().equals("")|| jTextField5.getText().equals("")|| bill_documentStatus==-1){
JOptionPane.showConfirmDialog(null, "لطفا همه فيلد ها را پر كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else if (!checkDocumentAmountText(jTextField4.getText())){
JOptionPane.showConfirmDialog(null, "ورودي مبلغ نامعتبر است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else if (!checkDocumentEmployeeNumberText(jTextField5.getText())) {
JOptionPane.showConfirmDialog(null, "ورودي شماره پرسنلي نامعتبر است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else if (!checkDocumentEmployeeNumberExistence(Integer.parseUnsignedInt(jTextField5.getText())) || !checkDocumentClientNumberExistence(Integer.parseUnsignedInt(jTextField3.getText()))){
JOptionPane.showConfirmDialog(null, "ورودي شماره مشتري يا شماره پرسنلي ناموجود است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else if (jComboBox2.getSelectedIndex()==-1){
JOptionPane.showConfirmDialog(null, "كد معين انتخاب نشده است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else if (jComboBox1.getSelectedIndex()==-1 && jTextField6.getText().equals("") ){
JOptionPane.showConfirmDialog(null, "شرح انتخاب نشده است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else {
boolean exists = data_base.selectQueryCheckDocument("Select * From document;",Integer.parseUnsignedInt(jTextField1.getText()), fd_document_type, fd_document_status, jTextField2.getText(), Integer.parseUnsignedInt(jTextField3.getText()));
if (exists) {
JOptionPane.showConfirmDialog(null, "ورودي موجود است لطفا دوباره بررسي كنيد", "Message", JOptionPane.PLAIN_MESSAGE);
}
else {
fd_document_number = Integer.parseUnsignedInt(jTextField1.getText());
fd_document_date = jTextField2.getText();
fd_document_statement = jComboBox1.getSelectedItem().toString();
fd_document_code_number = getCodeNumber(jComboBox2.getSelectedItem().toString());
fd_document_employee_number = Integer.parseUnsignedInt(jTextField5.getText());
fd_document_client_number = Integer.parseUnsignedInt(jTextField3.getText());
document_amount = Integer.parseUnsignedInt(jTextField4.getText());
***New object creation: financial_document = new Document(fd_document_number, fd_document_type, fd_document_status, fd_document_date, fd_document_statement, fd_document_code_number, fd_document_employee_number, fd_document_client_number, document_amount);
financial_document.printDocumentInformation();
}
}
}
我想知道 financial_document = null; 是否有效,代码将正常运行。
答案 0 :(得分:0)
如果你设置financial_document = null
,如果你的应用程序中没有其他引用,它将在下一次“垃圾收集”期间从内存中删除。直到下一次垃圾收集,它基本上被删除了,但理论上你仍然可以通过转储应用程序运行的机器的内存来访问它。您可以通过创建字段private
而不是默认访问说明符来帮助防止对其进行其他引用。
答案 1 :(得分:0)
问题不在于创建/删除对象,而是在问自己:“谁知道这个对象?”。
如果你这样做......
MyClass x = new MyClass();
...然后你创建一个类型为“MyClass”的新对象,并在变量x中存储对它的引用。因此,无论定义什么x,它都“知道”你新创建的MyClass对象。如果你现在......
x = null;
...然后对“旧”MyClass对象的引用将被“遗忘”/用null
覆盖。如果你没有在其他地方传递x,那么没有其他对象会“知道”x因此x被有效地“丢失”并且将被垃圾收集器从内存中完全删除。
同样的事情是你覆盖x:
x = new MyClass();
同样,您之前存储在“x”中的旧对象将被“遗忘”。
由于您的代码在您的课程之外声明 financial_document
,因此您的代码无法正常工作,因此很难猜测它是否有效,但如果您使用新文档替换旧文档的引用,则理论上,这应该有效地从记忆中“删除”你的旧物体,是的。
编辑:当您删除对financial_document的引用时,它应该有效地从内存中“删除”您的旧对象,是的,除非您当然已经将其传递到外部。