java static关键字的使用
static关键字
通常来说,创建类的时候,是用new创建此类的对象才可以获得,执行new创建对象时数据存储空间才被分配,其方法才被外界调用
有两种情况用new无法解决:
1)只为某特定域分配单一存储空间,不管创建多少对象
2)希望某个方法不与包含她的类的任何对象实例关联在一起
static初始化:
无论创建多少个对象,静态数据都只占用一份存储区域。static关键字不能用于局部变量,只能作用于域。
如果一个域是静态的基本类型域并且没有进行初始化,那就会获得基本类型的标准初值;如果是一个对象的引用,那么默认初始化值是null
类加载顺序:先加载static域,而后是非static域
类加载后,类中的static域在之后的new中将不再初始化,而非static域会再次被初始化
static用法:
随着类的加载而加载,优先于对象出现在内存中,并且不能以任何方式引用this 或super
1.修饰变量。静态字段
静态变量的定义规范:一旦被static修饰的变量,变量名称建议全部大写
当一个类中某个变量被所有对象共享,那么可以将该变量定义为静态变量.静态字段可以直接使用类名调用该方法
public class StaticTest01{
public static void main(String[] args){
//PI可以对所有对象共享
CArea c1 = new CArea(10);
CArea c2 = new CArea(100);
double area1 = c1.area();
double area2 = c2.area();
System.out.println("两个圆的面积分别为:"+area1+"~"+area2);
System.out.println("圆周率:"+CArea.PI);
System.out.println("圆周率:"+c1.PI+"~"+c2.PI);
}
}
class CArea{
public int r;
public static double PI = 3.14; //圆周率
public CArea(){}
public CArea(int r){
this.r = r;
}
public double area(){
return PI*r*r;
}
}
/*
结果:
314~31400
3.14
3.14~3.14
*/
以上程序,创建了两个CArea对象,这两个对象c1,c2共享一个PI,c1.PI和c2.PI值相同一存储空间,具有相同的值3.14
引用static变量的两种方式:1)如c1.PI; 2)实用类名直接调用:CArea.PI
总结:static作用于某字段时会改变数据创建的方式:因为static字段对每个类来说,无论这个类创建多少个实例,都只有一份存储空间(存储在方法区被所有本类的对象共享),而非静态字段是对每个对象来说都有一份存储空间
2.修饰方法
方法一旦被static修饰,就可以直接使用类名调用该方法
一般将工具类的方法(不需要使用成员变量)定义为static,直接通过类名去调用
静态不能调用非静态,非静态可以调用静态和非静态
public class StaticTest02{
public static void main(String[] args){
double area = CArea.area(10); //通过类名CArea去调用静态方法area
System.out.println("圆的面积:"+area);
}
}
class CArea{
public int a; //非静态变量
public static double PI = 3.14; //圆周率
public CArea(){}
public static double area(int r){ //静态方法
//a = 10; //错误做法。
return PI*r*r;
}
}
以上程序,在静态方法area中调用非静态成员变量a是错误做法!!!静态不能调用非静态
static方法的一个重要用法是不创建任何对象的前提下可以直接调用此方法
3.静态代码块
static{语句;} 随着类的加载而加载,加载类时直接运行静态代码块
static代码块只执行一次:当首次生成这个类的一个对象时,或者首次访问数据这个类的静态数据成员时(即便从未生成这个类的对象)
4.修饰类
通常一个普通类不允许被声明为static的,有一个特殊情况:内部类可以被声明为static
当一个内部类被声明为static时,外部类可以直接调用内部类,因为static的内部类是在加载外部类的同时加载的,所以只要实例化外部类后,就能用外部类对象直接调用 静态内部类,而无需实例化内部类。
java static关键字的使用的更多相关文章
- Java Static关键字详解
提起static关键字,相信大家绝对不会陌生,但是,想要完全说明白,猛的一想,发现自己好像又说不太明白... ...比方说,昨天被一个同学问起的时候... ... 当然,不是所有人都像我一样学艺不精的 ...
- java static关键字
方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问. static可以用来修饰类的 ...
- Java static 关键字详解
引言 在<Java编程思想>中有这样一段话:static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建任何对象的前提下,仅仅通过类 ...
- 【转载】java static 关键字的四种用法
原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...
- [java]static关键字的四种用法
在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...
- Java——static关键字
前言 static关键字算是Java中比较复杂的关键字之一,它可以修饰变量.方法.类以及代码块.下面将介绍static的具体使用. static引入的目的 static的作用 static修饰变量 s ...
- Java——static关键字---18.09.27
static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但在Java语言中没有全局变量的概念. static关键字主要有两种作用: 一.为某特定数据类 ...
- Java static关键字的重新思考
上完Java课,虽然也写了不少的Java代码,但是一直有不少的疑惑,而static关键字一直困惑着我很久,今天无意探究竟,上知乎再仔细查了一下,发现了这个话题的优秀答案https://www.zhih ...
- java static关键字和代码块
static关键字 代码块 方法重写 1. 方法重写的特点: 2. 注意事项: static关键字 为什么需要学习static关键字? 针对某一个变量属于类而不属于某一个具体的对象的时候,我们可以考虑 ...
随机推荐
- Xilinx Vivado的使用详细介绍(5):调用用户自定义封装的IP核
Zedboard OLED Display Controller IP v1 介绍 Author:zhangxianhe 本文档提供了快速添加,连接和使用ZedboardOLED v1.0 IP内核的 ...
- java反射使用和源码解析
1 反射 1.1 什么是反射 正射:指的是我们知道类的定义和类中的方法名称,直接先创建对象,然后通过对象去调用方法.例如: Apple apple = new A ...
- spring xml配置注入改为手动注入过程
项目中需要使用MQ组件来接受消息,但是有的时候,在使用的时候,并不能满足spring注入的条件,无法注入.例如 在jfinal的config的afterJFinalStart中,由于jfinal集成s ...
- 雷林鹏分享:Composer 安装
下午在安装 Laravel 框架过程中,遇到了不少问题,因为 Laravel 的安装依赖于 composer,这里就先介绍一下 composer 的安装方法: 安装方法: #下载 sudo curl ...
- 小账本APP——软件项目风险管理及解决办法案例
小账本APP——软件项目风险管理及解决办法案例 摘要 软件项目风险是指在软件开发过程中遇到的预算和进度等方面的问题以及这些问题对软件项目的影响.软件项目风险会影响项目计划的实现,如果项目风险变成现实, ...
- spring 事务关键类
TransactionInterceptor-> TransactionAspectSupport spring 事务的提交 AbstractPlatformTransactionManager
- NopCommerce源码架构详解
NopCommerce源码架构详解--初识高性能的开源商城系统cms 很多人都说通过阅读.学习大神们高质量的代码是提高自己技术能力最快的方式之一.我觉得通过阅读NopCommerce的源码,可以从 ...
- 【图论】最短路问题之spfa
写在算法前面: 前向星存图(一个神奇的超越邻接矩阵的存在) 首先讲一下需要定义的一些东西?? 1.head数组:head[点数]:head[i]表示以当前点i为起点的最后一条边(这里的最后指的是编号[ ...
- 项目部署Vue+Django(luffy)
部署路飞学城 部署整体框架图: 1 熟悉linux操作 2 上传路飞学城项目到linux服务器 xftp上传到服务器 lrzsz工具 3 完成python3解释器的安装 在linux命令行模式下, 输 ...
- JavaScript判断苹果 iPhone X Series 机型
原文链接: JavaScript 判断 iPhone X Series 机型 现状 iPhone X 底部是需要预留 34px 的安全距离,需要在代码中进行兼容. 现状对于 iPhone X 的判断基 ...