`

final和static浅析

    博客分类:
  • java
阅读更多
final
通常代表“这是无法改变的”。
一般使用到final的有三种情况:数据,方法,类。

final数据
final数据表示一个常量,一旦被初始化,就不能被改变。
若修饰域变量,则必须在域的定义处或者每个构造器中对final进行赋值(java中允许出现“空白final”,即被声明为final但是又没有给定初始值的域)。
对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象,但是对象本身是可以被改变的。


final方法
final修饰方法,可以阻止任何子类修改该方法,并且不能被覆盖。

final类
当将某个类定义为final时,该类就不能被继承。
final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。


static

static方法
static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

static变量
static变量也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。
static成员变量的初始化顺序按照定义的顺序进行初始化。
static是不允许用来修饰局部变量。

static代码块
static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
分享到:
评论

相关推荐

    浅析对Java关键字final和static的理解

    在Java编程语言中,`final`和`static`是两个非常重要的关键字,它们分别用于定义不同类型的特性。下面我们将深入探讨这两个关键字的含义和用法。 首先,`final`关键字在Java中具有三个主要用途:修饰类、方法和变量...

    深入浅析Java中的final关键字

    此外,`final`类成员变量如果是`static`类型的,它将在类加载时初始化。 2. 编译期常量 对于`final`修饰的基本类型和`String`类型的变量,如果它们的值在编译时就能确定,编译器会将其视为编译期常量。这意味着...

    浅析java 的 static 关键字用法

    public static final String INNER_TEXT = "Inner Text"; } } // 使用静态内部类 String innerText = OuterClass.InnerStaticClass.INNER_TEXT; ``` 5. 静态导包 静态导入允许你在代码中直接使用其他类的...

    深入Java单例模式浅析

    private static final SingletonClass instance = new SingletonClass(); public static SingletonClass getInstance() { return instance; } private SingletonClass() {} } ``` 2. 性能优化——延迟加载...

    浅析Java抽象类和接口的比较.docx

    - **接口 (Interface)**: 接口则只能包含抽象方法(默认为 `public abstract`)和常量(静态最终变量,`static final`)。接口的定义如下: ```java interface DemoInterface { void method1(); void method2()...

    Java类加载原理浅析

    注意,这里只是分配内存,静态变量的初始值设定(如final static)会在初始化阶段进行。 4. **解析**:将符号引用转换为直接引用。符号引用是编译时期的,而直接引用是运行时可以定位到的,比如类的直接引用就是...

    Kotlin中单例模式和Java的对比浅析

    Kotlin 中单例模式和 Java 的对比浅析 Kotlin 中单例模式是指在应用程序中确保某个类仅有一个实例,并提供一个全局访问点的机制。单例模式是一种常用的设计模式,在 Java 和 Kotlin 中都有多种实现方式。下面我们将...

    浅析Java抽象类与接口的区别.zip

    1. **结构**:抽象类可以包含字段、构造器、非抽象方法以及抽象方法,而接口只能包含方法签名、常量(实际上就是public static final字段)。 2. **多重继承**:Java中,类只能单继承,即一个类只能有一个父类,但...

    深入浅析ArrayList 和 LinkedList的执行效率比较

    本文将深入浅析 ArrayList 和 LinkedList 的执行效率比较,帮助开发者们更好地选择合适的数据结构。 一、概念 ArrayList 是一个基于数组的 List 实现,允许快速访问元素,但是在从列表中部插入和删除元素时,速度...

    在Android打包中区分测试和正式环境浅析

    public static final boolean EXTERNAL_RELEASE = true; 当变量为true的时候,就是正式包,反之就是测试包。每次上线的时候我就提醒自己要小心,千万不能出错了,然而终于湿脚了,一个渠道打包的时候,给忘记修改...

    Java中的四种单例模式浅析

    private static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } ``` 2. **懒汉式**: 懒汉式单例在首次调用 `...

    java变量的区别浅析

    根据不同的使用场景和特性,Java中的变量可以分为三类:类变量(静态变量)、实例变量(对象变量)和常量。下面我们将深入探讨这些变量的区别。 1. 类变量(静态变量) 类变量使用`static`关键字修饰,它在类加载时...

    浅析Java设计模式编程中的单例模式和简单工厂模式

    private static final Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance() { return instance; } } ``` 而懒汉模式则是在首次调用`getInstance`时才创建...

    浅析Java中的 new 关键字

    private static final Singleton INSTANCE = new Singleton(); } // 3. 提供静态方法获取唯一实例 public static Singleton getInstance() { return SingletonHolder.INSTANCE; } } ``` 这种实现方式保证了...

    浅析KJFrameForAndroid框架如何高效加载Bitmap

    然而,由于内存限制,直接加载大尺寸的Bitmap可能导致内存溢出(OOM)异常,因此高效地加载和管理Bitmap至关重要。KJFrameForAndroid是一个开源的Android应用开发框架,它提供了一种优化的Bitmap加载策略来避免此类...

    浅析Android Service中实现弹出对话框的坑

    `private static final int REQUEST_CODE = 1; private void requestAlertWindowPermission() { Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION); intent.setData(Uri.parse("package:...

Global site tag (gtag.js) - Google Analytics