专栏首页孙小白深入理解static关键字

深入理解static关键字

 1 class A{
 2     public int i = 10;
 3     public void show(){
 4         System.out.printf("%d",i);
 5     }
 6 }
 7 
 8 class M{
 9     public static void main(String[] args){
10         A a1 = new A();
11         A a2 = new A();
12         
13         a1.i = 20;
14         a2.show();//此时输出10
15     }
16 }
 1  /*
 2      本程序证明了:A类的多个对象共用一个static属性i
 3  */
 4  class A{
 5     public static i = 10; //加上static修饰符
 6     public void show(){
 7         System.out.printf("%d",i);
 8     }
 9 }
10 
11 class M{
12     public static void main(String[] args){
13         A a1 = new A();
14         A a2 = new A();
15         A a3 = new A();
16         
17         a1.i = 20;
18         a2.show();//此时输出20
19         System.out.printf("%d",a3.i);//也输出20
20     }
21 }

结论:

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

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

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

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

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

重点:

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

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

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

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • static示例

    爱学习的孙小白
  • Java单例模式-懒汉式、恶汉式、静态内部类、枚举以及线程安全问题

    通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数额控制并节约系统资源。

    爱学习的孙小白
  • 跨函数使用内存案例

    爱学习的孙小白
  • 【Java学习笔记之十五】Java中的static关键字解析

    Java中的static关键字解析   static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的...

    Angel_Kitty
  • Java中的static关键字解析

      static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一。下面就先讲述一下stat...

    Java团长
  • Java下static关键字用法详解

      本文章介绍了java下static关键字的用法,大部分内容摘自原作者,在此学习并分享给大家。

    哲洛不闹
  • Flask配置静态资源

    1. 简介 flask可对实例、配置模板文件路径、静态文路径进行配置 Flask(import_name, static_url_path=None, st...

    菲宇
  • java中static关键字的用法和注意点

    package com.javabase.keywords; public class KeyWord { static int id = 1; ...

    gfu
  • 理解PHP的延迟静态绑定

    static::中的static其实是运行时所在类的别名,并不是定义类时所在的那个类名。这个东西可以实现在父类中,能够调用子类的方法和属性。

    zlmai
  • Spring boot web程序static资源放在jar外部

    spring boot程序的static目录默认在resources/static目录, 打包为jar的时候,会把static目录打包进去,这样会存在一些问题:...

    用户1177380

扫码关注云+社区

领取腾讯云代金券