提交 cba216f0 编写于 作者: W wizardforcel

2019-10-07 15:50:48

上级 d6329563
......@@ -75,6 +75,7 @@ Teaching
> 基于上述例子,我们可以说`PhysicsTeacher` **IS-A** `Teacher`。这意味着子类与父类具有 IS-A 关系。这是继承被称为子类和父类之间的 **IS-A 关系**
**注意:**
派生类继承声明为`public``protected`的所有成员和方法。如果超类的成员或方法声明为`private`,则派生类不能直接使用它们。私有成员只能在自己的类中访问。只能使用公共或受保护的超类获取器和设置器方法访问此类私有成员,如下例所示。
```java
......
......@@ -54,6 +54,7 @@ public class Cat extends Animal{
## 例 1:Java 中的多态
**运行时多态示例:**
Animal.java
```java
......
......@@ -52,6 +52,7 @@ public class Demo
它也称为动态方法调度。动态多态是一个在运行时解析对重写方法的调用的过程,这就是为什么它被称为运行时多态。我已经在单独的教程中详细讨论了方法覆盖,请参考:[方法覆盖 Java](https://beginnersbook.com/2014/01/method-overriding-in-java-with-example/)
**示例**
在此示例中,我们有两个类 ABC 和 XYZ。 ABC 是父类,XYZ 是子类。子类覆盖父类的`myMethod()`方法。在此示例中,我们将子类对象分配给父类引用,因此为了确定将调用哪个方法,将在运行时确定对象的类型。对象的类型决定了要调用哪个版本的方法(而不是引用的类型)。
> 要理解覆盖的概念,您应该具有 Java 中[继承的基本知识。](https://beginnersbook.com/2013/03/inheritance-in-java/)
......
......@@ -21,6 +21,7 @@ JAVA 由 Sun Microsystems Inc 于 1991 年开发,后来被 Oracle Corporation
所以,现在我们知道 JVM 的主要功能是执行编译器生成的字节码。 **每个操作系统都有不同的 JVM,但是在执行字节码后它们产生的输出在所有操作系统**中是相同的。这就是我们将 java 称为平台无关语言的原因。
**字节码**
如上所述,JDK 的`javac`编译器将 java 源代码编译成字节码,以便它可以由 JVM 执行。字节码由编译器保存在`.class`文件中。
**Java 开发工具包(JDK)**
......
......@@ -113,4 +113,5 @@ class Demo implements Multiply{
```
**参考:**
[抽象方法 javadoc](https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html)
\ No newline at end of file
......@@ -13,6 +13,7 @@
如上所述,它们用于完全抽象。由于接口中的方法没有 body,因此必须先由类实现它们才能访问它们。实现接口的类必须实现该接口的所有方法。此外,java 编程语言不允许扩展多个类,但是您可以在类中实现多个接口。
**语法:**
通过指定关键字“interface”声明接口。例如。:
```java
......
......@@ -72,6 +72,7 @@ class Demo{
```
**什么是空白的最终变量?**
假设我们有一个 Student 类,其中有一个名为 Roll No.的字段。由于 Roll No 不应该在学生注册后更改,我们可以将其声明为类中的最终变量但我们无法初始化没有提前为所有学生滚动(否则所有学生都会有相同的卷号)。在这种情况下,我们可以声明 roll 无变量为空白 final,我们在对象创建期间初始化此值,如下所示:
```java
......@@ -198,6 +199,7 @@ The type ABC cannot subclass the final class XYZ
```
**要记住的要点:**
1)[构造函数](https://beginnersbook.com/2013/03/constructors-in-java/ "Constructors in Java – A complete study!!")不能被声明为 final。
2)本地最终变量必须在声明期间初始化。
3)[接口](https://beginnersbook.com/2013/05/java-interface/ "Interface in java with example programs")中声明的所有变量默认为 final。
......
......@@ -55,9 +55,11 @@ MyException Occurred: This is My error Message
```
**说明:**
你可以看到,在抛出自定义异常时,我在括号中给出了一个字符串(`throw new MyException("This is My error Message");`)。这就是为什么我的自定义异常类中有[参数化构造函数](https://beginnersbook.com/2014/01/parameterized-constructor-in-java-example/)(带有 String 参数)的原因。
**注意:**
1.用户定义的异常必须扩展 Exception 类。
2.使用 throw 关键字抛出异常。
......
......@@ -22,6 +22,7 @@
这里@符号表示这是一个注解,而 Override 是这个注解的名称。
**我们可以在哪里使用注解?**
注解可以应用于类,接口,方法和字段。例如,以下注解正在应用于该方法。
```java
......
......@@ -169,6 +169,7 @@ My thread is in running state.
```
**示例程序 2:**
观察该程序的输出并尝试了解该程序中发生的情况。如果你已经理解了每个线程方法的用法,那么你应该不会遇到任何问题,理解这个例子。
```java
......
......@@ -11,6 +11,7 @@
让我们举个例子来更好地理解这些概念:
**示例**
此类实现 Serializable 接口,这意味着它可以被序列化。除了那些声明为 **transient** 的字段外,该类的所有字段都可以在转换为字节流后写入文件。在下面的示例中,我们有两个瞬态字段,这些字段不参与序列化。
_Student.java_
......
......@@ -20,6 +20,7 @@ Swing 是基于窗口的应用的首选 API,因为它具有平台独立性和
按钮,文本字段,滚动条等所有元素都称为组件。在 AWT 中,我们为每个组件提供了类,如上图所示。要将屏幕上的所有内容放置到特定位置,我们必须将它们添加到容器中。容器就像一个屏幕,我们在其中放置按钮,文本字段,复选框等组件。简而言之,容器包含并控制组件的布局。容器本身是一个组件(如上面的层次结构图所示),因此我们可以在容器内添加一个容器。
**容器类型:**
如上所述,容器是我们添加文本字段,按钮,复选框等组件的地方.AWT 中有四种类型的容器:窗口,框架,对话框和小组。如上面的层次结构图所示,Frame 和 Dialog 是 Window 类的子类。
**窗口:** Window 类的一个实例没有边框也没有标题
......
......@@ -33,6 +33,7 @@ Lambda 表达式**仅具有主体和参数列表**。
要使用 lambda 表达式,您需要创建自己的功能接口或使用 Java 提供的预定义功能接口。只有单个抽象方法的**接口称为功能接口(或单抽象方法接口),例如:Runnable,callable,ActionListener 等。**
**使用功能接口:**
Pre Java 8:我们创建匿名内部类。
Post Java 8:您可以使用 lambda 表达式而不是匿名内部类。
......@@ -86,6 +87,7 @@ public class ButtonListenerNewWay {
```
**注意:**
1.正如您所看到的,我们使用较少的代码与 lambda 表达式。
2.向后兼容性:您可以将 lambda 表达式与旧代码一起使用。 Lambdas 是向后兼容的,因此当您将项目迁移到 Java 8 时,可以在现有 API 中使用它们。
......
......@@ -64,6 +64,7 @@ There are 3 strings with length less than 6
```
**这些代码有什么区别?**
两个示例的输出都是相同的,但是如果考虑代码的性能,这些示例之间会有很大的不同。
**在第一个例子**中,我们迭代整个列表以找到长度小于 6 的字符串。此代码中没有并行性。
**在第二个例子**中,`stream()`方法返回所有名称的流,`filter()`方法返回另一个长度小于 6 的名称流,`count()`方法减少了这个流到结果。所有这些操作都是并行发生的,这意味着我们能够在流的帮助下并行化代码。 **使用流并行执行操作比不使用流**的顺序执行更快。
......
......@@ -169,4 +169,5 @@ Apple,Banana,Orange,Kiwi,Grapes
```
**参考文献:**
[Java 8 - StringJoiner JavaDoc](https://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html)
\ No newline at end of file
......@@ -217,4 +217,5 @@ Optional[Game of Thrones]
```
**参考文献:**
[Java 8 - `Optional`类 JavaDoc](https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html)
\ No newline at end of file
......@@ -9,6 +9,7 @@ Java 8 在`java.util`包的`Arrays`类中引入了一个新方法`parallelSort()
3.已合并的已排序子数组。
**并行排序优于简单排序的优点:**
`parallelSort()`方法使用[多线程](https://beginnersbook.com/2013/03/multithreading-in-java/)的概念,与[正常排序](https://beginnersbook.com/2014/07/how-to-sort-an-array-in-java/)相比,有很多元素时它更快。
## 示例 1:对原始数据类型进行并行排序
......@@ -33,6 +34,7 @@ public class Example {
```
**参考文献:**
[Java 8 - 并行排序 JavaDoc](http://download.java.net/lambda/b84/docs/api/java/util/Arrays.html#parallelSort(int[]))
## 示例 2:通过指定开始和结束索引进行并行排序
......
......@@ -69,6 +69,7 @@ static <K,V> Map<K,V> of(K k1, V v1, K k2, V v2...)
```
**示例:**
为了演示使用`Map.of()`工厂方法,我们采用了与上面使用`unmodifiableMap()`方法相同的示例。正如您所看到的,它在 Java 9 中是多么简单。我们在一行中减少了 6 行代码。
```java
......
......@@ -11,6 +11,7 @@ Java 9 在接口中引入了**私有方法**,通过私有方法共享多个默
为了理解这一点,我们必须在 Java 8 中使用一个示例(没有私有方法),然后我们将使用 Java 9(使用私有方法)采用相同的示例。
**Java 8 中的示例 - 具有重复代码的多个默认方法(公共代码)**
在此示例中,我们将看到默认方法如何具有重复代码,这些代码不必要地增加代码行并使代码更少 - 可读。我们将使用私有方法再次使用相同的示例来查看私有方法如何帮助我们避免重复的代码。
```java
......@@ -40,6 +41,7 @@ public class JavaExample implements MyInterfaceInJava8{
![Java 8 - default methods with common code](img/a53e4017479fde0404f12c1030576e6e.jpg)
**Java 9 中的示例 - 使用私有方法共享公共代码的默认方法**
我们采用的是上面我们看到的相同示例。这次我们将介绍一种私有方法来共享公共代码。
```java
......
......@@ -77,6 +77,7 @@ Compile-time error
上面的示例抛出编译时错误,因为资源是在`Try-With-Resource`语句的范围之外声明的。
**Java 7 - 外部声明的资源 - 重复资源作为变通方法**
为了解决上述错误,我们不得不在 Java 7 中做一个解决方法。我们过去常常复制资源引用,如下所示:
```java
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册