Java:如何从main方法调用非静态方法?

sti*_*ghy 40 java

我正在学习java,现在我遇到了以下问题:我将main方法声明为

public static void main(String[] args) {

..... }
Run Code Online (Sandbox Code Playgroud)

在我的main方法里面,因为它是静态的我只能调用其他静态方法!为什么?

例如:我有另一个班级

 public class ReportHandler {       
     private Connection conn;   
     private PreparedStatement prep;
     public void executeBatchInsert() { ....
 } }
Run Code Online (Sandbox Code Playgroud)

所以在我的主要课程中我宣布一个 private ReportHandler rh = new ReportHandler();

但如果它们不是静态的,我就不能调用任何方法.

这出了什么问题?

编辑:对不起,我的问题是:如何'设计'应用程序,让我从我的'起点'(static void main)开始打电话给其他班级.

Jon*_*eet 62

您只需要创建一个ReportHandler实例:

ReportHandler rh = new ReportHandler(/* constructor args here */);
rh.executeBatchInsert(); // Having fixed name to follow conventions
Run Code Online (Sandbox Code Playgroud)

实例方法的重点是它们应该特定于类的特定实例......所以你需要先创建一个实例.这样,实例将在您的情况下访问正确的连接和准备好的语句.只是打电话ReportHandler.executeBatchInsert,没有足够的背景.

了解这一点非常重要:

  • 实例方法(和字段等)与特定实例相关
  • 静态方法和字段与类型本身有关,而不是特定实例

一旦你理解了这个根本的区别,你就不能在没有创建实例的情况下调用实例方法......例如,有必要问一下," 个人的高度是多少?" (对于一个特定的人)但是问"人的高度是多少?"是没有意义的.(没有指明一个人).

假设你从书籍或教程中学习Java,你应该阅读更多静态和非静态方法的例子 - 这是理解的重要区别,在你理解它之前你会遇到各种各样的问题.


小智 21

请找答案:

public class Customer {

    public static void main(String[] args) {
        Customer customer=new Customer();
        customer.business();
    }

    public void business(){
        System.out.println("Hi Harry");
    }
}
Run Code Online (Sandbox Code Playgroud)


Kit*_* Ho 6

Java是一种面向对象的编程,而不是过程编程.所以代码中的每一件事都应该是操纵一个对象.

public static void main只是程序的入口.它不涉及任何对象.

那么用对象编码是什么?这很简单,您需要创建一个特定的对象/实例,调用它们的方法来改变它们的状态,或者在该对象中做其他特定的功能.

就像

private ReportHandler rh = new ReportHandler();
rh.<function declare in your Report Handler class>
Run Code Online (Sandbox Code Playgroud)

因此,当您声明静态方法时,它不会与您的对象的对象/实例关联.而且你的OO编程也违反了它.

当该函数与后面的任何对象无关时,通常会调用静态方法.