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关键字的使用的更多相关文章

  1. Java Static关键字详解

    提起static关键字,相信大家绝对不会陌生,但是,想要完全说明白,猛的一想,发现自己好像又说不太明白... ...比方说,昨天被一个同学问起的时候... ... 当然,不是所有人都像我一样学艺不精的 ...

  2. java static关键字

    方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过类名去进行访问. static可以用来修饰类的 ...

  3. Java static 关键字详解

    引言 在<Java编程思想>中有这样一段话:static方法就是没有this的方法.在static方法内部不能调用非静态方法,反过来是可以的.而且可以在没有创建任何对象的前提下,仅仅通过类 ...

  4. 【转载】java static 关键字的四种用法

    原文链接点这里,感谢博主分享 在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构 ...

  5. [java]static关键字的四种用法

    在java的关键字中,static和final是两个我们必须掌握的关键字.不同于其他关键字,他们都有多种用法,而且在一定环境下使用,可以提高程序的运行性能,优化程序的结构.下面我们先来了解一下stat ...

  6. Java——static关键字

    前言 static关键字算是Java中比较复杂的关键字之一,它可以修饰变量.方法.类以及代码块.下面将介绍static的具体使用. static引入的目的 static的作用 static修饰变量 s ...

  7. Java——static关键字---18.09.27

    static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但在Java语言中没有全局变量的概念. static关键字主要有两种作用: 一.为某特定数据类 ...

  8. Java static关键字的重新思考

    上完Java课,虽然也写了不少的Java代码,但是一直有不少的疑惑,而static关键字一直困惑着我很久,今天无意探究竟,上知乎再仔细查了一下,发现了这个话题的优秀答案https://www.zhih ...

  9. java static关键字和代码块

    static关键字 代码块 方法重写 1. 方法重写的特点: 2. 注意事项: static关键字 为什么需要学习static关键字? 针对某一个变量属于类而不属于某一个具体的对象的时候,我们可以考虑 ...

随机推荐

  1. 读书笔记--《编写高质量代码:改善Python程序的91个建议》

      第一章 引论 建议写Pythonic式的代码,我理解为充分利用pythonAPI,用最简洁方式写出代码 1.两个变量交换: a, b = b, a 2.翻转list: a = [1, 2, 3, ...

  2. 解决问题:怎样在页面获取数组和List集合的长度

    解决问题:怎样在页面获取数组和List集合的长度 我们在前端遍历后台数据的时候,经常是从后台传过来一个数组或List集合,在前端页面就可以使用JSTL的<c:For each>标签遍历数据 ...

  3. Vue-admin工作整理(一):项目搭建

    1.首先要安装vue-cli 3.0以上版本,和git 该版本可以支持页面化快速创建: sudo npm install -g @vue/cli 安装完毕后查看vue版本信息:vue -V 2.安装好 ...

  4. CocoaPods 中删除不需要的第三方

    1...打开Podfile  找到不需要的类库,直接删除 2...打开终端cd到当前项目的根目录下重新执行pod install --verbose --no-repo-update命令(更新一下) ...

  5. js改变数组的两个元素的位子,互换、置顶

    //js数组的元素上移和下移动 var fieldData=[ {name:'id',value:'ID'} , {name:'username',value:'用户名'} , {name:'emai ...

  6. Phonics 自然拼读法 ai, oa,ie, ee,or,j Teacher:Lamb

    课上内容(Lesson) 1. “L” 的介绍 Light L      e.g.   Love Like Life Dark L      e.g.   Apple  world  call 2. ...

  7. POJ-2796 & 2019南昌邀请赛网络赛 I. 区间最大min*sum

    http://poj.org/problem?id=2796 https://nanti.jisuanke.com/t/38228 背景 给定一个序列,对于任意区间,min表示区间中最小的数,sum表 ...

  8. HDU - 6054String and String

    题意:给串s和t,对于串s每个位置有一个价值f,两种操作1.修改f[a]=b,2.查询串t子串Ta-b在s的子串Sc-d中出现位置的f和 题解:s和t建sam,把fail树按dfs序建bit套线段树, ...

  9. h5软键盘弹起 底部按钮被顶起问题解决

    解决思路: 当键盘弹起时隐藏掉按钮,键盘隐藏时按钮显示 监测键盘是否弹起(浏览器页面是否发生变化) 代码: 1.定义一个底部按钮 <div class="returnbtn" ...

  10. 微信跳转外部浏览器下载app

    很多朋友问我怎么解决微信内点击链接或扫描二维码可以直接跳出微信在外部浏览器打开网页链接和下载APP,其实这并不难,只要我们实现微信跳转功能即可.下面给大家介绍这个功能 方案实现教程:http://sk ...