«Новое» ключевое слово в Java (Android): D

1

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

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

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

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

Извините, если мой способ задать вопрос, вы заблуждаетесь, потому что я тоже путаю @@

Спасибо всем! : D

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

  • 1
    OurViewClient является классом, а new OurViewClient() является экземпляром этого класса.
  • 1
    @Eng.FouadEng.Fouad - я думаю, что OP спрашивает, почему OurViewClient() (с круглыми скобками, но без ключевого слова) не является способом вызова конструктора.
Теги:
oop

5 ответов

5
Лучший ответ

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

Таким образом, new оператор эффективно распределяет новый экземпляр класса OurViewClient и затем вызывает конструктор 0-параметров по умолчанию в этом экземпляре, возвращая созданный объект. Использование new - единственный способ создать экземпляр Object в Java, запретив более сложные темы, такие как отражение или использование таких вещей, как sun.misc.Unsafe а также некоторые исключения, основанные на встроенных типах/автобоксингах (например, String s = "str"; и 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
  • 0
    Отлично. Спасибо, сэр, я действительно ценю это: D
4

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

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

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

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

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

3

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

Вы можете сделать следующее:

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

Или также:

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

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

1

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню