static关键字
(1)修饰变量:静态变量-类变量,静态变量存在于方法区中,只存在一个副本,所有对象共享一个变量,只在类的加载时被初始化,因此当某个对象修改了静态变量后,其他对象调用的是被修改过的。
(2)修饰方法:静态方法,可以直接用类名.静态方法的方式访问,不依赖于对象。静态方法里面不可以调用非静态方法,因为他没有对象,而非静态方法可以调用静态方法。
(3)修饰代码块:只会在类的初次加载中被执行一次,通常将只执行一次的初始化操作都放在static代码块的进行。
(4)修饰静态内部类:定义在类内部类叫做内部类,内部类持有外部类的引用,因此可以访问外部类的所有变量和方法。不能从静态内部类的对象,访问外部类的非静态成员。
2、在一个静态方法内调用一个非静态成员为什么是非法的?
因为静态方法时属于类的,在类加载的分配内存,可以通过类名直接访问,而非静态成员是属于实例对象,只有对象实例化之后,才能通过类的实例化对象去访问。在类的静态成员存在的时候非静态成员还没有出现。
3、final关键字 可以修饰方法、变量、类
(1)final修饰变量表示常量,包括成员变量和局部变量,该变量只能被赋值一次且不能更改。这里的不可变是指引用不可变,如果修饰list,随便增删。如果是类的成员变量,那么在声明时必须初始化。如果是局部变量,要么直接赋值要么构造方法中初始化,否则编译报错。
(2)修饰方法,表示方法不可重写。
(3)修饰类,表示方法不可被继承。final类中所有方法都是final方法。
*不能对final修饰的形参直接赋值,只能通过调用该方法来传入参数赋值。
引申:不用final还可以用什么办法使得这个类不被继承
将类的构造器用private类型修饰,然后继承的子类必须调用父类的构造方法,因为是私有构造方法,因此不能被调用。
4、final finally finalize区别
(1)final可以修饰类、变量、方法,修饰类表示该类不可被继承,修饰变量表示该变量不可改变,修饰方法表示该方法不可被重写。
(2)finally一般用于try-catch代码块中,在处理异常时,通常将一定要执行的代码方法放到finally代码块中,表示不管是否出现异常,都会执行该代码块。
(3)finalize是一个方法,属于object类的一个方法,该方法一般用垃圾回收器调用,当我们调用System.gc() 方法的时候,由垃圾回收器调用finalize()回收垃圾。
5、this关键字的用法
this是自身的一个对象,代表对象本身,可以理解为指向对象本身的指针。
(1)形参与成员变量重名时,用this来区分。
(2)普通的直接引用,this相当于指向对象本身 this.属性 this.方法
(3)引用本类的其他构造函数 this()
4、super关键字的用法
super可以理解为指向超类对象的一个指针,超类指的是离得最近的一个父类。
(1)super(形参列表)子类对象与父类对象的成员变量重名,用super区分
(2)super相当于指向当前对象的父类的引用。
(3)引用父类的构造函数
5、this与super的区别
(1)super()是在子类中调用父类的构造方法,而this()是在本类中调用本类的其他构造方法。
(2)两个方法都要放在构造器的第一行。
(3)super和this不能都一个构造函数里。因为this肯定调用其他的构造函数,其他构造函数必定有super语句的存在。