簡體   English   中英

Java靜態方法+類

[英]Java static methods + classes

首先,我想說我是Java的新手,來自C ++背景。 我永遠無法與老師取得聯系,所以我想在這里發布我一直想知道的問題(希望我能正確說出):

如何在不使用static情況下創建方法? 我知道我可能需要為此上課,但是我該怎么做呢? 只是一個沒有變量而只有函數的類? 除了以.java文件命名的類之外,我是否要制作第二個包含main的類? 例如:

package musiclibrary;
import java.util.Scanner;

/**
 * This class implements a user to create a playlist from a selection of artists and songs
 * @author ahb5190
 */
public class MusicLibrary {
static String divider = "*****************************************************";
//Scanner class
static Scanner input = new Scanner(System.in);

/**
 * Welcome menu
 */
public static void welcomeMenu()
{
    System.out.println(divider);
    System.out.println();
    System.out.println("Welcome to Art's personal music library!");
    System.out.println();
    System.out.println("Choose an option:");
    System.out.println("1) Create Playlist");
    System.out.println("2) Delete Playlist");
    System.out.println("3) Add Selection to Playlist");
    System.out.println("4) Remove Selection from Playlist");
    System.out.println("5) Quit");
    System.out.println();
    System.out.print("Your choice?: ");
}

/**
 * 
 * @param min error check low bound
 * @param max error check high bound
 * @return 
 */
public static int getData(int min, int max)
{
   boolean goodInput = false;
    int choice = 1; //Will be overwritten
    while(!goodInput)
    {    
        choice = input.nextInt();
        if(choice < min || choice > max)
        {
            System.out.print(choice + " is not a valid choice. Please enter a number between " + min + " and " + max + ": ");
            goodInput = false;
        }
        else
        {
            goodInput = true;
        }
    }

    return choice;
}

/**
 * @param args the command line arguments
 */
public static void main(String[] args)
{
    //Variables
    int getDataMin = 1;
    int getDataMax = 5;
    boolean quit = false;
    int userInput;

    do {
        welcomeMenu();
        userInput = getData(getDataMin, getDataMax);
        if (userInput == 1)
        {
            quit = false;
        }
        else  if (userInput == 2)
        {
            quit = false;
        }
        else  if (userInput == 3)
        {
            quit = false;
        }
        else if (userInput == 4)
        {
            quit = false;
        }
        else  if (userInput == 5)
        {
            quit = true;
        }
    } while(!quit);

}

}

是分配的Java程序的開始。 如果我從public static void welcomeMenu()刪除了static public static void welcomeMenu() ,則當我嘗試調用welcomeMenu();它給了我non-static method welcomeMenu() cannot be referenced from a static context welcomeMenu(); 在主要。

另一個代碼塊(不是很整齊,是定時考試的一部分):

package lalala;

/**
 *
 * @author ahb5190
 */
public class Lalala {


    public class Movie
    {
        private String title;
        private String genre;
        private String director;
        private String star;

        public Movie (String t, String g, String d, String s)
        {
            title = t;
            genre = g;
            director = d;
            star = s;
        }
        public String gettitle()
        {
            return title;
        }
        public String getGenre()
        {
            return genre;
        }
        public String getDirector()
        {
            return director;
        }
        public String getStar()
        {
            return star;
        }
        public void setTitle(String x)
        {
            title = x;
        }
        public void setGenre(String x)
        {
            genre = x;
        }
        public void setDirector(String x)
        {
            director = x;
        }
        public void setsStar(String x)
        {
            star = x;
        }
        public boolean equals(Movie otherMovie)
        {
            if(otherMovie == null)
            {
                return false;
            }
            else
            {
                return title.equals(otherMovie.title) && genre.equals(otherMovie.genre) && director.equals(otherMovie.director) && star.equals(otherMovie.star);
            }
        }
        @Override
        public String toString()
        {
            return(title + " " + genre + " " + director + " " + star);
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) 
    {
        Movie a;
        a = new Movie("Star Trek into Darkness", "Sci-fi", "J.J. Abrams", "Chris Pine");  //error: non-static variables this cannot be referenced from a static context
        Movie b = new Movie("Star Trek", "Sci-Fi", "J.J. Abrams", "Chris Pine");  //error: non-static variables this cannot be referenced from a static context
        Movie c = new Movie("Independence Day", "Action", "Roland Emmerich", "Will Smith"); //error: non-static variables this cannot be referenced from a static context

        System.out.println("Movies");

        System.out.println("Title: " + a.title);
        System.out.println("Genre: " + a.genre);
        System.out.println("Director: " + a.director);
        System.out.println("Star: " + a.star);
        System.out.println();
        System.out.println("Title: " + b.title);
        System.out.println("Genre: " + b.genre);
        System.out.println("Director: " + b.director);
        System.out.println("Star: " + b.star);
        System.out.println();
        System.out.println("Title: " + c.title);
        System.out.println("Genre: " + c.genre);
        System.out.println("Director: " + c.director);
        System.out.println("Star: " + c.star);
        System.out.println();

        a.equals(b);

    }

}

正如上面的代碼所述,給我的靜態變量錯誤與以前相同。 在那種情況下,我要如何“工作”是從public static void main(String args[])刪除static

真正嘗試學習Java正確方法的任何幫助將不勝感激。 我也希望這符合MCV。

要訪問類的非靜態成員,您需要該類的實例。

因此, new Movie("a", "b", "c", "d").getGenre()是合法的。

從main刪除static關鍵字是不合法的,因為它是程序的入口點,因此必須存在。

編輯 :在第一個來源中,main()方法不會創建MusicLibrary的任何實例,這就是為什么您需要在所有成員上使用static的原因。

添加MusicLibrary lib = new MusicLibrary(); 然后調用lib.welcomeMenu(); 您可以擺脫static關鍵字。

首先,只能使用類的實例來調用非靜態方法,

這個鏈接可以幫助,了解它bit.And這種類型的問題是已經在這里找到答案:

暫無
暫無

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

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