java 在java中导入用户定义的类

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/7865314/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-30 21:46:12  来源:igfitidea点击:

Importing a user defined class in java

javajava-7

提问by Mad coder.

The below is a test code where I am getting an error Pizza order = new Pizza();I believe that I didn't import Pizza.class to Pizzaorder.class file. Can anybody help me in fixing this error.

下面是一个测试代码,我收到一个错误,Pizza order = new Pizza();我相信我没有将 Pizza.class 导入 Pizzaorder.class 文件。任何人都可以帮助我修复此错误。

Code follows.

代码如下。

Pizza.java

比萨.java

package pizza;
public class Pizza {
        private double cost; //the cost of the pizza
    private String crust; //the type of crust
    private int size; //the diameter in inches
    private int numToppings; //the number of toppings
    private String toppingList; //a list of the toppings
    public static void main(String[] args) {
    }
    public Pizza()
    {
        cost = 12.99;
        crust = "Hand-tossed";
        size = 12;
        numToppings = 0;
        toppingList = null;
    }
    public void setCost (double amount)
        {
            cost += amount;
        }
    public void setCrust (String type)
    {
        crust = type;
    }
    public void setSize (int diameter)
    {
        size = diameter;
    }
    public void setNumToppings(int number)
    {
        numToppings = number;
    }
    public void setToppingList (String newTopping)
    {
        toppingList = newTopping;
    }
    public double getCost()
    {
        return cost;
    }
    public String getCrust()
    {
        return crust;
    }
    public int getSize()
    {
        return size;
    }
    public int getNumToppings()
    {
        return numToppings;
    }
    public String getToppingList()
    {
        return toppingList;
    }
}

PizzaOrder.java

比萨订单.java

package pizza;
import java.util.Scanner;
public class PizzaOrder {
    public static void main (String [] args)
    {
                Scanner keyboard = new Scanner (System.in);
                Pizza order = new Pizza ();
                String firstName;
        boolean discount = false;
                int inches; 
        char crustType; 
        double cost; 
        final double TAX_RATE = .08;
        double tax;
        char choice; 
        String input;
        String toppings = "Cheese ";
        int numberOfToppings = 0;
        System.out.println("Welcome to Abdul and " +
        "Diane's Pizza");
        System.out.print("Enter your first name: ");
        firstName = keyboard.nextLine();
        System.out.println("Pizza Size (inches)     Cost");
        System.out.println("        10          £10.99");
        System.out.println("        12          £12.99");
        System.out.println("        14          £14.99");
        System.out.println("        16          £16.99");
        System.out.println("What size pizza would you like?");
        System.out.print("10, 12, 14, or 16 " + "(enter the number only): ");
        inches = keyboard.nextInt();
        keyboard.nextLine();
        System.out.println("What type of crust do you want? ");
        System.out.print(
        "(H)Hand-tossed, (T) Thin-crust, or " +
        "(D) Deep-dish (enter H, T, or D): ");
        input = keyboard.nextLine();
        crustType = input.charAt(0);
                System.out.println("All pizzas come with cheese.");
        System.out.println(
        "Additional toppings are £1.25 each,"
        + " choose from");
        System.out.println(
        "Pepperoni, Sausage, Onion, Mushroom");
        System.out.print("Do you want Pepperoni? (Y/N): ");
        input = keyboard.nextLine();
        choice = input.charAt(0);
        if (choice == 'Y' || choice == 'y')
        {
            numberOfToppings += 1;
            toppings = toppings + "Pepperoni ";
        }
        System.out.print("Do you want Sausage? (Y/N): ");
        input = keyboard.nextLine();

        choice = input.charAt(0);
        if (choice == 'Y' || choice == 'y')
        {
            numberOfToppings += 1;
            toppings = toppings + "Sausage ";
        }
        System.out.print("Do you want Onion? (Y/N): ");
        input = keyboard.nextLine();

        choice = input.charAt(0);
        if (choice == 'Y' || choice == 'y')
        {
            numberOfToppings += 1;
            toppings = toppings + "Onion ";
        }
        System.out.print("Do you want Mushroom? (Y/N): ");
        input = keyboard.nextLine();
        choice = input.charAt(0);
        if (choice == 'Y' || choice == 'y')
        {
            numberOfToppings += 1;
            toppings = toppings + "Mushroom ";
        }
        order.setNumToppings (numberOfToppings);
        order.setToppingList(toppings);
        order.setCost(1.25*numberOfToppings);
        System.out.println();
        System.out.println("Your order is as follows: ");
        System.out.println(order.getSize() + " inch pizza");
        System.out.println(order.getCrust() + " crust");
        System.out.println(order.getToppingList());
        cost = order.getCost();
                System.out.println("The cost of your order is: £" +
        cost);
        tax = cost * TAX_RATE;
        System.out.println("The tax is: £" + tax);
        System.out.println("The total due is: £" +
        (tax+cost));
        System.out.println("Your order will be ready" +
        " for pickup in 30 minutes.");
    }
}

Error:

错误:

C:\Users\Meutex\Documents\Netbeans projects>javac PizzaOrder.java
PizzaOrder.java:23: error: cannot find symbo

Additional error.

附加错误。

C:\Users\Meutex\Documents\Netbeans projects\Pizza>java Pizza.PizzaOrder
Exception in thread "main" java.lang.NoClassDefFoundError: Pizza/PizzaOrder (wro
ng name: pizza/PizzaOrder)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
2)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access0(URLClassLoader.java:71)
        at java.net.URLClassLoader.run(URLClassLoader.java:361)
        at java.net.URLClassLoader.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:472)

回答by Andrew

The problem is that you're not compiling both files.

问题是你没有编译这两个文件。

Change javac PizzaOrder.javato be javac PizzaOrder.java Pizza.java

改变javac PizzaOrder.java成为javac PizzaOrder.java Pizza.java

Edit:

编辑:

To run your program, put PizzaOrder.classand Pizza.classin a directory called pizza. From the parent directory of pizzarun java pizza.PizzaOrder.

要运行您的程序,请将PizzaOrder.classPizza.class放入名为pizza. 从pizzarun的父目录java pizza.PizzaOrder

回答by James Jithin

When you have declared the classes in the package pizza, all the compiles class files should go inside a folder pizza. To achieve this, do the following.

当你在包pizza 中声明了类后,所有编译类文件都应该放在一个文件夹pizza 中。为此,请执行以下操作。

  1. Keep the files in a directory, say Project.
  2. On the command line, go to Projectfolder.
  3. Create a folder buildinside the Projectfolder.
  4. Copy all your .java files to Project folder.
  5. On the command line, compile the code with -d option. i.e. execute javac -d build *.javaYou will see another folder pizzacreated inside the buildfolder.
  6. To run the application, do cd build.
  7. Type java pizza.PizzaOrder
  1. 将文件保存在一个目录中,例如Project.
  2. 在命令行上,转到Project文件夹。
  3. 在文件夹build内创建一个文件Project夹。
  4. 将所有 .java 文件复制到 Project 文件夹。
  5. 在命令行上,使用 -d 选项编译代码。即执行javac -d build *.java您将看到文件夹内pizza创建的另一个文件build夹。
  6. 要运行应用程序,请执行cd build.
  7. 类型 java pizza.PizzaOrder

回答by Maurice Perry

Pizza.java and PizzaOrder.java are in package pizza, therefore should be in a folder named pizza. If you're not compiling both files together, the classpath must be set so that the compiler can find pizza/Pizza.class when compiling PizzaOrder.java.

Pizza.java 和 PizzaOrder.java 在包pizza 中,因此应该在一个名为pizza 的文件夹中。如果您没有同时编译这两个文件,则必须设置类路径,以便编译器在编译 PizzaOrder.java 时可以找到pizza/Pizza.class。

UPDATE:

更新:

Let's say the current directory is C:\Users\Meutex\Documents\Netbeans projects (btw, why are You not using netbeans to compile your project), and your pizza directory is inside it, then the command would be:

假设当前目录是 C:\Users\Meutex\Documents\Netbeans 项目(顺便说一句,你为什么不使用 netbeans 来编译你的项目),你的披萨目录在里面,那么命令是:

javac -cp . pizza/PizzaOrder.java

回答by KarlP

Below is the output from your program: It seems to work. Do you have both your classes in the same folder called "pizza"?

以下是您的程序的输出: 它似乎有效。你的两个班级都在同一个名为“pizza”的文件夹中吗?

Welcome to Abdul and Diane's Pizza
Enter your first name: K
Pizza Size (inches)     Cost
        10          £10.99
        12          £12.99
        14          £14.99
        16          £16.99
What size pizza would you like?
10, 12, 14, or 16 (enter the number only): 10
What type of crust do you want? 
(H)Hand-tossed, (T) Thin-crust, or (D) Deep-dish (enter H, T, or D): T
All pizzas come with cheese.
Additional toppings are £1.25 each, choose from
Pepperoni, Sausage, Onion, Mushroom
Do you want Pepperoni? (Y/N): Y
Do you want Sausage? (Y/N): Y
Do you want Onion? (Y/N): Y
Do you want Mushroom? (Y/N): Y

Your order is as follows: 
12 inch pizza
Hand-tossed crust
Cheese Pepperoni Sausage Onion Mushroom 
The cost of your order is: £17.990000000000002
The tax is: £1.4392000000000003
The total due is: £19.4292
Your order will be ready for pickup in 30 minutes.

There are a lot of considerations regarding the "style" of your program, like curly brace-placement, defining variables at the top of the methods like in C, and not dividing the main class into smaller methods, but for a beginner, it is ok.

关于程序的“风格”有很多考虑因素,比如花括号的位置,在方法的顶部定义变量,就像在 C 中一样,而不是将主类划分为更小的方法,但是对于初学者来说,它是行。

回答by vamsy krrish

If a class has a package it cannot be simply compiled by the program name with extension javac Pizza.java. A directory has to be created for storing the particular classes in its package. It should be compiled using javac -d . Pizza.javacommand where .will create the folder of package in the current directory. To create the folder in another location mention the location name like javac -d e:\user Pizza.java

如果一个类有一个包,它不能简单地通过带有扩展名的程序名编译javac Pizza.java。必须创建一个目录来存储其包中的特定类。它应该使用javac -d . Pizza.java命令 where.将在当前目录中创建包的文件夹进行编译。要在另一个位置创建文件夹,请提及位置名称,例如javac -d e:\user Pizza.java