Я прочитал некоторую ссылку, и я думаю, что я понял использование "нового" ключевого слова в OOP languange (но я этого не делаю!)
Поэтому я не могу понять эту строку кода, я получил ее от tut in thenewboston:
ourBrow = (WebView) findViewById(R.id.wvBrowser);
ourBrow.setWebViewClient(new OurViewClient());
Таким образом, setWebViewClient();
для этого требуется WebViewClient в параметрах. Думаю, что я не понимаю, почему нам нужно добавить здесь "новое" ключевое слово? OurViewClient()
что OurViewClient()
- это класс, который мы создали и расширили с помощью WebViewClient
.
Извините, если мой способ задать вопрос, вы заблуждаетесь, потому что я тоже путаю @@
Спасибо всем! : D
ПРИМЕЧАНИЕ. Английский язык не является моим родным языком, поэтому извините, если я допустил ошибку: D
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
new
ключевое слово создает новый экземпляр определенного класса. Если он заключен между скобками функции метода, это означает, что вы не хотите ссылаться на созданный объект в потоке, над которым работаете.
Это всего лишь более короткий способ сказать
ourBrow = (WebView) findViewById(R.id.wvBrowser);
OurViewClient temp = new OurViewClient();
ourBrow.setWebViewClient(temp);
с temp
- временное значение. В большинстве случаев это означает, что метод выполнит какое-то поведение по умолчанию.
В языках программирования много этих "трюков". Но вы можете сравнить его с алгеброй. Это только вопрос символической манипуляции. С приведенной выше частью кода я иллюстрирую алгебраический принцип "дайте ребенку имя" (я не знаю, является ли это английское выражение, мой родной язык голландский). Есть много других примеров этого принципа, например foo(4+5)
. Это на самом деле означает, что вы создаете временное целое число, которое хранит 4 + 5 = 9, а затем вызывает метод foo
.
new
создает экземпляр объекта вашего класса. WebViewClient - абстрактная идея, она описывает спецификации для объекта, но это не дает вам что-то конкретное для работы. Объект позволяет работать с конкретным конкретным экземпляром класса.
Вы можете сделать следующее:
OurViewClient ourClient = new OurViewClient();
ourBrow.setWebViewClient(ourClient);
Или также:
WebViewClient ourClient = new OurViewClient();
ourBrow.setWebViewClient(ourClient);
new
оператор создает экземпляр класса. Без new
ключевого слова в отправленном вами коде аргумент setWebViewClient
не будет легальным выражением Java (если только в OurViewClient()
не был OurViewClient()
метод OurViewClient()
). В частности, это не будет вызов конструктора по умолчанию для класса OurViewClient
. Конструкторы вызываются с помощью new
ключевого слова. Это как раз то, как язык разработан.
Вы можете думать о классе (OurViewClient
, в вашем примере), как о плане.
Просто потому, что существует проект, это не значит, что существует здание. У вас есть только планы сделать это.
Поэтому, когда вы используете ключевое слово " new
", вы делаете фактическую конструкцию.
OurViewClient
является классом, аnew OurViewClient()
является экземпляром этого класса.OurViewClient()
(с круглыми скобками, но без ключевого слова) не является способом вызова конструктора.