java基础关键字之Static和final

1 Static 关键字

2初始化块

2 Final关键字

关键词static

class Circle {

    private double radius;

    public Circle(double radius)
    {this.radius = radius;}

    public double getArea()
    {return Math.PI *radius*radius;}
}

Circle c1 = new Circle(2.0);

Circle c2 = new Circle(3.0);

在上面的例题中radius是一个实例变量(instance variable

他属于类的每一个对象,不能被同一个类的不同对象所共享。

c1 的radius 独立于c2 的radius,存储在不同的空间。两者不会影响。

如果想让一个类的所有实例共享数据,就用类变量 static 修饰。

类变量 类方法 的设计思想

类变量作为该类各个对象之间共享的变量。
【设计时,分析哪些类变量不因对象的不同而改变,并将这些属性设置为类属性。方法同理。】

如果方法与调用者无关,则这样的方法通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用。

在java 类中 可以用static 修饰属性,方法,代码块,内部类。

被static修饰的成员具备以下特点

1随着类的加载而加载

2优先于对象存在

3修饰的成员被所有的对象共享

4访问权限允许时,可以不创建对象,直接被类调用

在static 方法中只能访问类的static属性,不能访问类的非static属性。

因为不需要实例化对象就可以访问static方法,因此static方法内部不能有this。

重载的方法需要同时为static或者非static。

初始化块

对java对象进行初始化。程序的执行顺序

1声明成员变量的默认值

2 显式初始化块,多个初始化块依次被执行,(同级别,按先后顺序执行,静态代码块 优先于 非静态代码块)

3构造器对成员进行赋值操作。

一个类中初始化块若有修饰符,那么只能被static修饰。称为静态代码块。static block,若没有修饰符,则称为 非静态代码块。

当类被载入时,类属性的声明和静态代码块 先后顺序地被执行且只被执行一次。

初始化块 (非静态代码块 没有static修饰符修饰,和静态代码块 static 修饰)

非静态代码块

1 可以有输出语句

2 可以对类的属性 类的声明进行初始化操作

3 可以调用静态的成员

4 若有多个非静态的代码块,按从上到下的顺序执行

5每次创建对象的时候都会执行一次。且先于构造器执行。

静态代码块

1可以有输出语句

2 可以对类的属性 类的声明进行初始化操作

3 不可以对非静态属性进行初始化。

4 若有多个静态代码块 按照从上而下的顺序执行

5静态代码快的执行要先于非静态代码块

6静态代码块只执行一次

一个老生常谈的问题:类的加载顺序,尤其在添加了静态代码块,构造代码块(即普通代码块,之所以叫构造代码块因为该代码块优先于构造器方法执行,并且没调用一次构造器它都会去执行一次,跟静态代码块不一样,记住静态代码块只加载一次)
尤其在添加了继承关系的时候,加载顺序是这样的:
被static修饰的是随类的加载而加载的,而父类优先于子类,所以首先加载的是父类的静态代码块,然后是子类的静态代码块。
其次加载的是构造代码块以及构造器,此处是先加载父类的代码块以及构造器,然后是子类的代码块以及构造器。


final 关键字

在java中可以使用final来修饰 类,属性和功能。

1 final类不能被继承 提高程序的安全性和可读性。

String类,System类,StringBuffer类

2 final修饰的方法不能被子类重写,可以被继承。

Object 类中的getClass()

3 final 修饰的变量(成员变量 和局部变量) 又称常量

标识符 大写 而且只能被赋值一次

(final 标记的成员变量必须在声明的同时,或在每一个构造器中或代码块中 显式赋值 ,然后才可以使用)

针对引用型变量使用了final修饰,实际上只是修饰其引用的值不能改变,至于该引用指向的对象,内容是否改变,与其修饰符本身则无关。

final StringBuffer strConst = new StringBuffer();

strConst.append(“abc”);可以修改引用指向的对象的内容

strConst = null;不能修改其引用的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值