1. Java编译程序将Java源程序翻译成JVM可执行代码-Java字节码。这一过程同C/C++不同。
当C编译器翻译成一个对象代码时,该代码是为在某一特定硬件平台运行而产生的。
因此,在编译过程中,编译程序通过查表将所有符合引用转换为特定的内存偏移量。
而Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,
而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创建内存布局,再通过查表确定一个方法
所在的地址。保证Java可移植性和安全性。
2. Java字节码执行有两种方式:
(1):即使编译方式。解释器先将字节码编译成机器码,再执行该机器码。
(2):解释执行方式。解释器通过每次解释并执行一小段代码完成Java字节码
程序所有操作。
通常采用第二种方法。
3. Java语音中,除了new语句外没有其他地方为一个对象申请和释放内存。
对内存进行释放和回收工作是有Java运行系统承担的。
4. Java程序中一句连续字符串不能分开在两行中写,如果字符串超长,可以用
加号(+)连接。
5. /*..*/中可以嵌套// 注释,但不能嵌套 /*..*/。
6. Java中的包、类、方法、参数和变量的名字,可由任意顺序的大小写字母,数字,下划线(_)和美元符号($)组成,不能以数字开头,不能是Java中保留关键字。
7. 整形常量可以分为十进制、十六进制和八进制。
十进制第一位不能是0,除数字0。
十六进制以0x或0X开头。
八进制必须以0开头。
长整形以L结尾。
8. 浮点型常量有float(32位),double(64位)两种类型。为单精度和双精度浮点数。
以后面加上F(f),或者D(d)表示。
9. 不同于C,Java的基础数据类型在任何操作系统中都具有相同的大小和属性。
10. char类型用来存储诸如字母、数字、标点符号及其他符号的单一字符。与C语言不同,Java的字符占两个字节,是Unicode编码的。
11. 函数的重载就是在同一个类中允许同时存在一个以上的同名函数,只有它们的参数个数或者类型不同即可。
12. Java把内存划分为两种:一种是栈内存,一种是堆内存。
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配,当一段代码块(也就是花括号{}之间)定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放该变量所分配的内存。
堆内存用来存放由new创建的对象和数组,在堆中分配内存,由Java虚拟机的自动垃圾回收期管理。
引用变量是普通变量,定义是在栈中分配,引用变量在程序运行到作用域外后被释放,而数组和对象本身在堆中分配,即使程序运行到使用new产生的数组和对象所在的代码块之外,也不会立即释放内存,数组和对象在没有引用变量指向它时,才会变成垃圾,不能再被使用,在随后一个不确定的时间被垃圾回收器释放。这也是Java比较占内存的原因。
13. 声明数组时,无论用何种方式定义数组,都不能指定其长度
例如, int a[5]; //编译出错
Int a [] = new int [] {3,4,5} // 成功
14. 要创建新对象,需要使用new关键字和想要创建对象的类名,如:
Person p = new Person ();
等号左边以类名Person作为变量类型定义了一个变量p,来指向等号右边通过new关键字创建的一个Person类的实例对象,变量p就是对象的引用句柄,对象的引用句柄在栈中分配一个变量,对象本身是在堆中分配的。
15. “==”操作符用来比较两个变量是否相等,equals()方法用于比较两个对象内容是否一致。
16. Java中提供了System.gc()方法,使用这个方法可以强制启动垃圾回收器来回收垃圾。
17. 在变量前加static关键字,称为静态成员变量。我们可以直接使用类名来访问这个静态变量。静态变量在某种程度上类似其他语言的全局变量,如果不是私有的就可以在类的外部进行访问,此时不需要产生类的实例对象,只需要类名就可以引用。
18. 不能把方法内的变量声明为静态。
19. 在方法前加上static关键字,可以调用这个方法而不必创建对象。也就是不必将方法和对象绑在一起。
20. 在静态方法里只能直接调用同类的其他的静态的成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可以使用,而静态方法使用前不用创建任何对象。
21. 静态方法不能以任何方式引用this和super关键字。因为静态方法在使用前不用创建任何实例对象,当静态方法被调用时,this对象根本没有产生。
22. main()方法是静态的,因此jvm在执行main方法时不创建main方法所在的类的实例对象。
23. 嵌套类可以直接访问嵌套它的类的成员,包括private成员,但是,嵌套类的成员却不能被嵌套它的类直接访问。
24. 和外部类不同的是,内部类可以声明为private或protected。
25. 内部类也可以通过创建对象从外部类之外被调用,只要将内部类声明为public即可。
26. 通过继承可以简化类的定义。Java只支持单继承。不允许多重继承。
27. 子类继承父类的所有成员变量和成员方法,但不继承父类的构造方法。在子类的构造方法里可以用super调用父类的构造方法。如果子类的构造方法中没有显式地调用父类构造方法,也没用使用this关键字调用重载其他构造方法,则在产生子类的实例对象时,写不写super();效果都是一样的。
28. 在Java中声明类、属性和方法时,可使用关键字final来修饰。final标记的类不能被继承。
final标记的方法不能被子类重写。final标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。
29. Java中可以定义一些不含方法体的方法,它的方法体实现交给该类的子类根据自己的情况实现,这样的方法就是抽象方法,包含抽象方法的类就是抽象类。一个抽象类中可以有一个或多个抽象方法。抽象方法必须用abstract定义,任何带有抽象方法的类必须声明为抽象类。
30. 抽象类不能被实例化,也就是不能用new关键字去产生对象。
31. 抽象类只需声明,而不需实现。
32. 含有抽象方法的类肯定是抽象类,抽象类中的方法不一定都是抽象的。
33. 接口是特殊的抽象类,这种抽象类只包含常量和方法的定义,而没有变量和方法的实现。
34. 可以定义一个新的接口,用extends关键字去继承一个已有的接口。也可以定义一个类,用implements关键字去实现一个接口中所有的方法。也可以定义一个抽象类,用implements关键字去实现一个接口定义中的部分方法。
35. 实现一个接口就是实现该接口中所有的方法(除抽象类)。
36. 接口中的方法都是抽象的,多个无关的类可以实现同一个接口,一个类也可以实现多个无关的接口。
37. 可以用instanceof判断是否一个类实现了某个接口,也可以用来判断一个实例对象是否属于一个类。If(a instanceof b);
38. Java中所有的类都是从Object衍生出来的,所有Object方法使用于所有的类。