static和final关键字总结(转)

el/2024/4/13 14:05:30

一、final 
关键字final有“无法改变的”或者“终态的”含义,它可以修饰非抽象类、非抽象类成员方法和变量。

final类不能被继承,没有子类,final类中的方法默认是final的。
final方法不能被子类的方法覆盖,但可以被继承。
final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
final不能用于修饰构造方法。
注意:父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。
1、final类
      final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被扩展,那么就设计为final类。
2、final方法
    如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。 使用final方法的原因:把方法锁定,防止任何继承类修改它的意义和实现。
3、final变量(常量)
    用final修饰的成员变量表示常量,值一旦给定就无法改变!
final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。
    另外,final变量定义的时候,可以先声明,而不给初值,这中变量也称为final空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化。但是,final空白在关键字final的使用上提供了更大的灵活性,为此,一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。

4、final参数
  当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。

二、static
    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块。
被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。
   用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。
     static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用),但是不能在其他类中通过类名来直接引用,这一点很重要。(***** private是访问权限限定,static表示不要实例化就可以使用*****)。static前面加上其它访问权限关键字的效果也以此类推。
      static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为:    a. 类名.静态方法名(参数列表...)          b.  类名.静态变量名
    用static修饰的代码块表示静态代码块,当加载类时,就会执行该代码块。
1、static变量
    按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。

    两者的区别是:对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问,当然也可以通过对象来访问。对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响。

2、静态方法
    静态方法可以直接通过类名调用,任何实例都可以调用,因此静态方法中不能用this和super关键字(注意哦~),不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联!因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。
3、static代码块
      static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

4、static和final一起使用
      static 和final一起使用来修饰成员变量和成员方法,可简单理解为“全局常量”!
对于变量,表示一旦给值就不可修改,并且通过类名可以访问。
对于方法,表示不可覆盖,并且可以通过类名直接访问。


http://www.ngui.cc/el/4967337.html

相关文章

Linux全套完整视频教程

该系列视频涉及Linux学习的方方面面,入门的、高级的、编程的、安全的,都有了,每一套都很完整。 LinuxCBT Classic Edition 详情:http://club.topsage.com/thread-223331-1-1.html LinuxCBT Classic Edition 75小时全程演练Red Hat Linux 9,该视频全套分10个模块,从基础到…

linux任务管理器top的使用(转)

直接在终端输入top命令就行 第一行,很容易看出来了吧 简单说一下load average: * * * 第一个数是:平均5分钟以内有多少进程在竞争CPU 第二个数是:平均10分钟以内有多少进…

centos5 设置静态IP

关于CENTOS更改自动获取IP为静态IP上网的方法 1.首先利用以下3个命令来查看自己机器的一些网络信息: ifconfig 可以查看网络设备及IP地址,子网掩码等信息 route 可以查看路由信息 DNS直接查看文件:[rootkcn-110mw]#c…

JVM的垃圾回收机制详解和调优(转)

1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存。java语言并不要求jvm有gc,也没有规定gc如何工作。不过常用的jvm都有gc,而且大多数gc都使用类似的算法管理内存和执行收集操作。 在充分理解了垃圾收集算法和执行过程后…

GRUB引导故障排除(转)

GRUB引导故障排除 在工作和教学中,经常发现同事和同学在碰到Linux启动直接进入GRUB界面但没有启动选单(只剩下一个“grub>”提示符)的状况,这时就认定系统已经没救,开始重新安装,甚至包括一些接触Linux…

Linux系统文件目录简介

一、简介: Linux操作系统中,以文件来表示所有的逻辑实体与非逻辑实体。逻辑实体系指文件与目录; 非逻辑实体则泛指硬盘、终端机、打印机等。 一般而言,Linux文件名称的组成除由连续字母、标点符号、数字等构成外,中间不能有空格符、路径名称符号 / 或 # * % & {} [] …….…

CentOS5.3下源码编译安装XEN3.4.2虚拟机

如果你对VMware很熟悉,那么你一定很想了解大名鼎鼎的XEN和KVM,XEN是20多年前由剑桥大学开发的,现在属于思杰公司(Citrix),其目前最新版本是3.4.2,而KVM是新崛起的新星,是XEN不容忽视的强有力的竞争对手,呵呵…

JVM中的数据类型、堆与栈介绍

数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对…

java中设置无参构造函数的必要性

先看一下的java代码:class Person { private String name""; private int age0; public Person() { System.out.println("person无参数构造函数"); } public Person(String name,int age) { this.namename; this.ageage; Sys…

CentOS5.3源配置

说明: CentOS 的网络源配置文件是:/etc/yum.repos.d/ 下的 CentOS-Base.repo。 配置方法: 配置方法一般是: ① . 进入到repos.d 目录 $ cd /etc/yum.repos.d ② . 备份原来的源 $ mv CentOS-Base.repo CentOS-Base.r…