2013-09-28 2 views
1

Итак, я изучаю Java. Я до constructors и занимаюсь classes. У меня есть некоторые проблемы, которые точно понимают, что они делают? Я считаю, что они используются аналогично вызову функции , передавая параметры функции при вызове?Confused о java constructors

Правильно ли я в этом мышлении?

Так, например:

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

Если бы я должен был сделать объект в моем главном классе, как это:

test object = new test("hey");

он будет проходить hey в виде строки в durp()

Это правильно?

+4

Я не вижу каких-либо явных определений конструктора. –

ответ

3

Если бы я должен был сделать объект в моем основном классе как это: тест-объект = новый тест («эй»); он передал бы «эй» как строку, чтобы напасть() правильно?

Нет, потому что ваш метод 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

Правильно, я * думаю * Я понял. Если нет, я перечитаю его lol-thanks –

1
class Test{ 

    // this is a constructor (name is same as class and no return type) 
    public Test(String input){ 
     // some code here 
    } 

    // this is a method 
    public void durp(String input){ 
    // some code 
    } 

public static void main(String[] args){ 
     Test test = new Test("hey"); // calls constructor 
    } 

} 
0

Вы должны узнать основной Java Basic, который говорит вам о конструкторами с параметрами.

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

Хорошо, но ИМО лучше научить новичков использовать правильный словарный запас. – 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

В ООП конструктор является то, что положил жизнь на классы. Методы (в ООП они являются методами, а не функции) просто выполнить что-то с уже просуществовавшего объекта (ранее созданный с помощью конструктора). Каждый класс имеет свой конструктор по умолчанию (конструктор без параметров), если вы не переопределите свой собственный конструктор. В вашем случае:

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. Аргументы действительно широки, и есть много новых вещей, которые вы должны изучить.