Создайте конструктор конструктора конструктора Constructor + [duplicate]

Если вы хотите быстро сканировать входные данные, не запутавшись в методе nextLine () класса Scanner, используйте для этого специальный сканер ввода.

Код:

class ScanReader {
/**
* @author Nikunj Khokhar
*/
    private byte[] buf = new byte[4 * 1024];
    private int index;
    private BufferedInputStream in;
    private int total;

    public ScanReader(InputStream inputStream) {
        in = new BufferedInputStream(inputStream);
    }

    private int scan() throws IOException {
        if (index >= total) {
            index = 0;
            total = in.read(buf);
            if (total <= 0) return -1;
        }
        return buf[index++];
    }
    public char scanChar(){
        int c=scan();
        while (isWhiteSpace(c))c=scan();
        return (char)c;
    }


    public int scanInt() throws IOException {
        int integer = 0;
        int n = scan();
        while (isWhiteSpace(n)) n = scan();
        int neg = 1;
        if (n == '-') {
            neg = -1;
            n = scan();
        }
        while (!isWhiteSpace(n)) {
            if (n >= '0' && n <= '9') {
                integer *= 10;
                integer += n - '0';
                n = scan();
            }
        }
        return neg * integer;
    }

    public String scanString() throws IOException {
        int c = scan();
        while (isWhiteSpace(c)) c = scan();
        StringBuilder res = new StringBuilder();
        do {
            res.appendCodePoint(c);
            c = scan();
        } while (!isWhiteSpace(c));
        return res.toString();
    }

    private boolean isWhiteSpace(int n) {
        if (n == ' ' || n == '\n' || n == '\r' || n == '\t' || n == -1) return true;
        else return false;
    }

    public long scanLong() throws IOException {
        long integer = 0;
        int n = scan();
        while (isWhiteSpace(n)) n = scan();
        int neg = 1;
        if (n == '-') {
            neg = -1;
            n = scan();
        }
        while (!isWhiteSpace(n)) {
            if (n >= '0' && n <= '9') {
                integer *= 10;
                integer += n - '0';
                n = scan();
            }
        }
        return neg * integer;
    }

    public void scanLong(long[] A) throws IOException {
        for (int i = 0; i < A.length; i++) A[i] = scanLong();
    }

    public void scanInt(int[] A) throws IOException {
        for (int i = 0; i < A.length; i++) A[i] = scanInt();
    }

    public double scanDouble() throws IOException {
        int c = scan();
        while (isWhiteSpace(c)) c = scan();
        int sgn = 1;
        if (c == '-') {
            sgn = -1;
            c = scan();
        }
        double res = 0;
        while (!isWhiteSpace(c) && c != '.') {
            if (c == 'e' || c == 'E') {
                return res * Math.pow(10, scanInt());
            }
            res *= 10;
            res += c - '0';
            c = scan();
        }
        if (c == '.') {
            c = scan();
            double m = 1;
            while (!isWhiteSpace(c)) {
                if (c == 'e' || c == 'E') {
                    return res * Math.pow(10, scanInt());
                }
                m /= 10;
                res += (c - '0') * m;
                c = scan();
            }
        }
        return res * sgn;
    }

}

Преимущества:

  • Сканирование Вход быстрее, чем BufferReader
  • Уменьшает сложность времени
  • Сбрасывает буфер для каждого следующего входа

Методы:

  • scanChar () - сканирование одиночного символа
  • scanInt () - scan Integer value
  • scanLong () - scan Длительное значение
  • scanString () - сканирование Строковое значение
  • scanDouble () - сканирование Двойное значение
  • scanInt (int [] array) - сканирует полный массив Array (Integer)
  • scanLong (long [] array) - сканирует полный массив (длинный)

Использование:

  1. Скопируйте данный код ниже вашего java-кода.
  2. Инициализировать объект для данного класса

ScanReader sc = new ScanReader(System.in); 3. Импортировать необходимые классы :

import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; 4. Выбросить IOException из вашего основного метода для обработки исключения 5. Использовать предоставленные методы. 6. Наслаждайтесь

Пример:

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
class Main{
    public static void main(String... as) throws IOException{
        ScanReader sc = new ScanReader(System.in);
        int a=sc.scanInt();
        System.out.println(a);
    }
}
class ScanReader....
125
задан shekhar 2 October 2015 в 08:44
поделиться

11 ответов

Ни один из них. Если вы его определяете, это не значение по умолчанию.

Конструктор по умолчанию - это конструктор без аргументов, который автоматически генерируется, если вы не определяете другой конструктор. Любые неинициализированные поля будут установлены в значения по умолчанию. Для вашего примера это будет выглядеть так, если предполагается, что типы String, int и int:

public Module()
{
  super();
  this.name = null;
  this.credits = 0;
  this.hours = 0;
}

Это точно так же, как

public Module()
{}

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

Ссылка: Спецификация языка Java

Уточнение

Технически это не конструктор (по умолчанию или иначе), который по умолчанию инициализирует поля. Тем не менее, я оставляю это в ответе как

  • , вопрос получил неверные значения по умолчанию и
  • , включая их или нет, конструктор имеет точно такой же эффект.
205
ответ дан OrangeDog 26 August 2018 в 18:37
поделиться

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

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

Согласно docs

Если класс не содержит конструктор, тогда конструктор по умолчанию, не имеющий формальных параметров, и предложение throws неявно объявлено.

Пример

public class Dog
{
}

будет автоматически изменен (путем добавления конструктора по умолчанию) следующим образом

public class Dog{
    public Dog() {

    }
} 

, и когда вы создаете его объект

 Dog myDog = new Dog();

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

5
ответ дан Aniket Thakur 26 August 2018 в 18:37
поделиться

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

  • Java не инициализирует ни одну локальную переменную для значения по умолчанию. Поэтому, если вы создаете объект класса, он будет вызывать конструктор по умолчанию и предоставлять значения по умолчанию для Object.
  • Конструктор по умолчанию предоставляет значения по умолчанию для объекта, такого как 0, нуль и т. Д. В зависимости от типа.

Подробнее см. ссылку ниже.

https://www.javatpoint.com/constructor

-1
ответ дан Chirag Nimavat 26 August 2018 в 18:37
поделиться

Привет. По моим знаниям позвольте мне прояснить концепцию конструктора по умолчанию:

Компилятор автоматически предоставляет конструктор по умолчанию, не содержащий аргументов, для любого класса без конструкторов. Этот конструктор по умолчанию вызовет конструктор без аргументов суперкласса. В этой ситуации компилятор будет жаловаться, если суперкласс не имеет конструктора без аргументов, поэтому вы должны убедиться, что он это делает. Если у вашего класса нет явного суперкласса, то он имеет неявный суперкласс Object, у которого нет конструктора без аргументов.

Я прочитал эту информацию из учебных пособий Java .

15
ответ дан Don Cruickshank 26 August 2018 в 18:37
поделиться

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

Единственное действие, предпринятое неявным конструктором по умолчанию, заключается в вызове конструктора суперкласса, использующего вызов super (). Аргументы конструктора предоставляют вам способ предоставления параметров для инициализации объекта.

Ниже приведен пример класса куба, содержащего 2 конструктора. (один по умолчанию и один параметризованный конструктор).

public class Cube1 {
    int length;
    int breadth;
    int height;
    public int getVolume() {
        return (length * breadth * height);
    }

    Cube1() {
        length = 10;
        breadth = 10;
        height = 10;
    }

    Cube1(int l, int b, int h) {
        length = l;
        breadth = b;
        height = h;
    }

    public static void main(String[] args) {
        Cube1 cubeObj1, cubeObj2;
        cubeObj1 = new Cube1();
        cubeObj2 = new Cube1(10, 20, 30);
        System.out.println("Volume of Cube1 is : " + cubeObj1.getVolume());
        System.out.println("Volume of Cube1 is : " + cubeObj2.getVolume());
    }
}
6
ответ дан Jake1164 26 August 2018 в 18:37
поделиться

Конструктор по умолчанию создается, если вы не определяете каких-либо конструкторов в своем классе. Это просто конструктор без аргументов, который ничего не делает. Изменить: кроме вызова super ()

public Module(){
}
28
ответ дан Jim 26 August 2018 в 18:37
поделиться

Конструктор по умолчанию автоматически генерируется компилятором, если вы явно не определяете по крайней мере один конструктор в своем классе. Вы определили два, поэтому ваш класс не имеет конструктора по умолчанию.

Per Спецификация языка Java Third Edition :

8.8. 9 Конструктор по умолчанию

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

17
ответ дан kem 26 August 2018 в 18:37
поделиться

Если класс не имеет конструктора, предоставленного программистом, то java-компилятор добавит конструктор по умолчанию с параметрами out, которые вызовут суперструктура класса внутри с вызовом super (). Это называется конструктором по умолчанию.

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

public Module()
{
   super();
}

Примечание. В конструкторе со стороны по умолчанию он также добавит вызов super (), чтобы вызвать суперкласс класса .

Назначение добавления конструктора по умолчанию:

Обязанность конструктора - инициализировать переменные экземпляра, если нет переменных экземпляра, которые вы могли бы выбрать, чтобы удалить конструктор из вашего класса. Но когда вы наследуете какой-то класс, ваша задача отвечать на вызов суперкласс-класса, чтобы убедиться, что суперкласс инициализирует все его переменные экземпляра должным образом.

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

2
ответ дан user1923551 26 August 2018 в 18:37
поделиться

Если мы явно не определяем конструктор для класса, то java создает конструктор по умолчанию для класса. Это по существу непараметрированный конструктор, то есть он не принимает никаких аргументов.

Задача конструктора по умолчанию состоит в вызове конструктора суперкласса и инициализации всех переменных экземпляра. Если конструктор суперкласса отсутствует, он автоматически инициализирует переменные экземпляра равными нулю. Таким образом, это служит для использования конструктора, который должен инициализировать внутреннее состояние объекта, чтобы код, создающий экземпляр, имел полностью инициализированный, полезный объект.

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

0
ответ дан uttsav 26 August 2018 в 18:37
поделиться

Конструктор по умолчанию не принимает никаких аргументов:

public class Student { 
    // default constructor
    public Student() {   

    }
}
0
ответ дан Vogel612 26 August 2018 в 18:37
поделиться

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

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

Например,

class Klass {
      // Default Constructor gets generated
} 

new Klass();  // Correct
-------------------------------------

class KlassParameterized {

    KlassParameterized ( String str ) {   //// Parameterized Constructor
        // do Something
    }
} 

new KlassParameterized(); //// Wrong  - you need to explicitly provide no-arg constructor. The compiler now never declares default one.


--------------------------------

class KlassCorrected {

    KlassCorrected (){    // No-arg Constructor
       /// Safe to Invoke
    }
    KlassCorrected ( String str ) {   //// Parameterized Constructor
        // do Something
    }
} 

new KlassCorrected();    /// RIGHT  -- you can instantiate
1
ответ дан Yergalem 26 August 2018 в 18:37
поделиться
Другие вопросы по тегам:

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