什么是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修饰的变量,叫实例变量.两者的区别是: 对于静态变量在内 ...
随机推荐
- BehaviorDesigner学习
行为树: 行为树设计师插件是一个专门为unity设计的AI插件. 学习用!!!插件地址:链接:http://pan.baidu.com/s/1dF2okPN 密码:b43m 通过继承Behavior中 ...
- Java开发工程师(Web方向) - 04.Spring框架 - 期末测试
Spring框架客观题 Spring框架编程题 http://blog.csdn.net/sinoacc/article/details/51702458 1 (25分) 假设有如下数据表: crea ...
- Bootstrap框架(图标)
Glyphicons 字体图标 所有可用的图标 包括250多个来自 Glyphicon Halflings 的字体图标.Glyphicons Halflings 一般是收费的,但是他们的作者允许 Bo ...
- 统计单词数:string函数使用
题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数. 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给 ...
- Apache——SSL协议
SSL 协议既用到了公钥加密技术又用到了对称加密技术,对称加密技术虽然比公钥加密技术的速度快,可是公钥加密技术提供了更好的身份认证技术.SSL 的握手协议非常有效的让客户和服务器之间完成相互之间的身份 ...
- 今日头条 2018 AI Camp 6 月 2 日在线笔试编程题第一道——最大连续区间和扩展
题目 给出一个长度为 n 的数组a1.a2.....ana1.a2.....an,请找出在所有连续区间 中,区间和最大同时这个区间 0 的个数小于等于 3 个,输出这个区间和. 输入描述: 第一行一个 ...
- C++ Mooc学习
# C++远征篇之起航 1.IDE搭建,现在大部分同学都使用devC,devC的debug调试功能特别好用,可以跟踪变量.省去了在中间插入一些输出语句来输出中间变量的麻烦. 2.using names ...
- iOS- UIPickerView餐厅点餐系统
在餐厅里的点餐系统的核心控件就是UIPickerView 今天晚上在整理以前的项目笔记时,特意把UIPickerView单独拿出来,做了一个简陋的点餐道具. 因为没有素材图片,所有大家将就看看吧 0. ...
- iOS开发UUIView动画方法总结
#动画设置 UIView动画实现 @interface ViewController () @property (weak, nonatomic) IBOutlet UIView *myView; @ ...
- week1 技术随笔
类别c 内容c 开始时间s 结束时间e 被打断时间I 总计(min) 9.5 随笔 构建之法福后感 22:00 24:00 7 113 9.6 分析 需求分析 9:00 9:30 2 28 编码 词频 ...