1. Java中八种基本数据类型
byte 8 bits/1 bytes
short 16 bits/2 bytes
int 32 bits/4 bytes
long 64 bits/8 bytes
float 32 bits/4 bytes
double 64 bits/8 bytes
char 16 bits/2 bytes
Boolean 1 bits
2. 如果源文件中有public类,则该源文件名称必须与该public类名相同
3. Java严格区分大小写
4. 文档注释
格式:/** */
命令:javadoc [options] [java sourcefile/packet]
Javadoc会默认注释public或protected修饰的内容,如果要注释private修饰的内容则需添加 –private选项
5. 二进制数的表示
正数:以原码表示
负数:以补码表示,最高位为1
负数转十进制:补码-1 --->反码(符号位不变,其他位取反)--->原码
6. 修饰符
public: 无论它所处在的包定义在哪,该类(接口、成员)都是可访问的。
protected: 成员只能在定义它的包中被访问,如果在其他包中被访问,则实现这个方法的类必须是该成 员所属类的子类。
private: 成员只可以在定义它的类中被访问,不会被继承。
static: 静态成员在类初始化时初始化,它只属于类不属于任何对象。
静态成员方法只能访问静态成员变量,不能访问普通成员变量
普通成员方法可以访问静态成员变量
静态成员方法不可以调用普通成员方法
普通成员方法可以调用静态成员方法
final: 被定义成final的类不允许出现子类,不能被覆盖,字段值 不允许被修改。
abstract: 类中包括没有实现的方法,不能被实例化。如果是一个abstract方法,则方法体 为空,该方法的实现在子类中被定义,并且包含一个abstract方法的类必须是abstract类。
package: 类的默认修饰符,只能在包类访问。
7. 如果想在静态成员方法中访问普通成员访问,则只能重新创建一个对象。
8. Java中的参数传递机制为:值传递。
9. 函数重载:函数名称相同,参数列表不同,返回类型不同不可作为函数重载。
10. 构造器重载:使用this调用另一个重载的构造器只能在构造器中使用,而且必须作为构造器执行体的第一条语句。使用this调用重载构造器时,系统会根据this后括号里的实参来调用形参列表与之对应的构造器。
11. 继承:
子类不能继承父类的构造器;
如果需要在子类方法中调用父类被覆盖的实例方法,则可使用super限定来调用父类被覆盖的实例方法;
在一个构造器中调用另一个重载的构造器使用this调用来完成,在子类构造器中调用父类的构造器使用super调用来完成;
创建任何对象总是从该类所在继承树最顶层类的构造器开始执行,然后依次向下执行,最后才执行本类的构造器。如果某个父类通过this调用了同类中重载的构造器,就会依次执行此父类的多个构造器。
12. 多态:
子类的每一个对象都是超类的子类,反之不成立;
编译时类型由声明变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定;
子类对象可直接赋值给父类引用对象;
只能用子类的构造器实例化父类对象:
如果从父类继承过来的方法没有被覆盖,则调用父类对象的方法;
如果被覆盖了,则调用子类对象的该方法;
如果调用子类中的方法,而父类中没有定义该方法时,则会导致编译时出错;
引用变量只能调用其编译时类型的方法,而不能调用其运行时的方法。
总结:引用变量在编译阶段只能调用其编译时类型所具有的方法,但运行时则运行其运行时类型所具有的方法。
13. 引用变量的强制类型转换
只有一种情况才能使用强制类型转化:编译时类型为父类类型,运行时类型为子类类型。
总结:将引用类型变量转化成其子类类型。
14. instanceof运算符:用于判断前面的对象是否是后面的类(子类/实例类)的实例,如果是,返回true,否则返回false。可以用instanceof运算符判断是否可以成功转化。
15. 普通初始化块
当创建java对象时,总是先执行类里定义的初始化块;
初始化块只在创建Java对象时隐式执行,而且在执行构造器之前执行。
16. 静态初始化块
用static修饰,也称为类初始化块,静态初始化块在类初始化阶段执行,而不是在创建对象时执行,因此静态初始化块总是比普通初始化块先执行。
17. Object的自我描述:toString()方法。
18. String str = “Hello” 与 Stringstr = new String(“Hello”) 的区别
String str = “Hello”, JVM使用常量池来管理这些字符串;
new String(“Hello”), JVM会先使用常量池来管理”Hello”直接量,再调用String类的构造器来创建一个新的String对象,新创建的String对象保存在堆内存中,因此总共产生了两个对象。
常量池:constant pool ,专门用于管理在编译期被确定并被保存在已编译的.class文件中的一些数据,它包括了关于类,方法,接口中的常量,还包括字符串常量。
19. equals 与 ==:equals用来判断引用变量是否指向同一个对象,==用于基本数据类型是否相等。
20. 单例类
通过getInstance方法得到实例,可以保证Singleton类只能产生一个对象。
21. final 修饰符:可修饰类,变量和方法
final成员变量
final修饰的成员变量必须由程序员显式地指定初始值,不能在初始化之前访问该成员变量。如果未指定初始值,则系统会自动指定初始值。
修饰类成员变量(static修饰):必须在静态初始化块中或声明该成员变量时指定初始值。
修饰实例成员变量(非static修饰):必须在非静态初始化块,声明该成员变量或构造器中指定初始值。
final局部变量
系统不会对局部变量进行初始化,局部变量必须由程序员显式初始化,因此局部变量必须在定义时初始化,或者在后面赋一次值(只能一次)。
final修饰基本类型变量和引用类型变量的区别
当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变;
当使用final修饰引用类型变量时,引用类型变量不能被改变,但可以改变引用类型变量所引用对象的内容。
final方法:final修饰的方法不可被重写,用于不希望子类重写从父类继承过去的方法。
final类:不能被继承的类,也就是说没有子类。
22. 抽象类和抽象方法 abstract
抽象类和抽象方法必须使用abstract修饰符来修饰;
抽象方法不能有方法体,抽象方法必须由子类重写;
抽象类不能被实例化;
含有抽象方法的类只能被定义成抽象方法;
抽象类中可以含有普通方法。
[注1*] 当使用abstract修饰类时,表明这个类只能被继承;当使用abstract修饰方法时,表明这个方法只能被重写。因此abstract与final不能同时出现。
[注2*] 使用abstract修饰的方法必须被其子类重写才有意义,因此abstract与private不能同时出现。
抽象类的作用:作为子类的通用模板。
23. 接口 interface
接口定义的基本语法:
[修饰符] interface 接口名 extends 父接口1,父接口2…..
{
零到多个常量定义…
零到多个抽象方法定义…
}
接口只能用public修饰,或者省略修饰符,默认为包内修饰;
一个接口可以有多个父接口,但接口只能继承接口,不能继承类。
24. 使用接口
基本语法: …… implements 接口名
25. 内部类(嵌套类):将一个类放在另一个类内部定义
内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类;
匿名内部类适合用于创建那些仅需要一次使用的类。
1> 非静态内部类
可以当作外部类的普通成员,可以被public,protected, private修饰。
非静态内部类可以直接访问外部类的私有数据,因为内部类被当成其外部类成员,同一个类的成员之间可以互相访问。但外部类不可以访问内部类的具体实现细节,例如内部类的成员变量;
非静态内部类的成员只在非静态内部类范围内是可知的,不能直接被外部类使用。如果外部类需要访问非静态内部类的成员,则必须显式创建非静态内部类对象来访问其实力成员;
非静态内部类必须寄存在外部类对象中,而外部类对象则不必一定有非静态内部类对象寄存其中;
不允许在外部类的静态成员中直接使用非静态内部类。
2> 静态内部类
用static修饰,属于外部类本身,而不是属于外部类对象,static只能修饰内部类不能修饰外部类;
静态内部类不能访问外部类的实例成员,只能访问外部类的类成员;
静态内部类的实例方法也不能访问外部类的实例成员,只能访问外部类的静态成员。
3> 匿名内部类
匿名内部类的格式:
<1> 继承一个父类
new 父类构造器(实参列表)
{
}
<2> 实现一个接口
实现接口()
{
}
两条规则:匿名内部类不能是抽象类;匿名内部类不能有构造器。
26. 枚举类:暂时保留
27. 类初始化顺序:静态(块、方法、成员)à父类构造器à普通(块、方法、成员)à构造器。
28. 用private和final修饰成员方法的差别
Private和final修饰的方法都不能被子类继承,也就是不能被子类重写;
Final修饰的方法可以在类外部被其类实例调用,而private修饰额方法不能被其类实例调用。
29. 抽象类与接口
相同点:
1>抽象类与接口中的抽象方法不能有方法体,必须被子类重写。
2>抽象类和接口都不能实例化对象。
不同点:
1>抽象类中可以有一部分方法不是抽象方法,可以不被子类重写,而接口中的所有方法都是抽象方法,都必须被子类重写。
2>抽象类可以有构造器,实际上会默认有一个不带参的构造器,而接口没有。
3>抽象类的成员变量跟普通类没差别,而接口中的成员变量只能是static final型,因此必须初始化。
4>一个子类只能继承一个抽象类,而可以实现多个接口。