【问题标题】:Calling a Method from Another Class With No Objects从另一个没有对象的类调用方法
【发布时间】:2013-12-21 18:17:43
【问题描述】:

我正在从数组中读取数字,然后使用我的 BubbleSort 类对数组中的数字进行排序。我正在努力让 BubbleSort 类的电话正常工作。


  //Attempted call from the main class to the BubbleSort method in the BubbleSort class

        System.out.println(this.BubbleSort.BubbleSort());

//冒泡排序类

主包;

公共类 BubbleSort {

private static void BubbleSort(int[] num) {
    for (int i = 0; i < num.length; i++) {
        for (int x = 1; x < num.length - i; x++) {
            if (num[x - 1] > num[x]) {
                int temp = num[x - 1];
                num[x - 1] = num[x];
                num[x] = temp;

【问题讨论】:

    标签: java class object methods call


    【解决方案1】:

    BubbleSort 被声明为具有int[] 类型的参数,并具有访问修饰符private。您需要使用访问修饰符 public 声明它,并将 int[] 作为参数传递给它。创建一个int[] array = new int[10],使用for 循环添加一些数据并调用BubbleSort(array)

    在java代码约定中,类名应该以大写字母开头,函数名不应该。请查看链接页面:Code Conventions for the Java TM Programming Language

    【讨论】:

      【解决方案2】:

      调用static 方法的语法是ClassName.methodName(args)。试试:

      int[] numbers = new int[10];  // Could be different size
      // Populate it somehow.
      BubbleSort.BubbleSort(numbers);
      

      您的代码使用了this,它是对当前对象的引用,其类可能没有BubbleSort 成员。

      另外,目前,您的方法是private,因此该类之外的任何东西都不能调用它。改为public

      此外,命名方法的常规 Java 约定规定第一个字母应为小写,即类 BubbleSort 的方法 bubbleSort

      【讨论】:

      • 我不断收到与以前相同的错误消息,告诉我无法从静态上下文引用非静态变量,并且找不到变量 BubbleSort。谢谢。
      • BubbleSort 方法无论如何都是构造函数。无论命名约定或语言定义如何,方法名与类名相同只是在混淆视听。
      【解决方案3】:

      因此,作为其他两个答案的组合,并指出您遇到的另一个问题......

      首先,调用static 方法的语法是ClassName.methodName(),所以在这种情况下,您需要:

      BubbleSort.BubbleSort(arguments);
      

      其次,你的BubbleSort() 方法接受一个参数,一个int[]。你需要把它传递进去。

      第三,你的BubbleSort()方法被声明为private,这意味着它只能在BubbleSort类中被调用。如果您打算从 BubbleSort 类外部调用此方法,则需要创建方法 public

      最后,BubbleSort() 有一个void 返回。 System.out.println(BubbleSort.BubbleSort(intArray)) 真的没有多大意义。它将调用该方法(当您解决所有其他问题时)并假设该方法是正确的,进行冒泡排序。它会打印一行......但该行将是空白的。因此,如果您打算打印某些内容,则需要将返回类型更改为 String 并返回您要打印的字符串。否则,不将其放在 System.out.println() 中会更有意义。

      另外...请遵循标准命名约定。方法名称应该以小写字母开头,并且可能不应该与包含它们的类同名(特别是在Java 中,这将被混淆为构造函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-19
        • 2012-10-04
        • 2013-04-21
        • 1970-01-01
        • 1970-01-01
        • 2014-05-29
        • 2015-06-16
        • 1970-01-01
        相关资源
        最近更新 更多