1、引用操作对象
2、存储
1)寄存器
2)堆栈:必须知道数据的生命周期
3)堆:不必知道生命周期
4)常量存储
5)非RAM存储:流对象和持久化对象
3、基本数据类型(存储在堆栈)
char、byte、short、int、float、long
4、高精度数字
BigInteger、BigDecimal
5、作用域
基本类型和引用类型的变量在作用域范围之外不能使用(原因:存于堆栈中);
对象是可以存活在作用域之外(原因:存于堆中)
6、静态导入
import static java.lang.System.*;
7、赋值
可将常数赋给一个变量,单不能将任意数赋给常数
基本数据类型赋值:存储的是实际的数值
对象赋值:操作的是对象的引用,注意别名现象引起的方法调用问题
8、一元加、减符号
-:转变数据的符号
+:将较小的类型的操作数提升为int
9、方法重载
构造器是强制重载方法的重要原因之一
区分重在方法:以返回值区分重载方法行不通
涉及基本类型的重载
10、类方法就一份,创建多个该类的对象时,方法如何知道被哪个对象调用呢?
编译器暗自把“所操作对象的引用”作为第一个参数传递给方法
11、在构造器中调用构造器
用this,但是只能用一次,并且必须在第一行
12、清理:终结处理和垃圾回收
对象可能不被垃圾回收:虚拟机若不是面临内存耗尽的情形,是不会浪费时间去执行垃圾回收的、
垃圾回收并不等于析构
垃圾回收只与内存有关
13、触发类加载前提:静态方法和静态变量被调用或修改
构造器是静态方法
14、子类可以继承父类的静态方法,但是不能重写父类的静态方法,只能隐藏父类的静态方法,调用子类还是父类的方法
取决于引用的类型是子类还是父类。
子类可以继承并重写父类的非静态方法
15、对于final类型成员变量一般有两种赋初始值的方式:
1)在声明final类型的成员变量时就赋上初始值
2)在声明final类型成员变量时不赋初值,但在类的所有构造方法中都为其赋上初始值
16、static代码块:静态代码块的作用是完成一些初始化工作,首先执行静态代码块,然后执行构造方法,静态代码块在类被加载时候执行,而构造方法是在生成对象的时候执行,要想调用某个类来生成对象,首先需要将类加载到jvm,然后由jvm加载这个类来生成对象
17、类的静态代码块只会执行一次,是在类被加载的时候执行,因为每个类只会被加载一次,所以静态代码块也只会执行一次,而构造方法不然,每次生成对象的时候都会调用类的构造方法。
18、如果继承体系中既有构造方法又有静态代码块,那么首先执行最顶层类的静态代码块,直到最底层类的静态代码块,然后再去执行最顶层类的构造方法,一直执行到最底层类的构造方法
19、不能在一个静态方法中访问非静态成员变量,但是可以在非静态方法中访问静态成员变量
20、多态就是父类型或接口类型引用可以指向子类型的对象
21、类型转换:向上转型、向下转型(必须显示指定)
22、抽象类:无法实例化
23、抽象方法:抽象方法必须在抽象类中
24、接口中的所有方法都是抽象方法,可以看成是特殊类型的抽象类,一个类有且只能有一个父类,一个类可以实现多个接口
25、一个类不能既是final又是abstract,因为abstract的目的是定义一种约定,让子类去实现这种约定,而final表示该类不能被继承,这样两者互相矛盾。
26、编译带有package声明的java源文件的两种方式:
a)直接编译,然后根据类中所定义的包名,逐一手工建立目录,将生成的class文件放到该目录结构中
b)使用编译参数-d,方式为javac -d . 源文件.java,这样在编译后,编译器会自动帮助我们建立好包所对应的目录结构。
27、访问控制符:被protected所修饰的属性和方法可以在类内部、相同包以及该类的子类所继承。
28、应用编程接口(API)
29、关于进制的表示:16进制,逢16进1,16进制的数字包括:0-9,A、B、C、D、E、F
16进制相互转换十进制;计算机中的地址表示一般都用十六进制来表示。
30、equal方法
对于Object类的equal方法来说,它是判断调用equal方法的引用与传进来的引用是否一致,即这两个引用是否指向的是同一个对象。
对于String类的equal方法来说,它是判断当前字符串与传进来的字符串的内容是否一致
31、String Pool字符串池
String a = "aaa",首先查找String Pool中是否存在“aaa”这个对象,若不存在,创建一个,然后将这个对象的地址返回来,赋给引用a
String a =new String("aaa");首先在string pool中查找有没有"aaa"这个字符串对象,如果有,则不在string pool中再去创建"aaa"这个对象,直接在堆中创建一个"aaa"字符串对象,然后将堆中的这个对象地址返回赋给a。
如果没有,则首先在string pool中创建一个"aaa"对象,然后再在堆中创建一个“aaa“对象,然后将堆中这个"aaa"对象的地址返回来,赋给a引用。
32、jdk5中新增的语法特性包括,泛型、增强的for循环、基本类型的自动装箱和拆箱机制、枚举类型、参数长度可变、静态引入和注解等
33、jdk7中新增的语法特性包括,switch语句 、整数字面量、异常处理、泛型、资源处理、参数长度可变方法的调用等
34、switch增加了对字符串判断的支持,但其仅仅是在编译器层面上,而在jvm和字节码层面上,还仅仅支持与整数类型兼容的类型。在编译过程中,编译器会根据源代码的含义进行转换,将字符串类型转成与整数类型兼容的格式,不同编译器可能会采用不同的方式来完成转换。