Конструкторы Java

function countKeys(data, expected) {
  return Object.keys(data).map(key => data[key] == expected).reduce((p, c) => p + c, 0);
}

Возьмите ключи объекта , сравните каждый из них и преобразуйте в логическое, затем добавьте логические элементы вместе (принуждает их к 0 для false, 1 для true и sum).

С ES5, прервав это, вы можете:

function countKeys(data, expected) {
  var keys = Object.keys(data);
  var checked = keys.map(function (key) {
    return data[key] == expected;
  });
  return checked.reduce(function (prev, cur) {
    return prev + cur;
  }, 0);
}

или с еще более старыми циклами:

function countKeys(data, expected) {
  var keys = Object.keys(data);
  var count = 0;
  for (var i = 0; i < keys.length; ++i) {
    var value = data[key];
    if (value == expected) {
      ++count;
    } else {
      // do nothing or increment some failed counter
    }
  }
  return count;
}
29
задан Patrick Cassell 5 April 2009 в 19:05
поделиться

10 ответов

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

Что касается имен переменной, все 6 являются на самом деле именами переменной, но объемом является differnet. Те указанные как параметры конструктору (startCadence, startSpeed, startGear) только доступны в конструкторе. Другие 3 (механизм, тактовый сигнал, скорость) являются, вероятно, переменными всего класса, доступными всем методам. Однако определение не показывают в Вашем фрагменте кода. Полный класс посмотрел бы mroe как:

class Bicycle
{
    // class-level variables
    private int gear;
    private int cadence;
    private int speed;

    // constructor
    public Bicycle(int startCadence, int startSpeed, int startGear) {
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    }

    // another method (not a constructor)
    public void ShiftUp() {
        gear = gear + 1; // notice the 'gear' variable is available here too.
    }
}

Hope, которая помогает!

36
ответ дан CodingWithSpike 14 October 2019 в 08:13
поделиться

механизм, тактовый сигнал и скорость являются членскими переменными класса (объявленный в другом месте) и startCadence, startSpeed, и startGear являются параметрами функции.

class Bicycle
{
    private int gear, cadence, speed;

    public Bicycle(int startCadence, int startSpeed, int startGear)
    {
        // set the value of member variables from passed parameters
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;

    }
}
6
ответ дан basszero 14 October 2019 в 08:13
поделиться

, Куда в Вашем исходном коде классов необходимо поместить конструктора (конструкторов)?

я использую следующее:

package statement ....
import statements....


public class MyClass { 
     // instance attributes
     private int i;

     // class attribute 
     private static int MAX;

     // static methods 
     public static int getClassCount() { 
     }

     // Constructor!! 
     public MyClass() {  // constructor.
     }

     // public methods 
     // protected methods
     // private methods 

     // public static void main
 }

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

эти аргументы названия переменных?:

Не необходимый, можно назвать их, как Вы хотите. Я обычно использую то же имя.

... или механизм, тактовый сигнал и ускоряет названия переменных? ...

Они экземпляр имена переменной

, Каково различие между (интервал startCadence, интервал startSpeed, интервал startGear) и механизм, тактовый сигнал и скорость?

первыми являются названия параметра для конструктора, и первый - названия атрибутов объекта это сам.

Берут этот другой образец:

 public class Person { 
     private String name; // a person has a name.

     public Person( String nameParameter ) {  
        this.name = nameParameter;
     }
     public String toString() { 
         return "My name is : " + this.name;
     }

     public static void main( String [] args )  { 

          // creates a new "instance" and assign "Patrick" as its name.
         Person one = new Person("Patrick");
         System.out.println( one ); // prints "My name is: Patrick"

         // each person have its own name. 
         Person two = new Person("Oscar");
         System.out.println( two ); // prints "My name is: Oscar"         


     } 
 }

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

5
ответ дан OscarRyz 14 October 2019 в 08:13
поделиться

Я обычно поднимал своих конструкторов около вершины моего файла, после пакета, импорта, Javadoc, и статических разделов объявления / разделов объявления переменной экземпляра.

механизм, тактовый сигнал и скорость являются переменными класса, по-видимому, определенными за пределами конструктора где-нибудь. startCadence, startSpeed, и startGear являются также переменными, но они - параметры, переданные конструктору.

можно также видеть что-то вроде этого:

public Bicycle(int cadence, int speed, int gear) {
    this.gear = gear;
    this.cadence = cadence;
    this.speed = speed;
}

, который устанавливает переменные класса от параметров того же имени.

3
ответ дан Powerlord 14 October 2019 в 08:13
поделиться
  1. Это полностью ваше дело. Я обычно запускаю со всех переменных, затем конструкторы, затем методы, но это - просто персональное предпочтение.
  2. названия аргументов абсолютно не важны, пока Вы не называете их тем же самым как Ваши переменные. В этом примере, gear, cadence, и speed переменные.
  3. Вы (или кто-то), передача три ints конструктору. Имена (startCadence, startSpeed, и startGear названы эти формальные параметры , и они - способ, которым можно определить аргументы. См. http://en.wikipedia.org/wiki/Parameter_ (computer_science) .
    gear, cadence, и speed определяются где-то в другом месте в классе. Любой метод в классе может относиться к ним.

не волнуются - если Вы будете работать в нем, то этот вид вещи будет второй натурой довольно скоро.

, О, и я могу предложить, чтобы Вы получили хороший IDE? BlueJ, как предполагается, хорош для новичков, и NetBeans и Eclipse для более опытных программистов. Выделение исходного кода может быть неоценимым.

3
ответ дан Michael Myers 14 October 2019 в 08:13
поделиться

Вам действительно нужна копия Главный Первый Java

1
ответ дан Fortyrunner 14 October 2019 в 08:13
поделиться

На самом деле аргументы конструктору не имеют к сохраненному как членские переменные объекта. Вот пример:

class NumberAsString {

   private String numAsStr;

   public NumberAsString(double number) {
      this.numAsStr = Double.toString(number);
   }

}

В этом примере, аргумент конструктора на самом деле не хранится нигде, но его значение необходимо для вычисления одних или нескольких членских значений переменных.

поведение Вы видели, где все аргументы хранятся непосредственно как членские переменные, довольно распространено. Специально для определенных видов классов, которые просто предоставляют методы "метода считывания" и "метода set" для их членских переменных (не предлагая функций вычисления или преобразования). В мире Java эти виды классов обычно упоминаются как "бобы". (Который, да, очень глупое имя.)

0
ответ дан benjismith 14 October 2019 в 08:13
поделиться

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

0
ответ дан Berend Vervelde 14 October 2019 в 08:13
поделиться

1) местоположение конструктора не имеет значения в малейшем. Идя условно, однако, я был бы лично место это следующим образом:

public class Bicycle {

    public int gear, cadence speed;

    public Bicycle(int startCadence, int startSpeed, int startGear) {
        gear = startGear;
        cadence = startCadence;
        speed = startSpeed;
    }

    public void otherFunction1() {}
    public void otherFunction2() {}
    public void otherFunction3() {}

}

2) механизм, тактовый сигнал и скорость являются членскими переменными класса; они принадлежат каждому Велосипеду и являются различными переменными для каждого Велосипеда. startCadence, startSpeed, и startGear, однако, являются локальными переменными, которые только принадлежат той функции. Когда я призываю

new Bicycle(10, 15, 5);

, startCadence установлен на 10, startSpeed установлен на 15, и startGear установлен на 5. Затем конструктор инициализирует членские переменные к их "запуску" соответствующие переменные.

0
ответ дан Allan S 14 October 2019 в 08:13
поделиться

Эти (int startCadence, int startSpeed, int startGear) параметры являются аргументами конструктора, и они установят поля cadence, speed Bicycle, и gear. Они доступны только в конструкторе. gear, cadence, и speed переменные экземпляра, уникальные для каждого Велосипедного экземпляра и referencable из других методов. Аргументы конструктора позволяют Вам обеспечивать параметры для инициализации объекта. В этом примере можно создать Велосипедный объект с механизмом 1, тактовым сигналом 0 и скоростью 0 как так:

Bicycle bike = new Bicycle(0, 0, 1);

Или можно создать движущийся Велосипед, где тактовый сигнал составляет 60 об/мин, и скорость составляет 10 миль в час в 3-м механизме как так:

Bicycle bike = new Bicycle(60, 10, 3);

размещение конструктора не важно, но обычно конструкторы размещаются в начале определения класса.

0
ответ дан Meredith 14 October 2019 в 08:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: