类成员(static)和final修饰符

在Java类里只能包含成员变量、方法、构造器、初始化块、内部类(包括接口、枚举)5种成员,类成员是用static来修饰的,其属于整个类。

当使用实例来访问类成员时,实际上依然是委托给该类来访问类成员,因此即使某个实例为null,它也可以访问它所属类的类成员。

public class NullAcessStatic {
    public static void test()
    {
        System.out.println("static修饰的类方法");
    }
    public static void main(String[] args) {
        NullAcessStatic na = null;
        na.test();
    }
}

编译、运行正常。表明null对象可以访问它所属类的类成员。
对static关键字而言,一条重要的规则:类成员(方法、初始话块、内部类)不能访问实例成员(方法、成员变量)。

单例类

class Singleton
{
    private Singleton(){}
    private static Singleton instance;
    static Singleton getInstance()
    {
        if(instance == null)
            instance = new Singleton();
        return instance;
    }
}
public class SingletonTest {
    public static void main(String[] args) {
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        if(s1.equals(s2))
            System.out.println("s1==s2");
        else
            System.out.println("s1!=s2");
    }
}

我们可以看到两次产生的Singleton对象实际上是同一个对象。

final修饰符

final修饰的变量不可被改变,一旦获得初始值,该final变量的值就不能被重新赋值。Java语法规定,final修饰的成员变量必须由程序员显式地指定初始值。指定的位置如下:

1、类变量:静态初始化块中指定初始值或者声明该类变量时指定初始值;

2、实例变量:必须在非静态初始化块、声明该实例变量或者构造器中指定初始值;

final修饰基本类型变量和引用类型变量的区别

当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变。但对于引用类型变量而言,它保存的仅仅是一个引用,final只保证这个引用类型变量所引用的地址不变,即一直引用同一个对象,但这个对象完全可以发生改变。

时间: 2024-10-10 07:16:25

类成员(static)和final修饰符的相关文章

JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配

Java栈与堆 堆:顺序随意 栈:后进先出(Last-in/First-Out). Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和multianewarray等指令建立,它们不需要程序代码来显式的释放.堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据.但缺点是,由于要在运行时动态分配内存,存取速度较慢. 栈的优势是

Java类和类成员的访问权限修饰符

一:访问修饰符: 1.省略访问修饰符 具有默认的访问特性,即具有包访问特性,只能被同一个包中的类使用. 2.public访问修饰符 用于说明类和类的成员的访问权限.这种类叫公有类.在一个文件中只能有一个public类型的类. 例如:Rect和UseImport两个类,分别在两个不同的包中.顺便回顾一下不同类要用import导入.(哎,一直就没记住) //Rect.java pacakage my; public class Rect { private int a,b; public void

static与final修饰符

static 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量. static变量前可以有private修饰,表

static、final修饰符

1.static基本概念:static被称为静态,可以用来修饰类的属性或者方法. 2.static的定义:static属性可以使用对象调用,也可以直接用类名调用. 3.static的属性:public class Employee { private String name ;//声明变量 private double salary;  private static int count; } 4.static的方法:static方法可以使用对象调用,也可以直接用类名调用,建议用类名直接调用. 例

static修饰符与final修饰符

■ static修饰符与final修饰符: ★ static修饰符: 1. 修饰的对象: 类中的成员(属性[静态变量或类变量]和方法[静态方法或类方法]) 2. 静态属性的特点: 1. 静态变量被所有对象共享 2. 随着类的加载而加载,随着类的消失而消失,和对象的创建无关 3. 可以直接被类名调用 3. 静态方法的特点: 1. 静态方法优先于对象存在,在静态方法中无法访问与对象相关的实例变量(这时候对象还没有创建,其属性也就没有) 2. 静态方法无法访问实例变量 3. 静态方法可以访问静态变量

final修饰符(6)-final类

final修饰的类不可以有子类,例如:java.lang.Math类就是一个final类,它不可以有子类 子类继承父类,可以访问父类的内部数据,可以重写父类的方法来改变父类方法的实现细节,可能导致不安全因素:为了保证某个类不可被继承,则可以使用fianl修饰这个类, 代码示例: public final class FinalClass{} //下面的类定义将出现错误 class Sub extends FinalClass{} FinalClass为final类,不能被继承,编译错误 ====

静态修饰符static,类中的常量定义修饰符

static可以用来区分成员变量.方法是属于类本身还是属于类实例化后的对象.有static修饰的成员属于类本身,没有static修饰的成员属于类的实例. 静态变量仅在局部函数域中存在,但当程序执行离开此作用域时,其值并不丢失static是一个修饰符,用于修饰成员(成员变量和成员函数)静态成员随着类的加载而加载.静态成员优先于对象存在.静态成员被所有对象所共享静态成员多了一个中调用方式,可以被类名直接调用.静态的优缺点优点: 静态成员多了一种调用方式.可以直接被类名调用 格式 :类名.静态成员.也

final修饰符

final修饰变量时,表示该变量一旦获得了初始值就不可改变, 由于final变量获得初始值之后不能被重新赋值,因此final修饰成员变量和修饰局部变量时有一定的不同. 5.4.1final成员变量 成员变量是随类初始化或对象初始化而初始化的, 当类初始化时,系统会为该类的类变量分配内存,并分配默认值: 当创建对象时,系统会为该对象的实例变量分配内存,并分配默认值. java语法规定:final修饰的成员变量必须由程序员显式地指定初始值 归纳: final修饰的类变量,实例变量 能指定初始值的地方

Java中的final修饰符

1.什么时候可以选择final修饰符 如果想让一个类不被其他类继承,不允许在有子类,这时候就要考虑用到final来修饰. 2.用final修饰的类 首先大家要明白,用final修饰的类是不能被继承的,下面来看一个错误案例. eg: final class Penguin { } class SubPenguin extends Penguin { } 此时这段代码的class SubPenguin extends Penguin这行代码会报错: The type SubPenguin canno