Java中static final 与 final 的区别(转载)

  转自:http://advance0683.iteye.com/blog/1107732

Java中static final 与 final 的区别:

例子:

Java代码

    import java.util.Random;  

    //这个例子想说明一下static final 与 final的区别
    public class StaticAndFinalTest {  

        private static Random rand = new Random(47); //47作为随机种子,为的就是产生随机数。  

        private final int a = rand.nextInt(20);  

        private static final int B = rand.nextInt(20);  

        public static void main(String[] args) {
            StaticAndFinalTest sf = new StaticAndFinalTest();
            System.out.println("sf : " + "a=" + sf.a);
            System.out.println("sf : " + "B=" + sf.B);
            System.out.println("------------------------------");
            StaticAndFinalTest sf1 = new StaticAndFinalTest();
            System.out.println("sf1 : " + "a=" + sf1.a);
            System.out.println("sf1 : " + "B=" + sf1.B);
        }  

    }  

运行结果:

Java代码

    sf : a=15
    sf : B=18
    --------------
    sf1 : a=13
    sf1 : B=18  

可以看到,在sf和sf1对象中,a的值不是唯一的,但B的值是不会通过创建sf1对象而改变。这是因为它是static,在装载时已被初始化,而不是每次创建新对象时都初始化。

时间: 2024-12-22 20:49:19

Java中static final 与 final 的区别(转载)的相关文章

Java中Static关键字和Final关键字

Static: 1. 在变量,方法前修饰表示静态方法,静态变量. 2. static{ } 此种形式为静态代码块,用于初始化同时被final static修饰的变量.(当然,更常用的方式其实是在变量处直接赋值) 静态代码块的内容会被直接在类加载时运行 package com.main; /** * Created by 63289 on 2017/3/19. */ public class HelloJava { static{ System.out.println("This line wil

关于java中的形参和实参的区别-----转载

首先纠正下java2000的第一个错误说法:"java里不叫这个,而是叫传值和传对象.".引用jiabobber的话:形参就是形式上的参数啊,实参就是实际的参数啊,其实各种语言形参实参都一样的概念的吧. jiabobber的这句话是对的,实参,形参是程序设计语言中的通用概念,并不是只有C,C++有而JAVA没有,也不叫传对象; 直白的讲,形参是形式上的参数,实参是实际的参数;形参只是对实参的一种抽象类型描述,只是声明一个函数(方法)能接受什么类型的实参,而不确定接受的实参具体内容是多少

Java中long和Long有什么区别 (转载)

“Long is a class. long is a primitive. That means Long can be null, where long can't. Long can go anywhere that takes an Object, long can't (since it isn't a class it doesn't derive from Object). Java will usually translate a Long into a long automat

java中static、final、static final的区别

final可以修饰:属性,方法,类,局部变量(方法中的变量) final修饰的属性的初始化可以在编译期,也可以在运行期,初始化后不能被改变. final修饰的属性跟具体对象有关,在运行期初始化的final属性,不同对象可以有不同的值. final修饰的属性表明是一个常数(创建后不能被修改). final修饰的方法表示该方法在子类中不能被重写,final修饰的类表示该类不能被继承. 对于基本类型数据,final会将值变为一个常数(创建后不能被修改):但是对于对象句柄(亦可称作引用或者指针),fin

Java中static、final用法小结(转)

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

Java中static、final用法小结

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

java中的hashcode和euqals的区别和联系

一.equals方法的作用 1.默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一个地址(是不是同一个对象). 2 .要是类中覆盖了equals方法,那么就要根据具体的代码来确定equals方法的作用了,覆盖后一般都是通过对象的内容是否相等来判断对象是否相等. 没有覆盖equals方法代码如下: [java] view plaincopy //学生类 public class S

JAVA中extends 与implements有啥区别?

JAVA中extends 与implements有啥区别?1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口.extends 是继承某个类, 继承之后可以使用父类的方法, 也可以重写父类的方法; implements 是实现多个接口, 接口的方法一般为空的, 必须重写才能使用2.extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,JAVA中不支持多重继承,但是可以用接口

Java中针对 ArrayList和LinkedList 的区别

一般大家都知道ArrayList和LinkedList的大致区别:      1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.      2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针.      3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据. ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用