比较运算
字符可以比较大小(用它们的 ascii 码,化为整数)
小心浮点数的相等比较
instanceof 也是一个比较运算,用来判断一个对象是否属于某个类
==运算中,对于基本类型比较的是 "内容",而对于引用类型,比较的是地址
基本数据类型
整数型:byte、short、int、long
浮点型:float、double
字符型:char
逻辑性:boolean
浮点型的值,如果没有特别指明,默认是 double 型的。
整数型的值,默认 int 型的。
多态:同一行为的多种不同表达,或者同一行为的多种不同实现就叫多态。
包:从逻辑上讲,包是一组相关类的集合,从物理上讲,同包即同目录。
类成员的访问控制
构造方法
类有一个特殊的成员方法叫做构造方法,它的作用是创建对象并初始化成员变量。
在创建对象时,会自动调用类的构造方法。
构造方法必须与该类具有相同的名字,并且没有方法的返回类型。
构造方法一般都应用 public 类型来说明,这样才能在程序任意的位置创建类的实例--对象。
每个类至少有一个构造方法,如果不写一个构造方法,Java 编程语言将提供一个默认的,该方法没有参数,而且方法体为空。
如果一个类中已经定义了构造方法,则系统不再提供默认的构造方法。
析构方法
析构方法 finalize 的功能是:当对象被从内存中删除时,该成员方法将会被自动调用。
当调用析构方法的时候,并不会引起该对象实例从内存中删除,而是不会起到任何作用。
形参: 就是形式参数的意思。是在定义方法名的时候使用的参数,用来表示方法接收的参数类型,在调用该方法时传入。
实参: 就是实际参数的意思。是在调用方法时传递给该方法的实际参数。
形参和实参基本规则:
1、形参和实参的类型必须要一致,或者要符合隐含转换规则。
2、形参类型不是引用类型时,在调用该方法时,是按值传递的。在该方法运行时,形参和实参是不同的变量,它们在内存中位不同的位置,形参将实参的值复制一份,在该方法运行结束的时候形参被释放,而实参内容不会改变。
3、形参类型是引用类型时,在调用该方法时,是按引用传递的,运行时,传给方法的是实参的地址,在方法体内部使用的也是实参的地址,即使用的就是实参本身对应的内存空间,所以在函数体内部可以改变实参的值。
按值传递:传递的是值的拷贝,也就是说传递后就互不相关了。
按引用传递:传递的是值的引用,也就是说传递前和传递后都指向同一个应用(也就是同一块内存空间)。
注意:
按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。
在 Java 中 只有基本类型和引用类型。
String str = "test"; -------值传递。
强制类型转换
把某种类型强制转换成另外一种类型就叫做强制类型转换。
注意:强制类型转换只能用在原本就是某个类型,但是被表示成了另外一种类型的时候,可以把它强制转换回来。
强制类型转换并不能在任意的类型间进行转换。
自动包装和解包
自动包装:就是把基础数据类型自动封装并转换成对应的包装类的对象。
自动解包:就是把包装类的对象自动解包并转换成对应的基础数据类型。
继承
初始化子类必须先初始化父类。
构造方法不能被继承。
关键字 super
关键字 super 可被用来引用该类的父类,它被用来引用父类的成员变量或方法。
1、点取父类中被子类隐藏了的数据成员。
2、点取已经覆盖了的方法。
3、作为方法名表示父类构造方法。
无论是 super 还是 this ,都必须放到构造方法第一行。
方法覆盖
在类继承中,子类可以修改从父类继承来的行为,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的:名称、返回类型、参数列表。
如:父类 A test()方法,子类B test()方法。 A ab = new B(); ab.test(); //调用的是子类的 test 方法
注意:new 谁就调用谁的方法。
方法覆盖规则
1、覆盖方法的返回类型、方法名称、参数列表必须与它所覆盖的方法相同。
2、覆盖方法不能比它所覆盖的方法访问性差(即访问权限不允许缩小)。
3、覆盖方法不能比它所覆盖的方法抛出更多的异常。
方法重载
在同一个类中(包含父类),如果出现了方法名称相同,而参数列表不同的情况就叫重载。
参数列表不同情况包括:个数不同、类型不同、顺序不同等。
注意:仅仅参数变了名称不同是不可以的。
注意:跟成员方法一样,构造方法也可以重载。
方法重载规则
1、方法名称必须相同。
2、参数列表不同。(个数不同、或类型不同、或参数排列顺序不同)。
3、方法的返回类型可以相同也可以不相同,仅仅返回类型不同不足以成为方法的重载。
多态
注意:方法没有多态的说法,严格说多态是类的特性。但也有对方法说多态的,方法覆盖称为动态多态,是一个运行时问题,方法重载称为静态多态,是一个编译时的问题。
父类的类型引用变量指向一个子类的对象。 A父类 B子类 A ab = new B(); ab.某方法(),调用的是 B 子类的方法。
instanceof 运算符
判断某个实例是否属于某个类的类型。一旦确定了变量所引用的对象类型后,可以将对象恢复给对应的子类变量,以获取对象的完整功能。
static 的变量是在类装载的时候就会被初始化。
final修饰符
1、final 标记的类不能被继承
2、final 标记的方法不能被子类重写
3、final 标记的变量(成员变量或局部变量)即为常量,只能赋值一次。
4、final 标记的成员变量必须在声明的同时赋值,如果在声明的时候没有赋值,那么只有一次赋值的机会,而且只能在构造方法中显示赋值,然后才能使用。
5、final 标记的局部变量可以只声明不赋值,然后再进行一次性的赋值。
6、final 一般用于标记那些通用性的功能、实现方式或取值不能随意被改变的成分,以避免被误用。
数组
数组是引用类型。
数组一旦被创建,就不能更改数组的长度。
equals 方法
== 进行比较的时候,引用类型数据比较的是引用,即内存地址,基本数据类型比较的是值。
equals 方法只能比较引用类型, == 可以比较引用类型和基本类型。
注意:当 equals 方法进行比较时,对类 File、String、Date 及包装类来说,是比较类型及内容而不考虑引用的是否是同一个实例。
接口
接口中声明的默认属性都是 public static final
接口中的所有方法都是 public
异常
重写方法需要抛出与原方法所抛出的异常类型一致,或不抛出异常。