多语言展示
当前在线:658今日阅读:61今日分享:18

老黑讲Java之面向对象static和final关键字

紧接上一节这次介绍static和final关键字的作用和使用。
工具/原料
1

eclipse

2

JDK

static关键字
1

static修饰成员变量    1.static修饰成员变量不属于对象的数据结构;    2.static修饰的成员变量属于类的范畴,可以直接使用类名引用变量;    3.static修饰的成员变量和类的信息存储在方法区,无论类创建多少对象,一个类中static修饰的成员变量只有一份。示例代码如下:Person类:public class Person {    private static int count;    public Person() {        System.out.println(++count);    }        public static void main(String args[]) {        Person person1 = new Person();        Person person2 = new Person();    }}运行结果:12分析:运行期执行new Person()时,JVM会在方法区创建一个count对象和类的信息,在方法区信息只有一份,所以执行一次new Person(),count加1。

2

static修饰方法    1.方法在调用时,会隐式的传递对象的引用(this),例如:       String name = person.getName();       调用getName()方法的过程中,还隐式的传递person作为参数,即this表示person。    2.static修饰的方法不需要针对某些对象操作,运行结构只跟输入的参数有关,可以通过类名直接引用,例如:      double result = Math.sin(Math.PI/2);    3.static方法调用时没有传递具体的对象,所以在static方法中不能访问非static的方法。static方法在于提供一些“工具方法”和“工厂方法”,比如:      Math.sin()、Math.sqrt()、Arrays.sort()等

3

static语句块    static语句块属于类的代码块,类加载时执行该代码块,且只执行一次,可以用来加载静态资源。Person类:public class Person {    static {        System.out.println('加载静态资源');    }    public Person() {        System.out.println('person改造器');    }        public static void main(String args[]) {        Person person = new Person();    }}运行结果:  加载静态资源  person改造器分析:在加载Person类时,先执行static语句块,然后创建对象。

final关键字
1

final修饰变量    1.final修饰成员变量,表示值不能改变;    2.final修饰成员变量必须初始化,两种方式声明时初始化或构造器中初始化;    3.final修饰局部变量,使用前初始化,示例代码如下:Person类:public class Person {   //声明时初始化    final int age = 21;    //构造器初始化    final String name;    public Person(String name) {        this.name = name;    }    public static void main(String args[]) {        //final修饰局部变量,使用前初始化       final int weight;       weight = 150;       System.out.println(weight);           Person person = new Person('老黑');       person.age = 18;//编译错误,final修饰的成员变量不能修改    }}分析:上述代码中,演示了final修饰的成员变量和局部变量的特点

2

final修饰方法    final修饰的方法不能被重写,防止子类肆意重写父类的方法。

3

final修饰类    final修饰的类不能被继承,这样可以控制滥用继承对系统自带的类造成的危害。final class Father{}class Son extends Father{}//编译错误,final修饰的类不能被继承

4

static final声明常量    1.static final修饰成员变量成为常量,必须声明同时初始化,不能修改;    2.static final常量在编译器被替换,例如:public class Person {    final static int age = 21;    public static void main(String args[]) {        System.out.println(Person.age);    }}分析:Person.age在编译期时会被替换为21,Person.age相当于常量21.

推荐信息