函数有点像静态方法吗?

时间:2010-05-07 02:53:18

标签: java programming-languages function methods

我是一名java程序员,正在尝试理解方法(java方法)和函数(例如c ++)之间的区别。我曾经认为它们是相同的,只是不同编程语言的不同命名约定。但是现在我知道他们不是,我很难理解差异。

我知道一个方法涉及一个类的实例并且可以访问类数据(成员变量),而一个函数不能(?)。那么函数类似于静态方法吗?

请参阅here我读到的解释,这让我想到了这一点。

5 个答案:

答案 0 :(得分:4)

函数只是程序中部分代码的通用名称。 “方法”一词是功能的同义词。 “子程序”和“程序”等也是如此。

Java和C ++函数在很大程度上完全相同。

“method”一词倾向于用于与实例关联的子例程,而“function”倾向于用于全局/静态的那些。

但即便如此,编译器也会生成“方法”,就像它们是“函数”一样。

考虑这个C ++代码:

class Foo
{
public:
    void DoFoo(int param)
    {
        printf("%d, %d\n", param, member);
    }
private:
    int member;
};

int main()
{
    Foo f;
    f.DoFoo(42);
    return 0;
}

编译器生成与此等效的代码:

struct Foo
{
    int member;
};

void Foo_DoFoo(Foo* this, int param)
{
    printf("%d, %d\n", param, this->member);
}

int main()
{
    Foo f;
    Foo_DoFoo(&f, 42);
    return 0;
}

因此,“方法”和“功能”之间的区别仅仅是一种约定。

答案 1 :(得分:2)

这严格来说是词汇差异。有些人认为方法是属于对象或类的操作,而函数则是不属于某个操作的操作。其他人,比如C ++人群,将它们称为两个函数,但当函数不属于类或对象时,引用自由函数非成员函数。我个人可以互换地使用这两个。

总而言之,在你想要引用特定类型的函数(非成员,成员,不返回值,......)时,在C ++术语中,你为名词函数添加一个形容词:一个朋友函数,一个void函数,成员函数等。

答案 2 :(得分:1)

在C中,所有“功能”都是“顶级”,因为它们与类型无关。如果它们在您的范围内(例如,通过包含),您可以引用它们并且它们可以链接。

在C ++中,您可以创建类并在其中放置方法。标记为static的方法通过特定类调用,但不与类的实例关联。从这个意义上讲,它们就像是功能。但是,它们被允许与该类相关联的一些特权(例如,它们可以被设为私有并且可以访问私有静态成员)。但是,您仍然可以使用C风格的函数,例如库函数。

在Java中,每个方法都与一个类相关联,因此有静态方法但没有C风格的函数。

答案 3 :(得分:0)

让我们说它非常简单,函数与Java静态方法相同,但是函数不需要存在类,这就像Uri在顶级代码段中所说的那样。 这样做的一个优点是它不需要调用对象实例化。

答案 4 :(得分:0)

  

函数类似于静态方法吗?

有点儿。但我宁愿说一个静态方法就像一个被奴役并被束缚到一个对象的函数。有关此观点的详细说明,请参阅Execution in the Kingdom of Nouns