public static void是什么意思?什么是课程?

时间:2016-03-25 09:20:02

标签: java

我刚接受我所制作的所有节目都必须从这开始。然后我看了一个关于生成随机数的例子#2 here

import java.util.Random;

/** Generate random integers in a certain range. */
public final class RandomRange {

  public static final void main(String... aArgs){
    log("Generating random integers in the range 1..10.");

    int START = 1;
    int END = 10;
    Random random = new Random();
    for (int idx = 1; idx <= 10; ++idx){
      showRandomInteger(START, END, random);
    }

    log("Done.");
  }

  private static void showRandomInteger(int aStart, int aEnd, Random aRandom){
    if (aStart > aEnd) {
      throw new IllegalArgumentException("Start cannot exceed End.");
    }
    //get the range, casting to long to avoid overflow problems
    long range = (long)aEnd - (long)aStart + 1;
    // compute a fraction of the range, 0 <= frac < range
    long fraction = (long)(range * aRandom.nextDouble());
    int randomNumber =  (int)(fraction + aStart);    
    log("Generated : " + randomNumber);
  }

  private static void log(String aMessage){
    System.out.println(aMessage);
  }
} 

我注意到它有一个公共静态void和一个私有静态void。为什么不将代码组合成public static void下的一件事?更重要的是,这些意味着什么?我做了研究,经常看到“课堂”这个词。什么是课程?我希望我的问题符合指导方针,这是我第一次在这里发帖。感谢。

2 个答案:

答案 0 :(得分:3)

我会假设你在这里问过,因为你想要一个简洁的答案,给你一些直觉,而不是深入研究OOP,你可以从教程中提取。

class是构建对象的模板。但是,在您理解OOP之前,class只是您正在编写的命令性代码的必要包装,因为Java要求所有代码都存在于类中。

public表示该方法可公开访问。在除此之外的类中定义的方法可以访问它。 private具有相反的含义。

static表示这是一个类级别的函数,它不依赖于类的任何特定实例。

void表示该方法不返回任何内容。

您当然可以将所有代码放在一个方法中,但这至少会带来以下问题。

  1. 代码更难阅读,因为代码的意图被实现的细节隐藏。
  2. 代码难以重复使用,因为您需要在多个位置需要相同功能时进行复制和粘贴。

答案 1 :(得分:0)

以下不完全正确,非常简化:

大多数一个类等于一个文件。即使如此,他们也可以互相访问(如果在同一个项目/文件夹中)以下是3个示例类:

用主要方法分类:

 package ooexample;

    public class OOExample {

    public static void main(String[] args) {
        int min = 2;
        int max = 101;

        // use of static method
        int randomNumberA = MyMath.generateRandomNumber(min, max);

        // use of non static method
        RandomNumberGenerator generator = new RandomNumberGenerator();
        int randomNumberB = generator.randomNumber(min, max);

        /**
        * does not work, method is private, can not be accessed from an outise class
        * only RandomNumberGenerator can access it
        */        
        // generator.printSomeNumber(123);
    }
}

使用静态方法的类。该方法可以通过编写classname.nameOfStaticMethod(...)来访问,参见main方法。

package ooexample;

public class MyMath {

    public static int generateRandomNumber(int min, int max) {
        return min + (int) (Math.random() * ((max - min) + 1));
    }
}

没有静态方法的类。您必须使用new运算符在main方法中创建类,并将创建的类分配给变量。然后,您可以使用该变量来访问该类的PUBLIC方法。除了在类本身内部之外,您无法访问其他任何地方的私有方法。参见主要方法。

package ooexample;

public class RandomNumberGenerator {

    public RandomNumberGenerator() {

    }

    public int randomNumber(int min, int max) {
        int randomNumber = min + (int) (Math.random() * ((max - min) + 1));
        printSomeNumber(randomNumber);

        return randomNumber;
    }

    private void printSomeNumber(int number) {
        System.out.println(number);
    }
}