在Java中,为什在定义常量中要加修饰符final?到底起什么作用呢,能不能不加?
变量定义加入了final,即为常量。
对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。
如果不加入的话,则会引起变化,在编译阶段无法检查出来错误。
Java里static作用有哪些?
Java基础内容里static占据着重要的篇幅,虽然开发中使用static的机会并不多,但是对于static的理解对掌握Java语言却很重要,尤其在资源加载的过程中。
对于static的理解分为两个层面,第一个层面就是关于static在JVM中的定义,第二个层面就是关于static在代码编写中的规则。
static在JVM中的定义决定了static在使用过程中的特点,关于staic在JVM中的定义主要就是存储区域的定义,这是导致一系列static应用特征的根本原因(关于JVM的存储方式的描述我在之前的文章中已经阐述过了,在此就不再赘述,感兴趣的朋友可以关注我并查看之前的文章)。
static在编程中的规则是每个Java程序员都应该掌握的,简单的说可以分成4个部分,下面分别做一个描述。
第一部分:static修饰属性。static修饰的属性称为静态属性或者是类属性,有以下几个特点:
static只能修饰成员属性,不能修饰局部属性。
static修饰的属性能够在同一个类的对象间共享。
static修饰的属性随着类的加载而加载,可以用类名直接访问。
看一个例子:
第二部分:static修饰方法。static修饰的方法称为类方法或静态方法,有以下几个特点:
static方法可以通过类的名字直接访问。
static方法无this,也就是说在static方法中不能使用this关键字。
static方法不能被非static方法覆盖。
static方法不能直接访问外部非static方法或属性。
看一个例子:
第三部分:static修饰类。static可以修饰内部类,使用static修饰的内部类自动升级为顶级类,可以直接创建对象并可以在其内部定义static方法。看一个例子:
第四部分:static修饰块。static块随着类的加载而加载,但是只加载一次,是一种介于构造方法和普通方法之间的一种应用。看一个例子:
通过以上的描述,相信大家对static的使用已经有了一个大致上的理解,有一点需要注意,那就是在Web开发中,一定要慎用static修饰符。
我使用Java多年,也出版过Java编程书籍,我会陆续在头条写一些关于Java开发方面的文章,感兴趣的朋友可以关注我,相信一定会有所收获。
如果有Java开发方面的问题,也可以咨询我。
谢谢!
谢邀~
和大家分享一下我对Java中static关键字的理解(赶时间的同学直接看加粗的字儿)。
什么是static
static作为Java一个重要的关键字,主要的作用是:可以在没有创建对象的情况下来进行访问或调用(变量、方法)。
static关键字可以减少成员变量和方法的多次创建,当方法或者变量被static修饰之后,就不需要依赖于对象进行访问了,只要类被加载,那么就可以通过类名进行访问,如:类名().变量名。
static修饰变量
有人喜欢把static修饰的变量称作全局变量,但实际上,Java中不存在全局变量这个概念(在别的文章里,有人说我喜欢咬文爵字,但我觉得有些概念还是说清楚比较好)。
全局变量应该拿着变量的名字就能使用的,但是Java中都是:类名().变量名;这样使用的;
当JVM加载一个类的时候,如果这个类存在static修饰的变量或方法,则会为这些变量或方法在内存中固定的位置开辟一个固定大小的区域,因为这些“固定”,所以看起来是全局的。
static修饰方法
被static修饰的方法,我们一般称作静态方法。
类名().方法();也就避免了new对象资源消耗;
静态方法不依赖对象就能访问,因此对于静态方法是没有this的;
静态方法中不能访问非静态变量和非静态方法。
静态代码块
如果一些代码需要在项目启动的时候就执行,那么就必须使用静态代码块了。
静态代码块会随着类加载而加载;
如果有多个静态代码块,那么会按前后顺序加载;
一个静态代码块,只会执行一次;
静态代码块不能存在于任何方法体中。
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
还没有评论,来说两句吧...