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关键字? 针对某一个变量属于类而不属于某一个具体的对象的时候,我们可以考虑 ...
随机推荐
- Date日期类型的绑定
自定义类型的绑定 springmvc没有提供默认的对日期类型的绑定,需要自定义日期类型的绑定 第一张图是po类中日期属性,第二张图是页面中日期属性的内容,第三张图片是访问出现400错误 因为日期的格式 ...
- vue的一些随记
1.vue中在methods等中使用filters中的过滤器 this.$options.filters[filter](...args)
- eclipse配置运行时变量
说明:我这里是在执行测试方法是配置的环境变量 步骤: 选中测试方法 -> 右键 -> run as -> run configurations ->
- 一键安装Lnmp教程
LNMP一键安装包 系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要3GB以上硬盘剩余空间 128M以上内存,Xen的需要有SWAP ...
- MATLAB 符号变量表达式 + 方程求解
源代码见文末 部分源代码: % 符号变量 两种表达方式 a=sym('a'); class(a); syms b; b; % 符号常量 c=sym('); c; % 符号表达式 三种表达方式 f1=' ...
- SYN-flood攻击
原理:当TCP三次握手进行第一次握手时,客户端向服务端发送SYN请求报文,第二次握手服务端会返回一个SYN+ACK的一个确认报文,syn-flood攻击就发生在第三次握手,当客户端不去回应服务端的SY ...
- css选择器以及使用场景
1.选择器以及使用场景 id选择器:#header{} 类选择器:.header{} 元素选择器:div{} 子选择器:ul > li{} 后代选择器:div p{} 伪类选择器:a:hover ...
- FreeMaker入门介绍
一.FreeMaker介绍 FreeMarker是一款免费的Java模板引擎,是一种基于模板和数据生成文本(HMLT.电子邮件.配置文件.源代码等)的工具,它不是面向最终用户的,而是一款程序员使用的组 ...
- 当前 .NET SDK 不支持将 .NET Core 2.1 设置为目标。请将 .NET Core 2.0 或更低版本设置为目标,或使用支持 .NET Core 2.1 的 .NET SDK 版本。
解决方案:项目>属性>应用程序>目标框架>安装其他框架. 此处我下载了2.1的x64的框架并安装. 安装后,重新打开vs即可点击切换新框架.
- liunx定时任务
为当前用户创建cron服务 1. 键入 crontab -e 编辑crontab服务文件 例如 文件内容如下: */2 * * * * /bin/sh /home/admin/jiaoben/bu ...