Java之final、static关键字及匿名对象
个人通俗理解:
1、final:首先被final修饰的变量就自动变成的不能被修改的常量了。被修饰的类会自动变成太监类,只能有父类,不能有子类;被修饰的方法也不能被子类重写了;被修饰的引用变量值也不能更改了地址值了;但在修饰成员变量前必须赋值(可以使用构造方法,因为构造方法时初始化的,最早执行的)。
2、static:可以理解为static是用于将对象或者方法中的相同的东西提取出来进行静态下,在定义类的时候一并定义了,需要注意的是:它是属于类的,不是某个对象的,是早于对象存在的,存在在静态区的(不在堆栈中)。在一个类中,静态方法只能访问静态方法,但是可以被普通方法访问(因为普通方法肯定在其后面进行创建的)。进行调用的时候因为其属于类,所以最好用类名来调用。
3、匿名对象:
顾名思义就是没有定义具体的对象(变量名),只是把地址值给某个变量,算是一种节省代码。
(理解上也就这些了,其他的基本上都是需要记忆的了)
一、final关键字:
1、概念:
final的意思是最终,不可变。它是个修饰符,用来修饰类、类的成员及局部变量;不能修饰构造方法。
2、特点:
①、final修饰符不可以被继承,但是可以继承其他类;
②、final修饰的方法不可以被子类重写,但是父类中没有被final修饰的方法可以被子类重写,并且可以加final;
③、final修饰的变量为常量,这些变量只能赋值一次,且终身不变;
④、引用类型的变量值为对象地址值,地址值不能更改,但是地址内的对象属性值可以修改;
⑤、修饰成员变量,需要在创建对象前赋值,否则报错。(当没有显式赋值时,多个构造方法的均需要为其赋值。)可以在创建对象时调用的构造方法中,为变量N赋值。
二、static关键字:
1、概念:
static是静态修饰符,一般用来修饰类中的成员。
2、特点:
①、被static修饰的成员变量属于类,不属于这个类的某个对象。(也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量)
②、被static修饰的成员可以并且建议通过类名直接访问。
访问静态成员的格式:
类名.静态成员变量名
类名.静态成员方法名(参数)
3、注意事项:
①、静态内容是优先于对象存在,只能访问静态,不能使用this/super(this 是本来对象,super是父类对象)。静态修饰的内容存于静态区。
②、 同一个类中,静态成员只能访问静态成员,普通的可以访问静态的。
③、main方法为静态方法仅仅为程序执行入口,它不属于任何一个对象,可以定义在任意类中。
④、多态调用方法中,编译看=左边,父类有,编译成功,父类没有,编译失败
运行,静态方法,运行父类中的静态方法,
运行,非静态方法,运行子类的重写方法
成员变量,编译运行全是父类
4、定义静态常量:
通常使用public static final修饰的变量来完成定义。此时变量名用全部大写,多个单词使用下划线连接。
public static final 数据类型 变量名 = 值;
当我们想使用类的静态成员时,不需要创建对象,直接使用类名来访问即可。
5、注意事项:
接口中的每个成员变量都默认使用public static final修饰。
所有接口中的成员变量已是静态常量,由于接口没有构造方法,所以必须显示赋值。可以直接用接口名访问。
三、匿名对象:
1、概念:
匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。
2、特点:
①、创建匿名对象直接使用,没有变量名。
②、匿名对象在没有指定其引用变量时,只能使用一次。
③、匿名对象可以作为方法接收的参数、方法返回值使用。