static与final关键字

Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。

1、修饰类:  当用final修饰一个类时,表明这个类是最终类,不能被继承。如果一个类你不想让它被继承,就可以用final进行修饰。

2、修饰方法:使用final修饰的方法不能被子类重写。(最终方法)

3、修饰变量: 对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

final修饰的变量,是常量,一旦初始化后,它的值不能被修改,即不能被重新赋值,主要是项目中应用的常量的抽取:比如URL常量、路径常量、数字常量.不能让人轻易修改。

 

注意: final作用于类的成员变量时,成员变量(注意是类的成员变量,局部变量只需要保证在使用之前被初始化赋值即可)必须在定义时或者构造器中进行初始化赋值,而且final变量一旦被初始化赋值之后,就不能再被赋值了。


 public static final String URL_GET = "/Api/GetMaintenanceType.html";//保养列表

————————————————————————————————>

Static关键字:  只能用于修饰成员变量和成员方法。

Static修饰的成员变量就成了类变量,随着类的加载而加载,生命周期和类一样

Static修饰的成员方法变成了类方法,可以直接通过类名调用。和.class一样存在于方法区。

非静态的成员方法与成员变量的调用,只能通过创建对象调用。类名.方法名等;而静态的成员可以通过类名和创建对象调用(尽量用类名调用,不要创建对象)。

 

被修饰的成员有以下特点:

1)随着类的加载而加载、

2)优先于对象存在、

3被所有对象所共享(比较节约空间)、(可以用代码证明)

4)可以直接被类名调用, Constant.BASE_URLNetManager.getData();

 

注意事项:

1)静态方法只能访问静态的成员变量,不能访问非静态的成员变量。 为什么?因为静态成员先于对象存在,比对象先创建。当静态成员存在时,对象还没有创建。他们的生命周期不一样。但是非静态的可以访问静态的。

2)静态方法中不可用this/super关键字。为什么:this指向调用本方法的对象的引用(对象还没有创建呢)

static修饰的成员变量、成员方法和类同时进行加载到内存,所以优先于对象存在。

 

一般在工具类中使用静态、static

类是什么时候加载到内存的?  对象是什么时候加载到内存的?

 

内存分区图:

堆内存:  用于存储对象

栈内存:  用于存储基本类型变量区,使用完成后,所占空间会自动释放。

方法区: 
1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。 
2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

静态成员与非静态成员的区别

生命周期:

静态成员随着类的加载而加载,随着类的消失而消失,生命周期长;

普通成员随着对象的存在而存在,随着对象的消失而消失。

存放位置:静态成员存在于方法区中,非静态成员存在于堆中。


static对性能的影响:

为什么说static块可以用来优化程序性能,是因为它的特性:只会在类加载的时候执行一次

static final用来修饰成员变量和成员方法,可简单理解为“全局常量”!  常量必须要加static关键字修饰 

static就是静态变量,声明为static的变量实质上就是全局变量,如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象



内部类 viewHolder需要加static,下面这种写法影响性能
    class ViewHolder {
        TextView item_by_text1,item_by_text2;
    }
没有必要时请不用使用静态变量,生命周期比较长,不能被回收,占用内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值