«новое» ключевое слово в Java (Android): D - PullRequest
1 голос
/ 15 марта 2012

Я прочитал некоторые ссылки, и я думаю, что я понял использование ключевого слова "new" в языке ООП (но я не знаю!)

Так что я не могу понять эту строку кода, я получилэто из tut в thenewboston :

ourBrow = (WebView) findViewById(R.id.wvBrowser);
ourBrow.setWebViewClient(new OurViewClient());

Таким образом, для метода setWebViewClient(); требуется WebViewClient в его параметрах.Думаю, что я не понимаю, почему мы должны добавить ключевое слово "new" здесь?ЗАМЕТЬТЕ, что OurViewClient() - это класс, который мы создали и расширили на WebViewClient.

Извините, если мой способ задать вопрос вызывает у вас замешательство, потому что я также путаю сейчас1014 * Спасибо всем!: D

ПРИМЕЧАНИЕ: английский не мой родной язык, поэтому извините, если я сделал какую-то ошибку: D

Ответы [ 5 ]

5 голосов
/ 15 марта 2012

OurViewClient это класс, который вы сделали.OurViewClient() - это конструктор для этого класса, который принимает 0 параметров.И метод setWebViewClient() требует WebViewClient экземпляр в качестве параметра.

Таким образом, оператор new эффективно выделяет новый экземпляр класса OurViewClient, а затем вызывает конструктор 0-параметра по умолчанию для этого экземпляра, возвращая созданный объект.Использование new - это единственный способ создать экземпляр Object в Java, исключая более сложные темы, такие как рефлексия, или используя такие вещи, как sun.misc.Unsafe, а также некоторые исключения, связанные со встроенными типами / автобоксом (например, * 1016).* и Integer num = 7;).

Обратите внимание, что следующий код по существу эквивалентен имеющемуся у вас:

WebViewClient client = new OurViewClient();
ourBrow = (WebView) findViewById(R.id.wvBrowser);
ourBrow.setWebViewClient(client);

Также обратите внимание, что следующие значения недействительны :

WebViewClient client = OurViewClient();  //can't invoke a constructor without using 'new'
WebViewClient client = OurViewClient;    //can't assign the class
WebViewClient client;  //valid syntax, but 'client' will be null
4 голосов
/ 15 марта 2012

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

Это только более короткий способ сказать

ourBrow = (WebView) findViewById(R.id.wvBrowser);
OurViewClient temp = new OurViewClient();
ourBrow.setWebViewClient(temp);

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

Есть много таких "уловок" в языках программирования. Но вы можете сравнить это с алгеброй. Это всего лишь вопрос символических манипуляций. Приведенным выше фрагментом кода я иллюстрирую алгебраический принцип «дать ребенку имя» (я не знаю, является ли это английским выражением, мой родной язык голландский). Есть много других примеров этого принципа, например foo(4+5). Фактически это означает, что вы создаете временное целое число, которое хранит 4 + 5 = 9, а затем вызывает метод foo.

3 голосов
/ 15 марта 2012

new создает объект вашего класса.WebViewClient - это абстрактная идея, он описывает спецификации для объекта, но он не дает вам ничего конкретного для работы.Объект позволяет вам работать с конкретным, конкретным экземпляром класса.

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

OurViewClient ourClient = new OurViewClient();
ourBrow.setWebViewClient(ourClient);

Или также:

WebViewClient ourClient = new OurViewClient();
ourBrow.setWebViewClient(ourClient);
3 голосов
/ 15 марта 2012

Оператор new создает экземпляр класса.Без ключевого слова new в опубликованном вами коде аргумент setWebViewClient не был бы допустимым выражением Java (если только OurViewClient() не был каким-то методом, видимым в этот момент в коде).В частности, не будет вызовом конструктора по умолчанию для класса OurViewClient.Конструкторы вызываются с помощью ключевого слова new.Так устроен язык.

1 голос
/ 15 марта 2012

Вы можете думать о классе (OurViewClient, в вашем примере) как о проекте.

То, что существует чертеж, не означает, что здание существует. У вас есть только планы сделать один.

Поэтому, когда вы используете ключевое слово "new", вы делаете фактическую конструкцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...