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

2025-05-05 06:52:27

紧接上一节这次介绍static和final关键字的作用和使用。

工具/原料

eclipse

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。

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

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语句块,然后创建对象。

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

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修饰的成员变量和局部变量的特点

老黑讲Java之面向对象static和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.

老黑讲Java之面向对象static和final关键字
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢