`
liumiao2011
  • 浏览: 52761 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转]Java中static、final用法小结

 
阅读更多

一、final

1.final变量:

      当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变。其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值。

     当函数参数为final类型时(例如:public foo(final int a, final int b){}),你可以读取使用该参数,但是无法改变该参数的值。

     另外方法中的内部类在用到方法中的参变量时,此参变也必须声明为final才可使用。

例如:

public class INClass{

   void innerClass(final String str){

        class IClass{

            IClass(){

                System.out.println(str);

            }

        }

        IClass ic=new IClass();

    }

  public static void main(String[] args){

      INClass inc=new INClass();

      inc.innerClass("Hello");

  }

}

 

2.final方法

     如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。 
使用final方法的原因有二: 
    第一、把方法锁定,防止任何继承类修改它的意义和实现。 
    第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。

3.final类

     final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。

二、static

      被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。 
      static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用(当然也可以在非静态成员方法中使用--废话),但是不能在其他类中通过类名来直接引用,这一点很重要。实际上你需要搞明白,private是访问权限限定,static表示不要实例化就可以使用。

     用static修饰的代码块表示静态代码块,当Java虚拟机(JVM)加载类时,就会执行该代码块

1.static变量

      按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是: 
    对于静态变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响(灵活)。

2.static方法

      静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和静态成员方法。因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract。

3.static代码块

      static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

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

分享到:
评论

相关推荐

    JAVA程序:接口小结

    2. **接口的成员变量默认为public static final**:接口中的变量自动被声明为公共(public)、静态(static)和常量(final)。这意味着你可以直接通过接口名访问这些变量,而无需创建接口的实例。 3. **多继承特性...

    Java面向对象重要概念小结.docx

    在Java 8之前,接口中的方法默认都是抽象的,但在Java 8之后,接口可以包含默认方法(带有实现的方法)和静态方法。接口可以使用`extends`关键字继承其他接口,但不能继承类。接口的主要目的是定义一个合同,规定...

    JAVA入门1.2.3:一个老鸟的JAVA学习心得 PART1(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    Java入门1·2·3:一个老鸟的Java学习心得.PART3(共3个)

    3.4 小结:基本数据类型—— Java中一切数据和运算的基础 63 3.5 习题 65 第4章 Java中的程序执行流程 67 教学视频:1小时57分钟 4.1 顺序执行 67 4.2 使用if-else让程序懂得判断 68 4.2.1 if语句 68 4.2.2 ...

    java笔试题小结

    ### Java笔试题小结 #### 1. Java 字符串(String) **问题**: String 类的特点是什么?与 StringBuffer 的区别? **分析与解答**: `String` 类在 Java 中是不可变的,即一旦创建了一个字符串对象,其内容就不能...

    Java反射机制学习总结

    这可以帮助我们了解类、方法或字段是否是public、private、static、final等。 4. 访问和修改私有成员: 反射机制能够访问和修改私有的类成员,虽然这是不推荐的做法,因为它破坏了封装性。使用`Field`对象的`...

    Java 语言程序设计:第5章接口多态.ppt

    5.7 本章小结 本章主要讲解了 Java 语言程序设计中接口和多态的概念、语法和应用。接口是一种抽象机制,提供了一种定义类之间的“协议”的方式,允许类之间实现多继承,同时免除 C++ 中的多继承那样的复杂性。多态...

    java基础入门教程

    网 络为中 心 的 计 算 时 代 转 移 ,而 购 买 Java则 是 他 的 重 大 战 略 决 策的实施 部 署 。因 此 ,Java的 诞 生 必 将 对 整 个 计 算 机 产 业 发 生 深远的 影 响,对 传 统 的 计 算 模型 提 出 了 新 的 ...

    RPG游戏开源开发讲座(Java篇)

    #### 四、小结 通过上述步骤,我们可以创建一个简单的RPG游戏地图,并利用Java Swing库来展示它。这仅仅是RPG游戏开发中地图构建的一个起点,实际应用中还需要考虑更多的细节,如地图的动态生成、地图编辑器的开发、...

    详解java接口、继承和多态

    #### 四、小结 - **接口**:定义了一组方法签名,由其他类实现具体的方法体。 - **继承**:支持代码复用,子类可以继承父类的属性和方法,并可以扩展或覆盖父类的功能。 - **多态**:允许父类引用指向子类对象,...

    Java学习精第5章ppt课件.ppt

    本章小结: * 接口是Java中的一个重要机制,用于实现多继承和定义共同行为。 * 接口的语法是声明格式为[接口修饰符] interface 接口名称 [extends 父接口名]{…//方法的原型声明或静态常量}。 * 实现接口需要使用...

    java私塾初级目录word

    5. **Java类的高级特性**:包括继承的运行顺序、super关键字的使用、递归、方法覆盖和重载、多态的深入理解、static修饰符(静态成员和静态方法)、final修饰符、内部类以及内存分配的讨论,特别是String类的特殊性...

    Java软件开发实战 Java基础与案例开发详解 6-8 接口 共10页.pdf

    在Java中,接口中的常量默认被`public static final`修饰,这意味着它们是公共的、静态的,并且不可修改。例如,下面的代码定义了一个包含圆周率的接口: ```java public interface MathConstant { double PI = 3....

    java实现MD5加密的方法小结

    Java实现MD5加密的方法小结主要介绍了Java实现MD5加密的方法,结合具体实例形式总结分析了Java实现MD5加密的常用操作技巧与使用方法。 MD5加密是一种常用的哈希加密算法,通过对数据进行哈希处理生成一个128位的...

    Java语言基础入门教程 Java实训教程 10.枚举与泛型 共27页.pptx

    **10.1.5 枚举小结** - 枚举是一种引用类型,因为它隐式继承自`java.lang.Enum`类。 - 枚举是JDK 5.0之后新增的特性,使用并不频繁。 - 枚举值是常量,具有默认的`public static final`修饰符。 - 使用枚举类型的...

    完整版精品java教程 清华大学新版Java课件 Java语言程序设计(第2版) 第5章 接口与多态(共89页).pptx

    接口中的方法默认是public和abstract的,数据成员默认为static和final,必须初始化且不可更改。 5.2 塑型(Polymorphism) 塑型是面向对象编程的核心特性之一,指的是一个接口可以被多种不同的对象响应。在Java中,...

    java基础案例与开发详解案例源码全

    3.7.6 循环语句小结78 3.7.7 break语句79 3.7.8 continue语句82 3.8 JavaDebug技术84 3.9 本章练习85 第4章 4.1 一维数组90 4.1.1 为什么要使用数组90 4.1.2 什么是数组91 4.1.3 如何使用数组92 4.1.4 经验之谈-数组...

Global site tag (gtag.js) - Google Analytics