面向对象之static与final关键字

final关键字和static关键字

final关键字

final:在翻译过来的意思就是最后的,最终的,不可改变的意思。在Java中同样也是这个意思。那到底什么时候可以用到final来修饰呢?都知道,继承的应用提高了代码的复用性,通过继承,子类可以对父类的方法进行重写,那如果有些父类中的方法是固定的,不想让子类进行重写,要解决这个问题就要用到final关键字,final关键字可以用来修饰类,类的成员,以及局部变量。

1、修饰类:final修饰的类是最终类,不能有子类,不能被继承,但是可以继承其他类,使用的方式不变,可以创建对象,调用方法。

2、修饰方法:final修饰的方法不能被子类重写。

3、修饰变量:修饰变量的时候也分几种情况

a、修饰局部变量:修饰的变量称为常量,只能被赋值一次,赋值后终生不变。所以final一般做固定值的修饰。

b、修饰引用变量:变量保存的是内存的地址,被final修饰后就不能再重新创建。(因为如果再次用new进行创建就会再次产生新的地址),但是地址内的对象属性值可以修改。

成员变量的两种赋值方式:一种是定义时直接赋值,另一种是通过构造方法赋值(注意:不能用set方法进行赋值)。但是一般都是直接赋值,不通过构造方法赋值。

c、修饰成员变量:修饰成员变量,固定住的不是内存中的默认值,固定住的是手动赋给成员变量的值。如:final int a=1;

 1 package com.oracle.demo01;
 2 /*final修饰类:(太监类)
 3     被final修饰的类不能被继承,但可以继承别的类
 4 final修饰成员方法:
 5     1.该方法可以被子类继承,但不能被重写
 6     2.从父类那里继承继承来的方法,重写后可以加final关键字
 7 final修饰变量(基本类型还是引用数据类型):
 8     一次赋值  终身不变
 9 final修饰成员变量:
10     1.成员变量的初始值不能为系统赋的默认值(需要手动赋初始值)
11     2.可以通过构造方法赋值
12     3.一次赋值终身不变*/
13 public class Test {
14     public static void main(String[] args) {
15         Zi zi=new Zi();
16         zi.method1();
17         zi.method2();
18         final int a=1;
19         final Fu fu=new Fu();
20         //System.out.println(a);
21     }
22 }

static关键字

定义类的时候,类中都会有相应的属性和方法,然而对这些方法的使用,都是通过创建本类的对象进行调用的,当调用对象的某个方法时,这个方法没有访问到对象的特有数据时,方法创建这个对象有些多余,但是不创建这个对象,方法又调用不了,那这种情况如何解决呢?这是我们就要用到static关键字了。Static是静态修饰符,一般用来修饰类中的成员。

static的特点:

1、被static修饰的成员变量属于类,不属于这个类的某个对象。也就是说,多个对象在访问或修改static修饰的成员变量时,其中一个对象将static成员变量值进行了修改,其他对象中的static成员变量值跟着改变,即多个对象共享同一个static成员变量。

代码演示:

 1 class Demo {
 2
 3     public static int num = 100;
 4
 5 }
 6
 7
 8
 9 class Test {
10
11     public static void main(String[] args) {
12
13         Demo d1 = new Demo();
14
15         Demo d2 = new Demo();
16
17         d1.num = 200;
18
19         System.out.println(d1.num); //结果为200
20
21         System.out.println(d2.num); //结果为200
22
23     }
24
25 }

2、被static修饰的成员可以并且建议通过类名直接访问。

类名.静态成员变量名

类名.静态成员方法名(参数)

对象名.静态成员变量名     ------不建议使用该方式,会出现警告

对象名.静态成员方法名(参数)     ------不建议使用该方式,会出现警告

对象名.静态成员方法名(参数)     ------不建议使用该方式,会出现警告

Static注意事项:

1、静态内容是优先于对象存在,只能访问静态,不能使用this/super。静态修饰的内容存于静态区。

2、同一个类中,静态成员只能访问静态成员,不能直接调用非静态的。如果想要使用,要先创建对象。原因:生命周期不同,静态优于非静态存在于内存中,静态存在时,非静态还不存在。

代码

 1 class Demo {
 2
 3     //成员变量
 4
 5     public int num = 100;
 6
 7     //静态成员变量
 8
 9     public static int count = 200;
10
11     //静态方法
12
13     public static void method(){
14
15         //System.out.println(num); 静态方法中,只能访问静态成员变量或静态成员方法
16
17         System.out.println(count);
18
19     }
20
21 }

使用场景:

成员变量使用static 根据具体的事物,具体分析问题,定义事物的时候,,将共性的数据定义为静态的成员变量。

方法跟着变量走,如果方法中没有调用非静态成员变量,需要加静态。

静态调用:

多态调用:编译都看父类,如果有,编译成功,否则编译失败。运行时:静态方法运行父类中的静态方法,,非静态方法:运行子类中重写的方法。成员变量:运行编译都看父类。注意:静态方法与对象没有关系。

定义静态常量:

开发中,我们想在类中定义一个静态常量,通常使用public static final修饰的变量来完成定义。此时变量名用全部大写,多个单词使用下划线连接。

定义格式:

   public static final 数据类型 变量名 = 值;

如:

class Company {

    public static final String COMPANY_NAME = "卢肖正";

    public static void method(){

        System.out.println("一个静态方法");

    }

}

当我们要使用静态类时,不需要创建对象,直接使用类名来访问即可:

1 System.out.println(Company.COMPANY_NAME); //打印姓名
2
3 Company.method(); // 调用一个静态方法

注意:   

 

   接口中的每个成员变量都默认使用public static final修饰。

  所有接口中的成员变量已是静态常量,由于接口没有构造方法,所以必须显示赋值。可以直接用接口名访问。

如:

interface Inter {

    public static final int COUNT = 100;

}

  // 访问接口中的静态变量

Inter.COUNT

图解:

原文地址:https://www.cnblogs.com/2734156755z/p/9376181.html

时间: 2024-10-13 18:45:34

面向对象之static与final关键字的相关文章

面向对象编程(十二)——final关键字

阅读目录 final关键字final修饰变量final修饰方法final修饰类Final && Static 总结 final关键字 Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量. 在Java中,final关键字可以用来修饰类.方法和变量(包括成员变量和局部变量). 回到顶部 final修饰变量 final修饰变量:该变量变成常量 对于一个final变量,如果是基本数据类型的变量,则其数值

Java的static和final关键字的用法

static关键字的用法 static的意思是"'静态的",在java里面可用于修饰属性和方法. static关键字的应用应注意以下几种情形: 1.static作用于某个字段,一个static字段对每个类来说只有一份存储空间,而非static字段是每个对象有一份存储空间. 2.static作用于方法的重要用法是不需要创建任何对象直接调用该static方法,这对于main()方法很重要. 3.static不能应用于局部变量. 4.Java中禁止使用全局方法,所以引入static方法通过类

static 和 final 关键字 对实例变量赋初始值的影响

static 和 final 关键字 对实例变量赋初始值的影响 最近一直在看<深入理解Java虚拟机>,在看完了对象内存分配.Class文件格式之后,想深扒一下实例变量是如何被赋上初始值的这个问题的细节. 在2.3.1小节中讲对象创建的时候,讲到内存分配有两种方式:一种是指针碰撞:另一种是空闲列表. 而选择哪种分配方式是由JAVA堆是否规整决定,而JAVA堆是否规整则由虚拟机所采用的垃圾收集器是否带压缩整理功能决定. 我们不管内存分配采用何种方式,当内存分配完成后,虚拟机将分配到的内存空间都初

面向对象二 — — static、final、常量的初始化、this和super

一.static关键字 static :静态的--属于类的 动态的是属于对象的 注意: 属于对象的,那么每个对象都独有一份:属于类的,是所有的对象共有一份 static修饰方法: 凡是加了static的,都是属于类的,凡是属于类的,都是被所有的对象共享 访问方式: 对象.方法名(参数列表) 类名.方法名(参数列表)--推荐使用 总结: 1.静态的方法里面不能访问非静态的方法和属性 2.非静态的方法里面可以访问非静态的方法和属性以及静态的方法和属性 3.静态的方法只能访问静态的方法和属性 4.静态

java中static,super,final关键字辨析

1:static关键字 利:1)对对象的共享数据提供单独的空间存储. 2)修饰的方法可以直接被类名调用 弊:1)生命周期长. 2)访问出现限制(只能访问静态) 它可以有静态方法,静态类,静态变量 2:super关键字 1)使用super关键字调用父类的成员变量和成员方法. 格式1:super.成员变量 格式2:super.成员方法([参数1,参数2...]) 2)使用super关键字调用父类的构造方法 格式1:super([参数1,参数2...]) 总结:this代表当前对象(可以输出或地址).

关于static以及final关键字

Static关键字: 可以用来修饰类中的属性.类中的方法.以及具体的某一个类. 1.用于修饰属性: 则表示该属性属于整个类,不论有多少个对象实例,所有的实例共同拥有一个static静态的成员变量.该变量属于整个类,而并非是某个具体的实例,直接通过类名就可以访问对应的成员变量. 2.用于修饰方法: 用static修饰的方法称为静态方法,被修饰的静态方法可以通过一个实例来直接进行方法调用,也可以通过类名来直接调用类的静态方法. 关于静态方法的继承问题: 静态方法是可以被继承下来的,但是静态方法的子类

Java之static与final关键字

static关键字:可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类 static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量:一个对象对该静态成员变量进行了修改,其他对象的该静态成员变量值也会随之发生变化,如果一个成员变量是static的,那么我们可以通过类名.成员变量名来的方式来使用它(Java推荐使用这种方式) package com.yuanzijian01; class MyStatic{    static int a; } public c

static和final关键字

static: 我们在两种特殊的情况下会使用static关键字: ①我们想用一个存储区来保存一个特定的数据,无论要创建多少个对象,或者根本不创建对象. ②我们需要一个特殊的方法,这个方法没有与类的任何一个方法相关联. public class StaticInJava { static int i = 47; static void staticTest(){ StaticInJava.i++; } } final: 在谈final之前,我们首先谈下“常数”的概念: ①编译期常数,永远不会改变.

super 、static、final关键字加深记忆哦!还有父子类构造函数调用问题

使用super关键字可以直接调用父类中的构造方法.属性.普通方法 super调用父类构造方法的操作,与this调用构造方法一样,语句必须放在子类构造方法的首行 java中,构造函数不被继承,只是调用,如果父类有无参构造函数,子类可以写构造函数也可以不写构造函数,如果父类只有带参构造函数,那么子类必须也要写一个构造函数,并且调用父类构造函数在函数第一行.原因大致是因为,构造子类时都是需要先调用父类构造函数的,若父类没有了默认构造函数,子类声明调用自己的构造函数时就有问题了,所以此时(父类只有带参构