什么是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修饰的变量,叫实例变量.两者的区别是: 对于静态变量在内 ...
随机推荐
- unity发布自定义分辨率
如果你需要发布unity时想要使用自己设置的分辨率仅需要一下几个步骤: 打开Build Setting->PlayerSetting->Resolution and Presentatio ...
- 41. Maximum Subarray
Description Given an array of integers, find a contiguous subarray which has the largest sum. The su ...
- 【转】巫师3:狂猎(The Witcher 3: Wild Hunt )的游戏事件工作流
转自腾讯游戏开发者平台(GAD) CDPROJEKT RED的主程序.Piotr Tomsinski 在GDC2016的最后一天18号,CDPROJEKT RED的主程Piotr Tomsinski, ...
- leetcode7_C++整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 输出: 示例 2: 输入: - 输出: - 示例 3: 输入: 输出: 注意: 假设我们的环境只能存 ...
- 【算法分析】如何理解快慢指针?判断linked list中是否有环、找到环的起始节点位置。以Leetcode 141. Linked List Cycle, 142. Linked List Cycle II 为例Python实现
引入 快慢指针经常用于链表(linked list)中环(Cycle)相关的问题.LeetCode中对应题目分别是: 141. Linked List Cycle 判断linked list中是否有环 ...
- vue.js学习之 打包为生产环境后,页面为白色
vue.js学习之 打包为生产环境后,页面为白色 一:配置问题 当我们将项目打包为生产环境后,在dist文件夹下打开index.html,会发现页面为白色. 1:打开config>index.j ...
- 关于智能指针类型shared_ptr的计数问题
一.关键 每个shared_ptr所指向的对象都有一个引用计数,它记录了有多少个shared_ptr指向自己 shared_ptr的析构函数:递减它所指向的对象的引用计数,如果引用计数变为0,就会销毁 ...
- .net下将exe改造为既能双击独立运行又能注册为windows服务
最近项目中需要将一些业务的处理程序改造为windows服务,但是考虑到实际需求,也需要能够直接双击运行这些处理程序.首先第一步想到的就是原来的项目不变,只需要在加一个windows服务的项目就行.但是 ...
- 【Linux】- CentOS搭建FTP服务器
1.安装vsftpd yum install -y vsftpd 2.启动vsftpd服务 service vsftpd start 3.查看运行状态 netstat -nltp | 完毕!!! 参考 ...
- oracle 删除数据恢复
select * from taxi_comp_worksheet_ext as of timestamp to_timestamp('2014-09-22 13:00:00', 'yyyy-m ...