JAVA基础 面向对象(四) 代码块 static 抽象类 内部类
一、static 关键字引入
static关键字声明的属性和方法是类自己的,所有类实例化的对象,都共享这些static属性和方法。
static可用于修饰:属性、方法、代码块、内部类
1.1 static修饰属性
static修饰后的属性称为静态属性,也叫静态变量,类变量。类的所有对象共享同一静态变量,当通过某一个对象修改静态变量时,会导致其他对象调用此静态变量时,是修改过的。可以想象成大学宿舍,每个宿舍里面的房间都是对象,个人是个人的,宿舍公共区的东西比如澡堂,厨房就是共有的,static变量
1.2 static静态变量的说明
1、静态变量随着类加载而加载,因此静态变量的加载要早于对象的创建。
2、由于类只会加载一次,因此静态变量在内存中也会只有一份:存在方法区的静态域中。
说明:类是不会被销毁的,除非内存严重不足,因此类变量(静态变量)会被一直保存(即数据不会被重置)。
1.3 static静态变量的调用方法
静态变量由于是类变量,因此可以直接用类来调用,不需要用类的对象调用了(也可以用对象调用)
语法: 类名.静态变量 = 值; //可以直接通过类给类静态变量赋值(通过类来调用)
类对象名1.静态变量 = 值; //通过类对象来调用(注意需要public权限)
exp: Math.PI ,System.out(类的属性也可以是引用数据类型,out属性就是system类的一个引用数据类型的属性)
class System{
public static final PrintStream out; //属性名为out,属性值为out.toString()
}
因此可以用out对象调用 PrintStream类的println方法,就形成了System.out.println();
1.4 static静态变量的内存解析
1.5 静态方法
1、特点
(1)静态方法随着类的加载而加载,同样可以直接通过 类.方法名 来调用静态方法
(2)同样可以通过类的对象来调静态方法。
(3)静态方法,只能调用静态方法或属性(因为他们声明周期一致,重点是,非静态方法或属性都是对象的,根本不知道对象啥时候会销毁,而且那么多对象,你调用谁的)。非静态方法,既可以调用非静态属性或方法,也可以调用静态方法或属性。(就是说对象可以调用类的东西)
注意:静态方法内,不能使用this关键字、super关键字(根本没对象)。直接类名.属性,或类名.方法
1.6 static属性和方法的应用场景 (一般情况)
1、static属性应用场景
(1)如果这个属性可以被多个对象所共享,就可以声明成static。比如银行账户类,账号,密码,余额,透支额度,利率。显然利率可以声明为static属性
(2)类中的常量(final修饰的变量),一般也用static修饰,比如Math.PI。 既然是常量,自然这个类的所有对象都是用一个相同的值。那就static成类属性多好。要不每个对象都来生成一个相同值,麻烦。
2、static方法应用场景
(1)操作静态属性的方法,一般就设置成静态了,就是直接用类调用方法来设置静态属性,没必要造个对象去调方法。
(2)工具类中的方法,一般声明为静态。因为工具类没属性,还要造个对象去调方法,太麻烦了,直接用类调方法更方便。