class A{
public int i = 10;
public void show(){
System.out.printf("%d",i);
}
} class M{
public static void main(String[] args){
A a1 = new A();
A a2 = new A(); a1.i = 20;
a2.show();//此时输出10
}
}
  /*
本程序证明了:A类的多个对象共用一个static属性i
*/
class A{
public static i = 10; //加上static修饰符
public void show(){
System.out.printf("%d",i);
}
} class M{
public static void main(String[] args){
A a1 = new A();
A a2 = new A();
A a3 = new A(); a1.i = 20;
a2.show();//此时输出20
System.out.printf("%d",a3.i);//也输出20
}
}

结论:

如果给一个属性加上static,那么这个属性不再属于某一个对象了,而是属于N个对象,共用同一个static属性。

static修饰的方法和成员,在类加载的时候,一起加载进虚拟机。优先于对象的创建。static属性在一个单独的内存区,而不是在new出的对象内存中。所以下面的代码范例,可以直接由类名调用,不需要类对象名

  /*
本程序证明了:static属性i是属于类本身的,或者讲:没有对象,我们仍然
可以通过类名的方式访问类内部的static属性。static方法同理
*/
class A{
//给属性和方法加上static修饰符
public static i = 10;
public static void f(){
System.out.printf("20");
}
} class M{
public static void main(String[] args){
System.out.printf("%d",A.i);//输出10
A.f();//输出20
}
}

  显然,static属性和方法虽然属于类本身,可以通过类名的方式访问,但是也属于类对象,也可以通过类对象名的方式访问,

static只是表明了该成员具有了可以通过类名访问的潜在特征,但是是否可以通过类名访问,还必须满足一个条件:该成员必须是非private的

重点:

非静态方法可以访问静态成员(包括属性和方法)

非静态方法的创建在类对象和static成员的创建之后!

所以静态方法不可以访问非静态成员,因为静态成员可以直接由类名访问,非静态成员必须要有类对象名才能访问。

有静态方法的时候不一定创建了非静态方法,但是有非静态方法的时候一定能创建了静态方法

深入理解static关键字的更多相关文章

  1. C++从静态对象的初始化顺序理解static关键字

    问题 首先考虑一个全局变量的初始化顺序问题 在头文件1中: extern int b; ; 在头文件2中: extern int a; ; 源文件中包含了头文件1和头文件2,这种情况下a和b可能的值是 ...

  2. 什么是静态代码块?java中如何使用空参构造方法自动生成不同名字的对象,使用非静态的属性和静态属性有什么区别,原因是什么?如何理解static关键字

    静态代码块?类加载就执行,最先执行 class demo{ static int num; static{ num=10; num*=3; System.out.println("haha& ...

  3. 理解static关键字

    1.static 变量是类变量,通过类名引用. 2.static 方法不需要针对某个对象进行操作,其运行结果仅仅与输入的参数有关,调用时直接类名引用. 3.static 方法不能对非静态成员进行访问. ...

  4. 理解Java中的final和static关键字

    回顾这两个关键字前,先考虑一个问题: Static变量存储在JVM中的位置,或者说static变量是如何被加载的? JVM会把类的静态方法和静态变量在类加载的过程中读入方法区(Method Area) ...

  5. 深入理解final和static关键字

    深入理解final和static关键字 参考:http://blog.csdn.net/qq1028951741/article/details/53418852 final关键字 final关键字可 ...

  6. 深入理解java的static关键字

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...

  7. 关于java中Static关键字的加强理解

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...

  8. java中static关键字的理解(转载)

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...

  9. php中static关键字的理解

    函数内的static变量 static静态变量的理解 静态变量 类型说明符是static. 静态变量属于静态存储方式,其存储空间为内存中的静态数据区(在 静态存储区内分配存储单元),该区域中的数据在整 ...

随机推荐

  1. C#托盘程序设置

    打开Microsoft Visual Studio 2010,新建解决方案--添加项目--托盘的实现     从工具栏里,把NotifyIcon控件拖到窗体上,并设置属性: 1.visible 设置默 ...

  2. On The Way—Step 1 :python入门之Python的历程

    1.python的历史 2004 Django框架 python2 和 python3的区别 python2 源码不统一 有重复功能代码 python3 源码统一 没有重复功能代码 Python的发展 ...

  3. 前端插件之Select2使用

    工欲善其事,必先利其器 本系列文章介绍我在运维系统开发过程中用到的那些顺手的前端插件,上一篇文章介绍了bootstrap-duallistbox这个插件的使用,这一篇开始Select2的征服之旅 Se ...

  4. 实用小工具推荐 OpenWrite

    [实用小工具推荐]给技术同学们推荐一款比较好用的工具,可以实现一稿多发,主流的技术渠道基本涵盖了:https://www.openwrite.cn/ 因为工作的关系,认识了很多做技术公众号的小伙伴,同 ...

  5. CMD开放3389端口

    REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t R ...

  6. 如何思考博弈dp

    两个人的规则是否一致 若仅仅是先后的差别 我们可用dp解决一般思考一个子状态 对于当前的那个状态 我们进行什么样的操作 已知什么

  7. css3加js做一个简单的3D行星运转效果

    前几天在园子里看到一篇关于CSS3D行星运转的文章,原文在这里,感觉这个效果也太酷炫了,于是自己也就心血来潮的来尝试的做了一下.因为懒得去用什么插件了,于是就原生的JS写,效果有点粗超,还有一些地方处 ...

  8. IOS7.0唯一“设备ID”的获取方法

    ios7.0 以后通过sysctl获得的mac地址已经失效,所有设备均为020000000000. 可以通过苹果的keychain机制,实现设备的唯一ID标示. 具体过程:在app第一次安装时,生成一 ...

  9. Css3动画效果,彩色文字效果,超简单的loveHeart

    <!DOCTYPE html><html><head><meta charset="utf-8" /><title>Cs ...

  10. 「雕爷学编程」Arduino动手做(9)——火焰传感器模块

    37款传感器和模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器与模块,依照实践出真知(动手试试)的理念,以学习和交流为目的,这里准备 ...