java虚拟机是一个可以执行java字节码的虚拟机进程。java源文件被编译成能够java虚拟机执行的字节码文件。java被设计成允许应用程序可以运行在任意平台,而不需要程序员为每一个平台单独重写或重新编译。java虚拟机让这个变为可能,因为它知道底层硬件平台指令长度和其他特性。
java运行环境(JRE) ,它包括虚拟机、java核心类库和支持文件。
java开发工具(JDK) ,是完整的java软件开发包,包含JRE,编译器,解释器等。
一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main()。因为在程序开始执行时必须调用main() ,所以它被声明为static。声明为static的方法称为静态方法或类方法。静态方法可以直接调用静态方法,访问静态变量,但是不能直接访问实例变量和实例方法。静态方法中不能使用this关键字,因为静态方法不属于任何一个实例。Static 块仅在该类被加载时执行一次。
java中static方法不能被覆盖,因为方法覆盖是基于运行时绑定的,而static方法是编译时静态绑定的。static方法和类方法不相关。
java中不可以覆盖private方法,因为private修饰的对象和方法只能在当前类中使用,如果其他类继承当前类是不能访问到private变量或方法的,当然也不能覆盖。
当类被java虚拟机载入时,会对static变量做初始化。而非static变量是在运行时动态加载的,当然不可以使用。编译器会报错
java支持8种基本类型:
byte
short
int
long
float
double
boolean
char
自动装箱:java编译器在基本数据类型和对应的对象包装类之间做的一个转化。比如把int转换为Integer,double转换为Double。反之就是自动拆箱。
java中的overload发生在同一个类里面两个或者多个方法的方法名相同但是参数不同的情况。
方法覆盖(overriding)是子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖着可能不会限制它所覆盖的方法。
当新对象被创建的时候,构造方法会被调用。每一个类都有构造方法,在程序员没有给类
提供构造方法的情况下,java编译器会给类提供一个默认的构造方法。
java中构造方法重载和方法重载很相似。可作为一个类创建多个构造方法。每一个构造方法必须有它唯一的参数列表。
Java不支持像C++中那样的复制构造方法,这个不同点是因为如果你不自己写构造方法的情况下,Java不会创建默认的复制构造方法。
java中不支持多继承,只支持单继承(即一个类只有一个父类)。但是java中的接口支持多继承,即一个子接口可以有多个父接口(接口的作用是用来扩展对象的功能,一个子接口继承多个父接口),说明子接口扩展了多个可能,当类实现接口时,类就扩展了相应的功能。
本质:从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。接口只能定义一系列方法,算是定义行为,而不能包含具体的变量,不能拥有自己的属性,但是抽象类能够拥有变量
接口中的所有方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
类可以实现很多个接口,但是只能继承一个抽象类。
类可以不实现抽象类和接口声明的所有方法。但是,在这种情况下,类也必须得声明是抽象的。
抽象类可以在不提供接口方法实现的情况下实现接口。
java中接口中声明的变量默认都是final的,抽象类可以包含非final的变量。
java接口中的成员默认是public的,抽象类的成员函数可以是private,protectde或者是public
接口是绝对抽象的,不可以实例化,抽象类也不可以实例化
https://www.nowcoder.com/questionTerminal/b296e9e1c40542ec8677c1e452b6b576 (解析)
值传递是对基本型变量而言的,传递的是该变量的一个副本,改变副本不影响原变量。
引用传递一般是对于对象型变量而言的,传递的是该对象地址的一个副本,并不是原对象 本身。
一般认为,java内的基本类型数据传递都是值传递,java中实例对象的传递都是引用传递。