Java基础总结(下)


java中的内部类

定义:将一个类的定义放在另一个类的定义内部,即为内部类。

内部类本质上是java的一种"语法糖"。为什么这样说呢?举例说明,假设现在有如下代码:

类A是一个普通的类,在他的内部定义了两个类B,以及C。从代码结构上来看,B类和C类为A类的内部,但是在使用编译器编译之后,它们并不是一个类,而是会变成符合一定名称规则的三个类,如下图所示:

它在编译之后会产生三个.class文件,分别是:A.class, A$B.class, A$C.class. 因此,本质上它们还是三个类,只是借助于java编译器的语法糖支持,我们可以写在一个类里面,从这个例子我们不难推断出,在java 里任何一个类,无论是以怎样的形式定义,在编译之后生成字节码文件之后,其必然是一个单独存在的类。理解java的类加载机制的话对这句话理解起来就更加容易,java加载任何一个类的时候都是会首先从加载其class文件开始,若一个类不存在对应的class文件,那么它必然无法被加载也无法被使用。

同时,知道了上述知识之后,我们来看这样两个问题:

内部类可以被继承吗?答案是肯定可以的,只是从java语法来说写起来会稍微有点区别

内部类的方法可以被覆盖吗?答案一样是可以的。

为何java编译器会支持定义内部类这样的使用方式,原因在于当一个类定义在另一个类内部之后,许多操作会变得简单一些,比如一个内部类可以直接访问外部类的任何成员。为什么内部类能直接访问外部类的任何成员呢?原因在于java编译器对内部类的功能t提供了支持,让我们再来看上述代码反编译回来的结果:、

同时,这里我们需要注意这里的B类声明成了static的类,C类则没有。我们常常把用static修饰的内部类成为嵌套类。

他们的区别在于,嵌套类与外围类之间是没有联系的。这意味这创建嵌套类无需外部类,当然,也不能从嵌套类的对象中访问非静态的外围类对象。同时,在嵌套类的内部可以使用static关键字,而普通的内部类不能使用static关键字。

用途:从代码的组织结构来说,使用内部类可以把逻辑相关的类组织在一起。内部类访问外部类将非常方便,内部类能访问外围对象的所有成员,且不需要任何特殊条件。但这不是最主要的原因,从设计角度出发,使用内部类最大的原因在于:每个内部类可以独立但继承一个类,这意味着虽然java的类是单继承的,但是通过使用内部类,可以达到类似多重继承的效果。因此,如果不需要解决多重继承的问题,使用内部类就并不是必须的了,因为其他的编码方式都能实现一样的效果。

关于类Collections,Arrays,Objects

在jdk源代码中提供了很多有用的工具类,它们的命名也有一定的规律。

Collections类提供了很多给容器使用的实用方法。

Arrays类提供了很多给给数组容器有用的方法。例如想创建一个数组对象可以直接调用方法Arrays.asList(...)

Objects类提供了一些给Object类中的实用方法.

这些类都位于jdk的java.util包下面。除了上面提到的三个类以外,util包下面还有许多非常有用且也经常被用到的类和包,例如正则表达式相关的类,基本类型转换的类,以及流编程的类等等,感兴趣的读者可以自行查看。

JVM,JDK,JRE三者的关系是什么

JVM指的是java virtual machine, 即java虚拟机。

是运行java代码的引擎。在其他主要的编程语言中,代码的编译器都只会为某个特定系统生成编译之后的代码,也就是说这部分代码只能在特定的系统上执行。而java编译器不为特定的平台生成字节码,而是为Java虚拟机生成字节码,编译生成的字节码是可用于在任何平台上运行的源代码,因此jvm成为了将Java代码编译为字节码的媒介,它在不同的机器上进行解释,使的java语言与平台/操作系统独立。字节码相当于是Java源代码和主机系统之间的中介语言。

一个java虚拟机主要做了下面几件事:

阅读字节码。

验证字节码。

将代码与库链接。

JDK指的是Java SE Development Kit,即java se开发库。

 

JDK包括完整的JRE(Java运行时环境)以及用于开发,调试和监视Java应用程序的工具(例如jconsole等)。 JDK是构建和运行Java应用程序和applet所必需的。 它可以被视为一个套件, 程序员和开发人员大多使用它。

JRE指的是Java runtime environment,即java运行时环境。

JRE代表Java Runtime Environment,用于在运行时提供环境。 它是JVM能够支持多平台的原因。 它包含一组库以及JVM在运行时使用的核心类和各种其他文件。 JRE是JDK(Java Development Toolkit)的一部分,但可以单独下载

https://www.bilibili.com/video/BV1qL411u7eE?from=search&seid=5303350251664895023&spm_id_from=333.337.0.0