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静态变量的内存解析

JAVA基础 面向对象(四) 代码块 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)工具类中的方法,一般声明为静态。因为工具类没属性,还要造个对象去调方法,太麻烦了,直接用类调方法更方便。