final关键字
final修饰的类
不可以被继承
最终类,不能有子类,不可以被继承
final修饰成员方法
类可以被继承,但被final修饰的方法不可以被重写
final修饰成员变量
成员变量,在堆内存,具有默认值
final修饰的成员变量,固定的不是内存的默认值
固定的是,成员变量的手动赋值,绝对不是内存的默认
final修饰的成员变量的赋值,有两种实现方式,一种是定义的时候直接赋值,另一种是通过构造方法赋值
保证:只能被赋值一次
public final class Person {
final int age;
public Person(int age){
this.age = age;
}
}
final修饰引用变量
变量保存内存地址,终身不变
Static关键字:实现对象的共享数据
被静态修饰的成员,可以被类名直接调用
//对象的特有数据(非静态修饰)
//对象的共享数据(静态修饰)
public final class Person {
String name;
static String classname;
}
public class Test {
public static void main(String[] args) {
Person p1 = new Person();
Person p2 = new Person();
p1.name = "dsd";
p2.name = "fasna";
System.out.println(p1.name);
System.out.println(p2.name);
p1.classname = "基础班";
System.out.println(p2.classname);
//被静态修饰的成员,可以被类名直接调用
System.out.println(Person.classname);
}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wwf78RkZ-1589288008628)(E:\Typora\workspace\静态的内存图.JPG)]
静态的注意事项
在静态方法中不能调用非静态
静态方法中不能写this,不能写super
方法该不该加静态:没有调用过非静态成员,将方法定义为静态
/*
多态调用中,编译看谁,运行看谁
编译都看 等号= 左边的父类,父类有则编译成功,没有则编译失败。
运行,静态方法,运行父类中的静态方法
运行,非静态方法,运行子类的重写方法
成员变量,编译运行全是父类
*/
public class Fu {
static int i = 1;
public static void show(){
System.out.println("父类的方法");
}
}
public class Zi extends Fu{
static int i = 2;
public static void show(){
System.out.println("子类的方法");
}
}
public class Test {
public static void main(String[] args) {
Fu f = new Zi();
// System.out.println(f.i);
f.show();
}
}
静态常量
public static fianl PI = 3.1415926
System.out.println(f.i);
f.show();
}
}
#### 静态常量
~~~java'
public static fianl PI = 3.1415926