Классы Java очень запутывают меня - PullRequest
3 голосов
/ 28 апреля 2011

У меня проблемы с пониманием классов на Java.

Например, как вы объявляете «Inputter» в вспомогательном классе следующим образом?

public class Helper
{
     public void Helper(String z)
     {
          if(z.length() == 0)
          {
               System.out.println("You can't leave it blank!");
               System.exit(1);
               System.out.println("It's not working... ;(");
          }
     }

     public void Inputter(int a)
     {
          // blah blah
     }
}

Вы бы назвали это так?

Helper x = new Inputter();

Пожалуйста, помогите, и НЕТ, это НЕ домашний вопрос.

Спасибо, Улыбка

РЕДАКТИРОВАТЬ: Было бы это правильно:

public class Helper
{
     public Helper(String z)
     {
          if(z.length() == 0)
          {
               System.out.println("You can't leave it blank!");
               System.exit(1);
               System.out.println("It's not working... ;(");
          }
     }

     public void Inputter(int a)
     {
          // blah blah
     }
}

и объявлено с:

Helper x = Helper();

И спасибо всем за теплый прием в StackOverflow! : D

Ответы [ 9 ]

10 голосов
/ 28 апреля 2011

Ваша проблема не в классах, а в конструкторах и методах и разнице между ними.

Методы могут иметь любое имя, которое вам нравится, они должны объявлять тип возвращаемого значения (возможно, void),и они называются так:

ReturnType r = methodName(param1, param2)

Конструкторы используются для создания экземпляров классов (объектов).Они должны иметь то же имя, что и класс, они не должны иметь тип возвращаемого значения (даже не void), и они называются так:

MyClass m = new MyClass(param1, param2);

несколько проблем в вашем коде:

  • Helper имеет правильное имя для конструктора, но поскольку он объявляет тип возвращаемого значения void, компилятор будет обрабатывать его как метод.
  • Inputter даже не имеет правильного имени для конструктора.Чтобы использовать его как конструктор с new, он должен быть частью класса с именем Inputter

Возможно, вам следует начать с чтения введения в OO частьучебника по Java.

1 голос
/ 28 апреля 2011

Единственный объект здесь - Помощник. Если вы хотите создать нового помощника, то создайте его экземпляр, сказав

Helper X = new Helper("blah blah");

Если вы хотите позвонить в Inputter, просто скажите

X.Inputter(1234);

которая будет вызывать функцию Inputter для конкретного экземпляра X Helper

1 голос
/ 28 апреля 2011

Вы должны создать экземпляр Helper Прежде чем вы сможете использовать Inputter:

Helper x = new Helper("some string");

до используйте Inputter, попробуйте это:

//create a new helper
Helper x = new Helper("some string"); 
//use the Inputter method of the helper.
x.Inputter(1); 

Здесь нужно понять, что Helper это класс, x это экземпляр класса, а Inputter это метод экземпляра отличается от статического метода ) в классе Helper.

1 голос
/ 28 апреля 2011

Inputter (), который вы определили, является методом или вы можете назвать его поведением.Вы не можете создать экземпляр для поведения.

Еще одна проблема заключается в том, что вы не можете иметь возвращаемые типы в конструкторе.Helper - это имя класса, и конструктор имеет неправильный тип возвращаемого значения

Что касается вашего вопроса, если вы хотите вызвать Inputter, вы должны сделать это примерно так:

Helper helper = new Helper("test");
helper.Inputter(100);

Рекомендуется начинать методы с букв меньшего регистра.

0 голосов
/ 28 апреля 2011

Ключевое слово new зарезервировано для создания экземпляров (причудливое слово для обозначения "создания новых") классов. То, как создается ваш класс, когда вы создаете новый Helper, запускается функция. Это функция конструкции, и она названа как класс.

Как только вы создаете экземпляр класса, вы получаете доступ к его вкусностям (исключение составляет метод / атрибут static, где каждый может получить к нему доступ); все в классе, который не private или protected.

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

Метод, по сути, является хорошей старой функцией: он имеет вход и выход. Атрибут действительно похож на любую другую переменную.

Теперь в Java и многих других ОО-языках существует разделение между объявлением класса и экземплярами класса. Объявление класса - это в основном статический кодированный класс; именно то, что вы положили в коде. Экземпляр класса принимает объявление класса и вводит его в действие: вы можете изменять и использовать методы и атрибуты внутри них.

Итак, если вы хотите вызвать Inputter, вы должны сделать это так:

Helper bob = new Helper('Bloop');
bob.Inputter(42);

Что здесь произошло? Мы создали новую переменную с именем bob, которая имеет тип Helper. При создании нового помощника мы также запускаем конструктор. Глядя на функцию конструктора, мы передаем ей значение (в данном случае 'Bloop'), и функция запускается нормально, без необходимости ее ручного вызова.

Теперь мы хотим использовать метод Inputter класса Helper. Для этого нам нужно получить доступ к экземпляру класса Helper (в нашем случае bob), используя bob. (обратите внимание на точку), а затем вызвать его, как любую другую функцию: Inputter(parameters). Склеив это, мы получим bob.Inputter(parameters)

Это было действительно довольно неубедительное объяснение ориентации Объекта, которое не так много охватывало, но оно должно помочь вам начать. Я рекомендую приобрести книгу о Java или прочитать онлайн-уроки.

0 голосов
/ 28 апреля 2011

Сначала начните с основ.

Классы лучше всего представляют существительные. Это означает, что класс - это модель (как правило) вещи. Методы лучше всего представляют глаголы на эти существительные. Отклонение от этого идеала иногда необходимо; Однако чем дальше вы будете держаться подальше от такого идеала, тем сложнее будет понять, что происходит. С кивком на исключения, поскольку вы новичок, давайте не будем зацикливаться на исключении, а будем следовать правилу.

public class Person {

   private String name;

   private int age;

   public Person(String name) {
     this.name = name;
     this.age = -1;
   }

   public void setAge(int value) {
     if (value < 0) {
       throw new IllegalArgumentException("Age must be greater than zero");
     }
     this.age = value;
   }

   public int getAge() throws IllegalStateException {
     if (age < 0) {
       throw new IllegalStateException("Age was not set");
     }
     return this.age;
   }
}

Прочитайте приведенный выше класс и используйте его стиль для начинающих программ. Когда вы обнаружите, что его стиль мешает вам больше, чем помогает, вы, возможно, нашли место, где нужны другие методы.

0 голосов
/ 28 апреля 2011

Вы можете назвать это так

String someString = "some string";
Helper x = new Helper(someString);
int someInt = 1;
x.Inputter(someInt);
0 голосов
/ 28 апреля 2011

Inputter это не класс.Это метод класса Helper.Так что вы не можете создать его экземпляр.

0 голосов
/ 28 апреля 2011

Inputter в вашем коде не является классом.Это метод.

Чтобы сделать следующее утверждение правильным:

Helper x = new Inputter();

вам нужно создать класс Inputter, который расширяет вспомогательный класс.

...