java中的static和final

 

         如图所示,java中的静态属性肯定是公有属性,定义格式:stataic 数据类型 <属性名>。访问静态属性用类名.属性名访问,存储在方法区中。但普通属性可以是任意的,调用访问:对象名.属性名。存储在堆中。

静态方法也是公有方法,定义格式:static 返回值类型 <函数名>。访问时格式:类名.方法名。静态方法只能访问静态属性和静态方法。但普通方法全部都可以访问。

Java中有一些static块和普通块。static格式:static{}。普通块格式:{}。static块一般类构建完成就调用一次。假如static块在Student类中,java中的JVM 构造Student类完成,就会调用一次static块。普通块创建几个对象就会被调用几次。比如Student 类中有一个普通块,我再这个类中创建了两个对象,执行程序时就会调用两次普通块。

java中的final表示唯一的,不变的。如果用final修饰属性,这个属性肯定是常量,而且必须赋初始值,属性的字母为大写。若用final修饰属性,这个属性的值不能被更改。一般的话如果用final修饰属性,需要把用static修饰。因为如果创建多个对象,太占用内存。

final如果修饰方法,这个方法就不能被重写了。

final如果修饰类,这个类就不能被继承。

java中一般也可以用import导入静态属性和方法,使用时可以不写类名直接调用。

package www.lyc;

public class Student {
    //静态块 构造类完成调用一次
    static {
        System.out.println("ddd");
    }
    //初始化块,每创建一次对象就调用一次
    {
        System.out.println("eee");
    }
    public static String classname;
    private int id;
    private String name;

    public Student() {
    }

    public Student(int id, String name) {
        this.id = id;
        this.name = name;
    }
    public static void staticmethod1(){}
    public static void staticmethod(){
        //静态的只能调用静态的
        classname="117";
        staticmethod1();
    }
    public void method(){
        //普通的可以调用全部
        name="zhangsan";
        id=1;
        staticmethod();
        staticmethod1();
        classname="117";
    }
}
package www.lyc;
public class Test {
    public static void main(String[] args) {
        //调用静态属性  类名.属性名
        Student.classname ="2007";
        Student s1 =new Student(1,"zhangsan");
        //调用普通方法,对象名.属性名
        Student s2 =new Student(2,"lisi");

    }
}
package www.lyc;
import static www.lyc.Student.*;
import static www.lyc.Student.classname;
import static www.lyc.Student.staticmethod1;
public class Teacher {
    public void sayHello(){
        staticmethod1();
        classname="2007";
        Student.staticmethod();

    }
}
package com.lyc;

public class Father {
    public final float PI =3.14f;

}
package com.lyc;

public final class Father1 {
}
package com.lyc;

public class Test1 {
    public static void main(String[] args) {
        Father S1 = new Father();
        final int a =14;
        //a =13;final 是常量,不能改变值
    }
}
package www.lyc;

import com.lyc.Father;

public class Son extends Father {
}
package www.lyc;

import com.lyc.Father1;
//final  定义的类不能被继承
//public class Son1 extends Father1 {
//}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

diary_chao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值