什么是static?什么是final?
由static修饰的变量、常量、和方法被称为是静态变量、常量和 方法。
静态数据和静态方法的作用通常是为了提供共享数据或方法,如数学计算公式等,以static声明并且实现,这样当需要使用时,直接使用类名调用这些静态成员即可。例如,两个类在同一个内存区域共享一个数据,在球类使用PI这个常量,另外的圆类也需要使用这个常量,这时没有必要在两个类中同时创建PI常量,这样系统会将这两个不在同一个类中定义的常量分配到不同的内存空间中,这是声明静态成员就好,静态成员归类所有,区别于个别对象,可以在本类和其他类使用"类名.静态名"调用静态成员。尽管使用这种方式调用静态成员比较方便,但静态成员同样遵循着public、private、protected的约束。
public class Stat {
static double PI=3.1415926;
static int id;
public static void method1(){
System.out.println("hello,method1.");
}
public void method2(){
System.out.println(PI);
System.out.println(id);
method1();
}
}
主类
public class Main { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Stat st=new Stat();
st.method2();
} }
结果
3.1415926
0
hello,method1.
static是自动初始化滴,为0.
在java语言中对static有一些规定:
1.在静态方法中不可以使用this关键字;
2.在静态方法中不可以直接调用非静态方法;
3.规定不得能将方法体内的局部变量声明为static;
4.可以用static定义一个静态区域,可以先执行类的初始化动作……具体问题具体分析,说这几句只是表面……
final关键字可以用于变量声明,一旦变量被设定,就不可以再改变变量的值,通常,由final定义的变量为常量。
final关键字定义的变量声明时必须立即赋值,除了可以修饰基本数据类型的常量,还可以修饰对象引用。由于数组可以被看成一个对象来引用,所以final可以修饰数组。
一旦一个对象引用被修饰为final后,它只能恒定的指向一个对象,无法将其改变指向另一个对象。
一个既是static又是final的字段只占据一段不能改变的存储空间。
import java.util.Random;
public class Fina {
public static Random rand=new Random();
public final int a1=rand.nextInt(10);
public static final int a2=rand.nextInt(10); }
主类
public class Main { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Fina fi=new Fina();
System.out.println(fi.a1);
System.out.println(fi.a2);
Fina fii=new Fina();
System.out.println(fii.a1);
System.out.println(fii.a2);
} }
结果
4
5
2
5
定义为final的常量是恒定不变的,将随机数赋予定义为final的常量,可以做到每次运行程序时改变a1的值,但是a2不同于a1,由于它被声明为static final形式,所以在内存中为a2开辟了一个恒定不变的区域,当再次实例化一个对象时,仍然指向a2这块内存区域,所以a2保持不变。a2只是装载时初始化,而不是每次创建对象时都被初始化,而a1会在重新实例化对象时被更改。
什么是static?什么是final?的更多相关文章
- static关键字和final关键字
static关键字和final关键字 static(静态) 作用 用来修饰属性.方法.代码块.内部类 static修饰属性 表示静态变量(类变量) 按是否使用static修饰,属性的分类 静态属性 当 ...
- 详解详解Java中static关键字和final关键字的功能
摘要:static关键字和final关键字是Java语言的核心,深入理解他们的功能非常重要. 本文分享自华为云社区<Java: static关键字与final关键字>,原文作者:唐里 . ...
- Java SE 第二十三讲----static关键字and final关键字
1.static关键字 [在二十二讲视频中30分钟开始讲授] 2.static修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量:一个对象对该静态成员变量进行了修改,其他 ...
- java中static特殊性和final(static成员直接被访问,this不能用在static方法中,static不可访问非static)
java的static关键字 java中,static修饰的成员变量和成员方法叫静态变量和静态方法,不依赖类特定的实例,被类的所有实例共享. 静态变量或类变量 和 实例变量,区别是: 静态变量在内存中 ...
- Java中static关键字和final关键字
static: 1. 修饰变量,方法 表示静态方法,静态变量. 2. static修饰代码块 static{ } 此种形式为静态代码块,用于初始化同时被final static修饰的变量.(当然,更常 ...
- 类成员(static)和final修饰符
在Java类里只能包含成员变量.方法.构造器.初始化块.内部类(包括接口.枚举)5种成员,类成员是用static来修饰的,其属于整个类. 当使用实例来访问类成员时,实际上依然是委托给该类来访问类成员, ...
- 05 面向对象:构造方法&static&继承&方法 &final
构造方法及其重载: /* 构造方法格式特点 * a:方法名与类名相同(大小也要与类名一致) * b:没有返回值类型,连void都没有 * c:没有具体的返回值return; * 构造方法的重载 * 重 ...
- php public,static,private,protected,final,const,abstract
public:权限是最大的,可以内部调用,实例调用等. protected: 受保护类型,用于本类和继承类调用. private: 私有类型,只有在本类中使用. final:PHP 5:不被改,不被继 ...
- 总结目前为止学到的关键字(break,continue,private,static,this,super,final,abstract)
1.控制跳转语句:break(结束) 使用的场景: a.循环当中 b.switch break关键字需要注意的问题: 1.break关键字只能用于循环和switch语句当中,其本质就是结束整段语句的意 ...
- static变量和final变量
1.static变量 按照是否静态的对类成员变量进行分类可分两种:一种是被static修饰的变量,叫静态变量或类变量:另一种是没有被static修饰的变量,叫实例变量.两者的区别是: 对于静态变量在内 ...
随机推荐
- 如何使用AEditor制作一个简单的H5交互页demo
转载自:http://www.alloyteam.com/2015/06/h5-jiao-hu-ye-bian-ji-qi-aeditor-jie-shao/ 本教程演示如何使用AEditor制作一个 ...
- [Clr via C#读书笔记]Cp10属性
Cp10属性 属性的本质就是方法,只是看起来像字段罢了: 无参属性 就是一般属性: 字段一般要private,然后通过设置访问方法-访问器来访问:属性是方法语法变种:getset不一定要访问支持字段: ...
- C#二次封装虹软arc研究
相信很多用C#又想用虹软的SDK的童鞋要花很多心思去研究怎么转换,所以写了一篇文章和一个demo方便用C#的童鞋方便调用虹软的接口, 文章的地址是:https://blog.xgcos.com/sho ...
- opencv-学习笔记(6)图像梯度Sobel以及canny边缘检测
opencv-学习笔记(6)图像梯度Sobel以及canny边缘检测 这章讲了 sobel算子 scharr算子 Laplacion拉普拉斯算子 图像深度问题 Canny检测 图像梯度 sobel算子 ...
- iis 10 重新注册iis
iis 10 使用该命令 提示 版本不支持 C:\WINDOWS\system32>c:\windows\microsoft.net\framework64\v4.0.30319\aspnet_ ...
- Docker学习笔记总结
Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/ 一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...
- js随机数算法
function rnd( seed ){ seed = ( seed * 9301 + 49297 ) % 233280; //为何使用这三个数? return seed / ( 233280.0 ...
- C++ STL victor
一.介绍 vector是表示可变大小数组的序列容器. 就像数组一样,vector也采用的连续存储空间来存储元素.也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效.但是又不像数组,它 ...
- Android UI 设计之 TextView EditText 组件属性方法最详细解析
. 作者 :万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/18964835 . TextView 相关类的继承结构 ...
- python 项目配置虚拟环境
# Windows 环境1, 安装 Visual C++ 2015 Build Tools, 依赖.Net Framework 4.6, 安装包位置 ./tools/windows/visualcpp ...