[HeadFirst] Static Memeber Final Rules

2024-06-13 15:32

本文主要是介绍[HeadFirst] Static Memeber Final Rules,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. Static Member

static kw标记出不需要类实例的方法。一个静态方法代表说“一种不依靠实例变量也就是不需要对象的行为”。

静态变量 - 静态方法

实例变量 - 实例方法(这里的实例指的是只能通过实例访问的非静态的变量和方法)


1.1 静态方法不能调用实例变量(非静态的变量)

静态的方法是不知道堆上有哪些实例的,因为静态方法没有维护一个对象的引用(即指向堆对象的指针)。

1.2 静态方法也不能调用实例方法(非静态的方法)

non-static method cannot be referenced from a static context.


1.3 静态变量可以被实例方法调用

因为,静态变量是全局变量,为所有实例共享(同一类所有的实例共享一份静态变量),对所有实例可见且值是相同的。


静态变量是在类被加载时初始化的。JVM load 通常是因为第一次有人尝试要创建该类的新实例,或是使用该类的静态方法或变量。

静态项目的初始化欧两项保证:

1. 会在该类的任何对象创建之前就完成了初始化。

2. 会在该类的任何静态方法执行之前就初始化。


如果没有给静态变量赋值(只有static kw,而不是static final的),它就被设定为默认值。


2. 静态的final变量是常数

静态变量的名字应该都是大写字母

2.1 static initializer(静态初始化程序),是一段在加载类时会执行的程序代码,它会在其他程序使用该类之前就执行,所以很适合放静态final变量的起始程序。

如:

public class Foo {final static int x;static {x = 42;}
}

上面的static {}就是 static initializer

因此,有两种方式可以初始化static final变量。

第一种就是上面的,第二种就是在声明的时候同时初始化。


注意: 

static还可以用在import语句中,方便引用imported class的实例,例如:

<pre name="code" class="html">import static java.lang.System.*; // new kind of import statement
...
    public static void testTry_catch_finally(){
        try {
            out.println("try block");
            throw new IOException("Test: try-catch-finally");
//            out.println("Exception occurs. Never invoked"); // Java compiler error: unreachable statment
        } catch (IOException e){
            err.println(e.toString());
//            return;
            System.exit(-1);
        }finally {
            out.println("finally block");
        }
    }

 

像上例中,如果频繁引用对象err,out那么就可以使用import static的语法,否着就没有必要了。

2.2. final 的用处

1. static final variable --- 声明常数(如上)

2. non-static final variable --- 表示其值不能被修改

3. final method --- 表示该方法不能被override, 但是可以被overwrite。

        覆盖Override) :若是在父类中调用的办法,在子类中覆盖了这个办法,那么在,在父类调用的办法,其实就是子类的办法。

        覆盖Overwrite):改写现存的文本,删除用新的文本替代现存的文本。

4. final class ---  表示该类不能被继承 

如String

public final class Stringimplements java.io.Serializable, Comparable<String>, CharSequence {

如果一个类被标记为final class,那么类的方法就没有必要再加上final了。

final public class Foo { // non-extendedfinal int x = 3; // 不能不修改,但每个实例都有属于自己的一个。所以更多倾向于将其声明为static final的变量final void testFinal(){ //non-override//...}final static int CONST; // static final的变量,因为不可变,所以可以被所有实例共享static {CONST = 42;}   
}





这篇关于[HeadFirst] Static Memeber Final Rules的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057697

相关文章

native和static native区别

本文基于Hello JNI  如有疑惑,请看之前几篇文章。 native 与 static native java中 public native String helloJni();public native static String helloJniStatic();1212 JNI中 JNIEXPORT jstring JNICALL Java_com_test_g

java基础总结08-面向对象4(static关键字)

原来一个类里面的成员变量,每new一个对象,这个对象就有一份自己的成员变量,因为这些成员变量都不是静态成员变量。对于static成员变量来说,这个成员变量只有一份,而且这一份是这个类所有的对象共享。 静态成员变量与非静态成员变量的区别 以下面的例子为例说明 package cn.galc.test;public class Cat {/*** 静态成员变量*/private static

Flask 创建app 时候传入的 static_folder 和 static_url_path参数理解

Flask 在创建app的时候 是用 app = Flask(__name__) 来创建的,不传入 static_folder参数的话 ,默认的静态文件的位置是在 static目录下 我们可以进入 Flask的源码里面查看 ctrl+鼠标左键进入 这是Flask的 __init__源码(后面还有一些,我就选了需要的代码)     def __init__(self,import_

【0324】Postgres内核 Shared Buffer Access Rules (共享缓冲区访问规则)说明

0. 章节内容 1. 共享磁盘缓冲区访问机制 (shared disk buffers) 共享磁盘缓冲区有两套独立的访问控制机制:引用计数(a/k/a pin 计数)和缓冲区内容锁。(实际上,还有第三级访问控制:在访问任何属于某个关系表的页面之前,必须持有该关系表的适当类型的锁。这里不讨论关系级锁。) Pins 在对缓冲区做任何操作之前,必须“对缓冲区pin”(即增加其引用计数, re

C#static用法和扩展方法

一.static可用于修饰成员和类 1.1 静态成员 静态成员始终按类名(而不是实例名称)进行访问。 静态成员只有一个副本存在(与创建的类的实例数无关)。 静态方法和属性无法在其包含类型中访问非静态字段和事件,它们无法访问任何对象的实例变量,除非在方法参数中显式传递它。 更典型的做法是声明具有一些静态成员的非静态类(而不是将整个类都声明为静态)。 静态字段的两个常见用途是保留实例化的对象数的

【HDU】3986 Harry Potter and the Final Battle 最短路

传送门:【HDU】3986 Harry Potter and the Final Battle 题目分析:先求一次最短路,同时记录在最短路上的顶点以及以该顶点为弧尾的最短路上的边。然后枚举删除每一条边,分别求一次最短路,其中最大的即答案。当然不可达输出-1。 测试发现堆优化的dij不如slf优化的spfa。。可能图太稀疏了吧。。。反正我觉得我写的挺搓的了。。。 代码如下:

Java基础13 面向对象~static关键字和单例模式

超详细的Java知识点路线图 面向对象系列: 类和对象 封装 继承 多态 static关键字和单例模式 接口和内部类 前言 Hello,大家好,本章我们介绍两个知识点:static关键字和单例模式 static关键字 static的意思是静态,可以用来修饰类的属性和方法,一旦被static修饰的属性和方法,就会由类的所有对象共享,而不是属于某一个对象。 当某些属性和方法不想被对象调

JBoss AS 7.1.1.Final 安装

JBoss AS 7.1.1.Final下载地址:http://download.jboss.org/jbossas/7.1/jboss-as-7.1.1.Final/jboss-as-7.1.1.Final.zip localhost:9990/console 用户root 密码 1234 安装参考:http://my.oschina.net/thinker4self/blog/273527

Java进阶--static完全解析

前言 现在深深的感觉到写一篇好的博客十分不容易,static关键字的考点在各种笔试面试中会经常遇到,在写这篇博客之前我也是大量的阅读了相关的文献,争取从全局上对static做一个分析,这里的全局包括JVM(Java虚拟机),JMM(Java内存模型)等。 Java内存管理机制 在讲static关键字之前必须先了解Java的内存管理机制,下面先分析一下Java的内存管理机制。如果有兴趣可以看看

final_封装_多态_servletJAVA043-047

来源:http://www.bjsxt.com/ 1、S01E043_01final修饰变量、方法和类 (1)修饰变量:常量; (2)修饰方法:该方法不可被子类重写,但可以被重载; (3)修饰类:修饰的类不能有子类,不能被继承。如:Math、String。 2、S01E044_01面向对象三大特性之一:封装/隐藏(encapsulation) (1)封装的作用:隐藏对象内部的复杂性,只