Java 调用带参数和不带参数的函数有什么区别?

Java 调用带参数和不带参数的函数有什么区别?,java,Java,假设我有两个功能: 我有一个全局变量字符串username,它的值来自文本字段 public void sample_function() { // initialize connection, prepared Stmnt and resultset. String query="select id from test_table where name=?"; pst = c.prepareStatement(query); pst.set

假设我有两个功能:

我有一个全局变量
字符串username
,它的值来自文本字段

public void sample_function() {

    // initialize connection, prepared Stmnt and resultset.
    String query="select id from test_table where name=?";
    pst = c.prepareStatement(query);
    pst.setString(1, username); 
    rs = pst.executeQuery();
    if(!rs.next()) 
    {
        // something
    }
    else
    {
        do{
            // something

        }while(rs.next());
    }
}
每当我想调用execute这个代码块时,我只使用
sample_function()这很有效。我见过一些代码,其中字符串作为参数传递,如

public void sample_function(String username) {

    // initialize connection, prepared Stmnt and resultset.
    String query="select id from test_table where name=?";
    pst = c.prepareStatement(query);
    pst.setString(1, username); 
    rs = pst.executeQuery();
    if(!rs.next()) 
    {
        // something
    }
    else
    {
        do{
            // something

        }while(rs.next());
    }
}
使用
sample_函数(用户名)调用该函数

我的问题是:

  • 当查询从textfield获取所需的输入时,为什么首先要传递一个参数
  • 如果这是编写函数的方法,为什么sample_function()与sample_function(username)一样好用
  • 我们应该在哪些用例中传递参数/参数,以及何时只使用()空括号

  • 使用带有参数的函数可以使用不同的数据执行相同的函数

    假设您希望使用此函数不仅为一个用户名执行代码,而且为一行中的三个用户名执行代码。调用函数的代码看起来如何

    对于参数,它将如下所示:

    sampleFunction("User One")
    sampleFunction("User Two")
    sampleFunction("User Three")
    
    但是,当函数使用全局变量作为输入时,代码看起来会更加笨拙:

    username = "User One"
    sampleFunction()
    username = "User Two"
    sampleFunction()
    username = "User Three"
    sampleFunction()
    
    这段代码不仅更难看,而且更难理解

    想想你的队友,他们想从他们的代码中使用你的函数(记住,软件通常是在团队中开发的)。在调用此函数之前,他们如何知道需要将全局变量
    username
    设置为某个有意义的值?是的,他们可以在您的文档中查找(如果您编写了文档)或询问您(如果您有时间)。但是对于函数参数,开发环境通常会告诉他们“嘿,这个函数想要一个
    字符串用户名作为输入,而你没有给它一个”。(但可能取决于语言。例如,在JavaScript中,所有函数参数都是可选的,因此忘记参数在语法上是正确的,即使这可能导致运行时出现意外行为)

    阅读此代码并试图理解其工作原理的人如何?他们必须猜测,将
    username
    设置为某个值与稍后调用
    sampleFunction
    有关。在这个特殊的例子中,它仍然是很明显的。但是在一个实际的程序中,这两个步骤可能发生在相隔几行甚至不同的源代码文件中。因此,
    sampleFunction
    username
    全局变量的依赖性并不明显


    出于这些原因,通常最好将函数所需的任何信息作为参数传递,而不是将其存储在全局变量中,然后由函数读取。

    这只是一个设计决策,而不仅仅是根据使用情况使代码干净、可重用且结构良好

    我举几个例子:

    示例1:

    如果类中的许多方法中都使用了
    用户名
    ,那么最好将其作为类属性,而不是将其作为参数传递给每个方法,使其成为全局属性或与所有方法共享

    另一方面,如果
    sample_function()
    仅使用
    username
    username,则无需将其设置为类属性,也无需使用不可用的变量使类变得凌乱难看,尤其是当类具有名为
    username
    的属性时

    示例2:

    让我们考虑<代码> SAMPLE函数()/Case>只是一个搜索方法,被称为代码> SexByUrEnMeNe()/<代码>。为了使此方法具有可读性和意义,它应该将

    用户名
    作为参数,并且与它的类紧密耦合,特别是如果该类是
    存储库

    示例3:

    您可以根据在输入字段中设置
    用户名
    值的位置以及调用
    sample\u function()
    的时间来决定。如果有一个搜索按钮,当用户单击它时,您应该从文本字段中读取
    用户名
    值,然后调用
    示例函数()
    示例函数()
    应将
    用户名
    作为参数作为
    用户名
    这里是按钮函数中的本地,无需将其传递给全局变量并在
    示例函数()中重新读取

    但是如果在设置了
    username
    值的之外的位置调用
    sample\u function()
    ,则最好将
    username
    保存在全局变量中,以便在
    sample\u function()


    。。。越来越多的例子

    这是一个普遍的问题,比如为什么不将其他参数移动到变量,为什么不将函数分成两个函数,创建语句,然后在其他地方读取结果集。什么样的设计在您的特定类/应用程序中最有效取决于您。使用参数使函数更线程安全。请不要再问同样的问题。非常有用的例子philip和@Yomna Hesham。我开始学习,这对更好地理解很有帮助。你是对的,我一直在使用示例函数1(用户名1)、示例函数2(用户名2)等等。以后我不会再使用了!