文章目录
1.关键字
static、final、interface、abstract、this、super等关键字的具体使用以及注意事项。
-
static 和 final
static:一直存放在内存中,可直接调用,无虚重新new一块空间初始化数据,实现一个系统的缓存作用,其生命周期直到应用程序退出结束。且static修饰的类成员,在程序运行过程中,只需要初始化一次即可,不会进行多次的初始化。
用法:
(1)修饰成员变量,将其变为类的成员;
(2)修饰成员方法,类名.方法名的方式调用。
(3)修饰静态方法:初始化
小结:static可以修饰方法,属性,代码段,内部类;在笔试、刷题中,会遇到静态代码块、构造代码块、构造方法判断输出的题。先看代码
/**
* @author anning
* @version 1.0
* @motto strive
*/
public class text3 {
//静态代码块
static{
System.out.println("静态代码块!");
}
public static void main(String[] args) {
son s = new son();
System.out.println("-------------");
}
}
class son extends parents{
static {
System.out.println( "son"+"静态代码块!");
}
son(){
System.out.println("son" + "构造方法");
}
{
System.out.println("son" + "构造代码块");
}
}
class parents{
static {
System.out.println( "parents"+"静态代码块!");
}
parents(){
System.out.println("parents" + "构造方法");
}
{
System.out.println("parents" + "构造代码块");
}
}
来看输出的结果
静态代码块!
parents静态代码块!
son静态代码块!
parents构造代码块
parents构造方法
son构造代码块
son构造方法
-------------
由此我们可以看出程序的执行顺序是:静态代码块->构造代码块->构造函数->普通代码块
上述程序的执行顺序是:
1.先执行主类中的静态代码块
2.执行父类的静态构造方法
3.执行子类的静态构造方法
4.执行父类的构造代码块
5.执行父类的构造方法
6.执行子类的构造代码块
7.执行子类的构造方法
8.执行main()
final
用法:(1)修饰数据:包括成员变量和局部变量,该变量只能被赋值一次且它的值无法被修改。对于成员变量来说,我们必须声明或者构造方法中对它赋值。
(2)修饰方法参数:表示在变量的生存周期中它的值不能被改变;
(3)修饰方法:表示该方法无法被重写
(4)修饰类:表示该类无法被继承;
注意:Static final同时使用static 和final修饰的成员在内存中只占据一段不能改变的存储空间。
- interface和abstract
abstract:修饰类和方法。不能修饰属性、构造器。abstract修饰的类和方法不能被private、final、static修饰。
用法:抽象方法只保留方法的功能,而具体的执行,交给继承抽象类的子类,由子类重写抽象方法。
interface:
1.接口也是一种引用数据类型,编译之后也是一个class字节码文件。
2.接口是完全抽象的,抽象类是半抽象的,或者也可以说接口是一种特殊的抽象类。
3.接口中所有的元素都是用public修饰的,都是公开的。
4.接口中只有两部分内容:常量(public final static修饰的变量)
抽象方法(public abstract修饰的方法),修饰符可以省略不写。
5.接口中的方法都是抽象方法,抽象方法不能有方法体。
6.接口支持多继承,一个接口可以继承多个接口。 - this和super
1.属性的区别:
(1)this访问本类中的属性,如果本类没有这个属性则访问父类中的属性。
(2)super访问父类中的属性。
2.方法的区别:
(1)this访问本类中的方法,如果本类没有这个方法则访问父类中的方法。
(2)super访问父类中的方法。
3.构造的区别:
(1)this调用本类构造,必须放在构造方法的首行。
(2)super调用父类构造,必须放在子类构造方法首行。
(3)其他区别:this表示当前对象。super不能表示当前对象 。
(4)this和super不能用于static修饰的变量,方法,代码块;因为this和super都是指的是对象(实例)