1. Java primitive 主数据类型(原生数据类型)有8种,分别是

boolean,char,byte,short,int,long,float,double

后六种是用来存放数字的,长度一般是 8,16,32,64,32,64.  这些数据类型不是对象,为了能够让它们像其他对象一样,java设计了包装类,每一个主数据类型都有对应的包装类,分别是

Boolean, Character, Byte, Short, Integer, Long, Float, Double

Java 8以后编译器可以自动进行装箱拆箱,所以无需特别在意主数据类型与对应的包装类。

2. 除去主数据类型,Java还有引用数据类型。引用数据类型有三种:类,接口和数组。引用变量类似于指针,是对对象的引用,这与Python类似,不同之处是Java要规定变量可以引用的类型,一经规定无法更改,而Python是动态引用类型,引用变量无需规定类型。

3.Java 参数传递。传递基本数据类型时,通过值传递(拷贝传递)参数,就是说拷贝一份这个值传给方法,方法无法改变调用方所传入的参数。传递引用数据类型时,传递的是引用变量的值,也就是把对象在内存中的地址拷贝一份给方法。

4. 封装可以防止不必要的泄漏和修改。封装的常用操作是将实例变量标记为private,通过getters和setters获取和修改实例变量。getters和setters当然要标记成public。

5. 实例变量和局部变量。实例变量声明在类内而不是方法内,实例变量储存了对象的状态,一个对象实例一份。局部变量定义在方法内,执行方法时才临时创建,方法执行完毕之后就被删掉了。实例变量可以不初始化,有默认值;局部变量使用前必须初始化。

6. “==”和“equals()”。对于==,如果作用于基本数据类型,则直接比较其存储的 “值”是否相等;如果作用于引用变量,则判断两个引用是否引用同一个对象。对于equals方法(注意:equals方法不能作用于基本数据类型的变量),如果没有对equals方法进行重写,默认行为是进行“==”判断,即比较的是引用类型的变量所指向的对象的地址,诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

7. 抽象类,接口。用来捕捉子类的通用特性,不能被实例化,只能被用作子类的超类。 抽象类无法初始化。接口是抽象方法的合集。接口只有方法的特征没有方法的实现,因此方法可以在不同的地方被不同的类实现。接口是解决Java无法使用多继承的的一种手段。

8. Java存取权限(access level)。public,private,default,protected。需要详细研究。

9. 多态。多态下,引用于对象可以是不同的类型,引用类型可以是实际对象类的父类。参数和返回类型也可以多态。通过多态可以编写出引进新类型子类时也不需要修改原程序的代码。

10. 方法的重载的意义是两个方法的名称相同,但是参数不同。参数不同可以是参数个数不同,也可以是顺序不同。重载与多态毫无关系。

11. 抽象方法没有函数体,直接以分号结束。不允许在非抽象类中拥有抽象方法。Java中所有的类都是从Object类继承的。从ArrayList<Object>取出的对象都会被当做Object类的实例。编译器根据引用类型来判断有哪些方法可以被调用而不是根据对象本身的类型。

12. 垃圾回收(GC)和生命周期。对象生存在堆(heap)上,方法调用和局部变量生存在栈(stack)上。局部变量和方法参数的生命周期只限于方法被放在栈上的期间;实例变量存在于对象所属的堆空间上,当对象的引用为0 时,对象变成可回收的,就会在之后某个时间被回收,实例变量随之消失。

13.构造函数(Constructor)。构造函数没有返回值,也不会被继承。可以给构造函数传参,也可以重载构造函数。当创建新对象时,所有继承下来的构造函数都会执行。

14. 静态方法和非静态方法。静态方法时不需要类实例的一些实用方法,以类的名称调用。非静态方法以引用变量的名称调用。静态方法不能调用非静态的变量和方法。静态变量:对所有实例都相同,被同类所有的实例共享。静态final变量是常数,应该全大写。