Java入门第63课——static和final

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/houjunkang363/article/details/90669208

在教大家写的第一个Java程序HelloWorld中,很多同学问static是什么意思,本节课终于讲到了。

概要

1.1 static关键字

1.1.1 static修饰成员变量

1.1.2 static修饰成员方法

1.1.3 static块

1.2 final关键字

1.2.1 final修饰变量

1.2.2 final修饰方法

1.2.3 final修饰类

1.2.4 static final常量

博主点评

1.1 static关键字

1.1.1 static修饰成员变量

    · 用static修饰的成员变量不属于对象的数据结构;

    · static变量是属于类的变量,通常可以通过类名来引用static成员;

    · static成员变量和类的信息一起存储在方法区,而不是在堆中,一个类的static成员变量只有"一份",无论该类创建了多少对象。

static修饰成员变量(续1)

image.png

1.1.2 static修饰方法

    · 通常的方法都会涉及到对具体对象的操作,这些方法在调用时,需要隐式的传递对象的引用(this)。

    image.png

    · static修饰的方法则不需要针对某些对象进行操作,其运行结果仅仅与输入的参数有关,调用时直接用类名引用。

      double c=Math.sqrt(3.0*3.0+4.0*4.0);

       该方法在调用时,没有隐式的传递对象引用,因此在static方法中不可以使用this关键字。

static修饰方法(续1)

    · 由于static在调用时没有具体的对象,因此在static方法中不能对非static成员(对象成员)进行访问。static方法的作用在于提供一些“工具方法”和“工厂方法”等。

    ... ... ...
    Point.distance(Point p1,Point p2)
    RandomUtils.nextInt()
    StringUtils.leftPad(String str,int size,char padChar)
    ... ... ...
    Math.squr() Matn.sin() Arrays.sort()

1.1.3 static块

    · static块:属于类的代码块,在类加载期间执行的代码块,只执行一次,可以用来在软件中加载静态资源。

image.png

1.2 final关键字

1.2.1 final修饰变量

    · final关键字修饰成员变量,意为不可改变。

    · final修饰成员变量,两种方式初始化:

        声明同时初始化

        构造函数中初始化

    · final关键字也可以修饰局部变量,使用之前初始化即可。

    public class Emp{
        private final int no=100;//final变量声明时初始化
        public void testFinal(){
            no=99;
        }    //编译错误,final的变量不可被改变
    }

1.2.2 final修饰方法

    · final关键字修饰的方法不可以被重写。

    · 使一个方法不能被重写的意义在于:防止子类在定义新方法时造成的“不经意”重写。

image.png

1.2.3 final修饰类

    · final关键字修饰的类不可以被继承。

    final class Foo{}
    class Goo extends Foo{}    //会有编译错误

    · JDK中的一些基础类库被定义为final的,例如:String、Math、Integer、Double等等。

    · 使一个类不能被继承的意义在于:可以保护类不被继承修改,可以控制滥用继承对系统造成的危害。

1.2.4 static final常量

    · static final修饰的成员变量称为常量,必须声明同时初始化,不可被改变。

    · static final常量会在编译器被替换,例如:

    class Foo{
        public static final int NUM=100;
    }
    
    class Goo{
        public static void main(String[] args){
            System.out.println(Foo.NUM);
            //代码编译时,会替换为:System.out.println(100);
        }
    }

    static final常量Foo.NUM会在编译时被替换为其常量值(100),在运行Goo类时,Foo类不需要被载入。

博主点评:

static和final在写程序时经常会用到,static不要滥用,因为static存在堆中,生命周期长,占内存,要合理使用

如果内容对您有帮助,请打赏我吧,您的支持是我更新的最大动力!

扫描关注我吧:

猜你喜欢

转载自blog.csdn.net/houjunkang363/article/details/90669208
今日推荐