2013-09-28 86 views
1

所以我在学习Java。我达到constructors,并处理classes。我有一些问题确切地了解他们做什么/是为了什么?我相信它们类似于函数调用,在调用时将参数传递给函数?关于java构造函数的困惑

我在这个想法中正确吗?

因此,例如:

class test{ 
    void durp(String input){ 
     System.out.print(input); 
    } 
} 

如果我是使对象在我的主类是这样的:

test object = new test("hey");

它将通过hey作为一个字符串durp()

这是正确的吗?

+4

我没有看到任何显式的构造函数定义。 –

回答

3

如果我是使对象在我的主类是这样的:测试对象=新的测试(“哎”);它会将“hey”作为字符串传给durp()正确吗?

不,因为您的方法durp()不是构造函数。它只是一种属于该类的方法,可以从创建的活物体中调用。

public class Test { 
    /** this is a constructor */ 
    public Test() { 
    } 

    /** this is also a constructor with a parameter */ 
    public Test(String arg1) { 
     System.out.println(arg1); 
    } 

    /** this is a method of Test */ 
    public void derp() { 
    } 
} 

可以读取this tutorial from oracle about constructors

+0

Riiight,所以构造函数基本上是一个与从对象获取数据的类同名的方法,然后将其传递给该类中的方法? –

+0

以一种简单的方式,是的。构造函数是一个与该类名称相同的函数。你可以有很多。带参数,不带,带2,带3。它在你实例化一个对象时调用,比如Test test1 = new Test(); - 但你的构造函数必须是唯一的。链接的教程通过例子来解释它非常简单。 – Stefan

+0

对,我*认为*我明白了。如果没有,我会重新读它大声笑 - 谢谢 –

1
​​
0

你需要学习Java核心基础,它告诉你关于构造与参数。

class test{ 

public test(String s) 
{ 
    durp(s); 
} 

void durp(String input){ 

    System.out.print(input); 

} 
    public static void main(String args[]) 
    { 
    test obj=new test("hey"); 
} 
} 
0

构造在Java被用于构造对象,例如你想设置durp的值(不是durp(),因为这是一个方法),你可以使用构造函数来完成这些任务。

我想你想成才这样的:

class Test { 
    private String durp; 

    public Test(String durp) { 
     //set value of durp 
     this.durp = durp; 
    } 

    //function for getting durp string. 
    //Use getDurp() rather than durp() in java. 
    public String getDurp() { 
     return durp; 
    } 
} 
1

Java的构造函数只有像功能*,但在现实中,他们有很大的不同:

  • 你调用一个方法,当对象完全初始化;当对象不存在时调用构造函数
  • 方法不能改变final类的变量;对于构造函数来说,这是它们目的的一部分
  • 方法可能返回不同的东西;构造函数不返回
  • 方法调用可用于各种表达式;构造函数只能作为new表达式的一部分被调用。

构造函数必须遵循特殊的命名约定:它们的名称必须与类的名称相匹配。在你的情况下,这将是test。通常,构造函数的任务是设置类的成员变量。鉴于您的test类没有这样的变量,你并不需要一个构造函数**:像这样一个简单的电话就足够了:

new test().drup("hello"); 


*在Java中,适当的期限是“函数调用“是”方法调用“,尽管具有其他编程语言背景的程序员经常交替使用这两个术语。

**当类未定义自定义构造函数时,将为您提供不带参数的默认构造函数。

+0

你应该使用“方法”一词,而不是“功能”。 – Jesper

+0

@Jesper OP使用了“函数调用”,所以我决定不要一次加载太多新术语。 – dasblinkenlight

+0

好吧,但IMO最好学习初学者使用正确的词汇。 – Jesper

1

在Java中,构建对象。每次创建一个新对象时,都会调用至少一个构造函数 。每个类都有一个构造函数,但如果你不明确地创建一个构造函数,编译器会为你构建一个构造函数。关于 构造函数有很多规则,让我们关注基本声明规则。下面是一个简单的例子:

class Tets{ 
    protected Test() { } // this is Test's constructor 
    protected void Test() { } // this is a badly named, 
    // but legal, method 
} 

首先要注意的是,构造函数看起来像一个非常多的方法。 A 关键的区别是构造函数永远不会有返回类型......永远! 构造函数声明可以拥有所有正常的访问修饰符,它们可以接受参数(包括var-args),就像方法一样。其他BIG 规则,了解构造函数是他们必须具有相同的名称 它们声明的类。构造函数不能被标记为静态(它们 毕竟与对象实例化有关),它们不能被标记为最终的 或抽象(因为它们不能被覆盖)。下面是一些合法的和非法 构造函数声明:

class Foo2 { 
    // legal constructors 
    Foo2() { } 
    private Foo2(byte b) { } 
    Foo2(int x) { } 
    Foo2(int x, int... y) { } 
    // illegal constructors 
    void Foo2() { } // it's a method, not a constructor 
    Foo() { } // not a method or a constructor 
    Foo2(short s); // looks like an abstract method 
    static Foo2(float f) { } // can't be static 
    final Foo2(long x) { } // can't be final 
    abstract Foo2(char c) { } // can't be abstract 
    Foo2(int... x, int t) { } // bad var-arg syntax 
} 

访问https://java.net/downloads/jfjug/SCJP%20Sun%20Certified%20Programmer%20for%20Java%206-0071591060.pdf

0

在OOP,一个构造是把生活变成类的东西。 方法(在OOP中它们是方法,而不是函数)只是用已经存在的对象(以前使用构造函数创建)执行某些操作。除非您重新定义自己的构造函数,否则每个类都有其默认构造函数(无参数构造函数)。你的情况:

class Test{ 
    String durp; 
    public Test(String anInput) 
    { 
     this.durp = anInput; 
    } 

    void durp(){ 
     System.out.print(input); 
    } 
} 

在这一点上其他地方在你的代码,你应该有一个构造类,例如方法:

Test test = new Test("hey"); 
test.durp() // prints "hey" (without quote) 

注:由于命名约定的类名总是以启动大写和骆驼符号(即ThisIsMyClass),在这种情况下为Test。争论非常广泛,你需要学习很多新东西。