簡體   English   中英

具有靜態方法Java的類中的私有構造函數

[英]Private constructor in class with static methods java

我正在嘗試創建一個以標記的降序對數組列表進行排序的類。 由於我所有的方法都是靜態的,因此我想編寫一個構造函數來防止類實例化,但是不確定如何去實現它。 我讀到可以使用私有構造函數,但不確定如何對其進行編碼。

這是我的代碼:

import java.util.*;
import java.io.*;

public class ProcessDegreeMark{

public static ArrayList<Finalist> finalistsInList(String s) throws Exception{
    ArrayList<Finalist> finalists = new ArrayList<Finalist>();
    String id;
    double mark;
    Scanner in = null;
    try
    {
        in = new Scanner(new FileReader(s));
        try
        {
            while(in.hasNextLine())
            {
                id =in.nextLine();
                mark = Double.parseDouble(in.nextLine());
                finalists.add(new Finalist(id,mark));
            }
        }
        finally
        {
            in.close();
        }
    }
    catch(IOException e)
    {
        System.out.println(s+" not found");
    }
    return finalists;
 }


public static void displayFinalists(ArrayList<Finalist> finalists){
  for (int i = 0; i < finalists.size(); i++)
  {
       System.out.println(finalists.get(i));
  }
}


public static void findFinalistID(ArrayList<Finalist> a, String s){
    int count =0;
    for (int i=1;i<a.size();i++)
    {
        if (((a.get(i))).getId().equals(s))
        {
            System.out.println(a.get(i));
            count++;
        }
    }
    if(count==0)
    {
        System.out.println("No candidate found with ID number "+s);
    }
}

public static void findFinalistClass(ArrayList<Finalist> a, String s){
    int count =0;
    for (int i=1;i<a.size();i++)
    {
        if (((a.get(i))).getdegreeClass().equals(s))
        {
            System.out.println(a.get(i));
            count++;
        }
    }
    if(count==0)
    {
        System.out.println("No candidate found with degree class "+s);
    }
}

public static ArrayList<Finalist> sortDegreeMark(ArrayList<Finalist> a){
    ArrayList<Finalist> sortedFinalists = new ArrayList<Finalist>();
    sortedFinalists.addAll(a);
    Collections.sort(sortedFinalists, new FinalistComparator());
    return sortedFinalists;


}

public static void finalistsToFile2(ArrayList<Finalist> finalists, String s) {
    PrintStream out = null;
    try
    {
        out = new PrintStream(new FileOutputStream(s));
        try
        {
            for(int i = 0; i < finalists.size(); i++)
            {
                out.println(finalists.get(i));
            }
        }
        finally
        {
            out.close();
        }
    }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }

}

public static void findAndSaveFinalistClass(ArrayList<Finalist> a, String s){
    ArrayList<Finalist> searchFinalists = new ArrayList<Finalist>();
    int count =0;
    for (int i=1;i<a.size();i++)
    {
        if (((a.get(i))).getdegreeClass().equals(s))
        {
            System.out.println(a.get(i));
            searchFinalists.add(a.get(i));
            finalistsToFile2(searchFinalists,"testSorted.txt");
            count++;
        }
    }
    if(count==0)
    {
        System.out.println("No candidate found with degree class "+s);
    }
}

    public static void main(String[] args) throws Exception{
 System.out.println("/****************************************************/");
         System.out.println("/*******finalistsInList with invalid file name*******/");
         System.out.println();
         ArrayList<Finalist> testList = finalistsInList("file***.txt");
         System.out.println();
         System.out.println("/****************************************************/");
         System.out.println("/********finalistsInList with valid file name********/");
         System.out.println("/********display to check arraylist populated********/");
         System.out.println();
         ArrayList<Finalist> finalists = finalistsInList("finalMark.txt");
         displayFinalists(finalists);
         System.out.println();
         System.out.println("/****************************************************/");
         System.out.println("/*testing findFinalistID with valid and invalid data*/");
         System.out.println();
         findFinalistID(finalists, "75021");  
         findFinalistID(finalists, "21050");
         System.out.println();
         System.out.println("/****************************************************/");
         System.out.println("/*test findFinalistClass with valid and invalid data*/");
         System.out.println();
         findFinalistClass(finalists, "FIRST"); 
         findFinalistClass(finalists, "THIRD"); 
         System.out.println();
         System.out.println("/****************************************************/");
         System.out.println("/*****run sortedFinalists then test with display*****/");
         System.out.println();
         ArrayList<Finalist> sortedFinalists = sortDegreeMark(finalists);
         displayFinalists(sortedFinalists);
         System.out.println();
         System.out.println("/****************************************************/");
         System.out.println("/*****test finalistsToFile2 with sorted arraylist*****/");
         System.out.println("/**************check file testSorted.txt**************/");
         System.out.println();
         finalistsToFile2(sortedFinalists, "testSorted.txt"); //save the sorted arraylist to a new file, check by opening file
         System.out.println();
         System.out.println("/****************************************************/");
         System.out.println("/*test findAndSaveFinalistClass with valid and invalid data*/");
         System.out.println();
         findAndSaveFinalistClass(finalists, "FIRST"); //test method finds
         findAndSaveFinalistClass(finalists, "THRID"); //check appropriate error message when nothing found, open new text file
         System.out.println();
         System.out.println("/*********************THE END************************/");
     }
}

靜態方法屬於該類。 我真的不明白您為什么擔心有/沒有類實例化。 無論是創建一個實例還是多個實例,調用者都將擁有相同的靜態方法副本。話雖如此,您仍然可以通過添加如下所示的默認私有構造函數來限制類外的實例化

private ProcessDegreeMark(){}

只需在構造函數之前添加private修飾符即可。

public class ProcessDegreeMark{
    private ProcessDegreeMark(){}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM