文章目录
1. static关键字
- static关键字
- 关于
static
关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员属于类的,而不是单单是属于某个对象。也就是说,既然属于类,就可以不靠创建对象来调用了。- 如果使用static修饰成员方法,那么这个方法就变成了静态方法
- 静态属性和静态方法(类加载器加载字节码文件的时候 全局委托机制)优先于非静态的属性和方法。
- 非静态的属性和方法-----知道有哪些静态的属性和方法,所以他能够访问静态的属性和方法
- 但是因为静态属性和方法加载的时候,这时候还没有对象,没有对象就没有成员变量和成员方法。 所以静态的方法中无法调用非静态的属性和方法。
- 静态方法中,不能使用this关键字。
- static修饰的属性和方法是属于类的属性和方法,所以在调用的时候,推荐是用
类名.属性名 类名.方法名();
- 静态代码块 > 非静态代码块 > 构造器。
Static{}; {} ; public 类名( ){ };
- 静态代码块只执行一次,非静态代码块,每次进入到当前类的时候都会执行一次。
2. final关键字
代表的是最终的,不可改变的
2.1 常见的四种用法
- final 关键字可以用来修饰一个
类
被修饰的类,不能被继承。 - final 关键字可以用来修饰一个
方法
被修饰的方法,不能被重写。 - final 关键字可以用来修饰一个
成员变量
被修饰的变量,不能被重新赋值。 - final 关键字可以用来修饰一个
局部变量
被修饰的变量,不能被重新赋值。
2.1.1 final修饰局部变量
- 一旦使用final来修饰局部变量,那么这个变量不能进行修改。一次赋值,终生不变。
- 引用数据类型,修改对象的属性是不会报错,如果重新new 对象的时候,新开辟了一块内存地址。将新的地址赋值给student引用报错。final修饰的引用数据类型,不能改变引用的地址能改变其属性值。
2.1.2 final修饰成员变量
final修饰成员变量和final修饰局部变量的区别与联系:
- 被final修饰的成员变量与局部变量均具有:一旦赋值,该值就终身不变
- 被final修饰的成员变量必须要在创建对象之前进行赋值,否则会编译失败
- 但是局部变量可以不赋值,但是没有被赋值的局部变量不能够被使用,一旦被使用就会编译失败
综上:一旦决定使用final关键字来修饰成员变量或者局部变量,一定要做到提前赋值
/**
* @Date 2020/5/15 10:00
* @Version 10.21
* @Author DuanChaojie
*/
public class test {
//private static final String name;//报错
private static final String adr = "周口";
public static void main(String[] args) {
// System.out.println("test.name = " + test.name);
System.out.println("test.adr = " + test.adr);
testFinal();
}
public static void testFinal() {
final String name = "admin";
final int age;
// 赋值后不报错
age = 18;
// final String adr; 报错
// System.out.println("adr = " + adr);
System.out.println("age = " + age);
System.out.println("name = " + name);
}
}
2.1.3 final修饰方法
- 当关键字final修饰一个方法的时候,这个方法就是最终方法,也就是说当前的方法不能重写。
2.1.4 final修饰类
- 如果使用了final关键字修饰一个类那么这个使用final修饰的类不能有任何的子类但是可以拥有父类
- final 不能和abstract同时修饰一个类,因为final修饰的类不能被继承(所以所有的方法都不能被重写)但是abstract修饰的类是抽象类,抽象类里面的抽象方法必须被继承重写。所以final和abstract产生了冲突,这两个关键字不能一起使用。