Java 基础知识点总结
本文总结了 Java 的基础知识点,涵盖了 Java 的开发工具包、运行时环境、环境变量、Java 虚拟机、装箱和拆箱、equals 方法和==的区别、类和对象的区别、成员变量和静态变量的特点、子类的构造函数、this 和 super 的区别、接口和抽象类的区别、字符串字面量和字符串对象池、StringBuffer 和 StringBuilder 的区别等概念。
1. JDK 和 JRE 的区别
JDK 是 Java 语言的开发工具包,是 Java 语言的核心。JRE 是 Java 运行时环境。JDK 中自带一个 JRE,其中还包括 Java 核心类库和 Java 工具。
2. 环境变量 PATH 的作用
环境变量 PATH 的作用是,在编译 Java 文件的时候能够在指定的路径下去找 JDK,方便编译,如果没有 PATH 路径,就只能在 JDK 安装的路径下编译,很不方便。
3. 环境变量 CLASSPATH 的作用
环境变量 CLASSPATH 的作用是,指定类的搜索路径,一般如果我们用编辑器做开发需要用到人家已经写好的类的话,就需要用这个 CLASSPATH 导包,指出写好的这个类所在的地方。
4. JVM 的工作原理
JVM 就是 Java 虚拟机,在不同的系统环境下有不同的 JVM,在程序编译阶段,先将程序装载到 JVM 中的方法区中,这个过程叫做类加载。如果程序语法没有问题的情况下,JVM 先将程序翻译成二进制文件,也就是.class 文件(字节码文件),然后然后等待该字节码文件被运行。运行的时候逐行执行。
5. 装箱和拆箱
装箱:将基本数据类型转换成引用数据类型,比如说基本数据类型 int 装箱后称为 Integer 类型。拆箱:将基本数据类型对应的包装类型转换成基本数据类型,比如说将 Integer 类型转换成 int 类型。
6. equals 方法和==的区别
equals 方法负责比较两个引用数据类型的数据是否相等,而==用于比较两个基本数据类型的数据是否相等。需要注意的是==用于比较两个对象是都相等的时候比较的是两个对象的内存地址,equals 方法是 Object 类中自带的方法,底层也是用的==比较,所以默认也是比较两个对象的内存地址,因此我们要比较两个对象是否相等,常常要需要重写 equals 方法。
7. 类和对象的区别
类是具有相性质和特点的事物的集合,是抽象的,而对象是类的实例化,一个真实存在的事物。
8. 成员变量的特点
成员变量的特点有:随对象的创建而创建,随对象的消失而消失;成员变量在类中,方法体之外;每一个该类的对象都有类中的成员变量,并且每个对象的成员变量的值不一定一样;成员变量具有初始值,比如 int 类型的成员变量的初始值是 0,引用数据类型的初始值是null;成员变量存储在堆内存当中。
9. 静态变量的特点
静态变量的特点有:在类加载的时候创建;变量前面有 static 关键字修饰;不需要创建对象就能调用;具有初始值,比如 int 类型的成员变量的初始值是 0,引用数据类型的初始值是 null。
10. 子类的构造函数
子类的构造函数可以为父类传递参数,在子类的构造函数的第一行执行:super(参数);
11. this 和 super 的区别
this 访问的是本类中的属性,如果本类中没有该属性,再从父类中找,默认不写 this 也可以。而 super 访问的是父类中的属性。this()作用在构造器中的第一行调用的是本类中的其他构造器,而 super()作用在构造器中的第一行是调用的父类的构造器。this 调用的是本类中的实例方法,如果该类中没有该方法,再从父类中找。而 super 调用的是父类中的方法。
12. 接口和抽象类的区别
接口和抽象类的区别有:使用 implements 关键字实现接口,使用 extends 关键字继承抽象类;接口中的变量都是常量,抽象类中的变量不一定是常量;接口中的方法都是 public 权限,抽象类中的方法不一定是 public 权限;接口中的方法都是抽象方法,抽象类中的方法不一定是抽象方法;接口用 interface 关键字定义,抽象类用 abstract 关键字定义。
13. 字符串字面量是否自动生成一个 String 对象
字符串字面量是自动生成一个 String 对象的。在 Java 中,一个字符串本身就是一个字符串对象,存储在方法区中的字符串常量池中,并且该字符串不会重复出现。
14. 字符串对象池的作用
字符串对象池的作用是,存储字符串对象,相当于一个缓存池,可以提高内存的使用率,避免开辟不必要的字符串空间。
15. StringBuffer 和 StringBuilder 的区别
StringBuffer 和 StringBuilder 的区别有:StringBuffer 是线程安全的,StringBuilder 是线程不安全的;StringBuffer 的效率比 StringBuilder 的效率低。作用:因为 String 对象在方法区中不能重复,这个时候进行字符串拼接操作就会十分耗费内存空间,每拼接一次就是创建一个新的字符串对象,因此我们可以使用 StringBuffer 或 StringBuilder 来避免这种情况。