黑马程序员——关于static关键字

  static关键字

  1、共享数据:static用于修饰成员(成员函数,成员变量),这些成员都是被对象共享的成员。

  2、特点

  ①、随类的加载而加载,消失而消失。

  ②、优先于对象而存在

  ③、被所有对象所共享

  ④、可以直接被类名所调用

  代码示例

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  17

  18class Chinese

  {

  static String country = "中国";//共享数据

  String name;

  int age;

  void singOurCountry(){

  System.out.println("啊,亲爱的"+country);

  }

  }

  public class AboutStaticKey { sducc1122

  public static void main(String[] args) {

  System.out.println(Chinese.country);

  //当成员被静态修饰后,除了可以被对象调用之外,还可以被类名调用

  Chinese ch = new Chinese();

  System.out.println("Chinese country is " + ch.country);

  ch.singOurCountry();

  }

  }

  3、实例变量与类变量的区别

  ①、存储位置

  前者随对象的建立而存在于堆内存中

  后者随着类的加载而存在于方法区中

  ②、生命周期

  前者随着对象的消失而消失

  前者随着类的的消失而消失

  ③、调用方式

  前者可以被对象及类名调用,但建议用类名调用

  后者只能被对象调用

  4、静态的使用注意事项:

  ①、静态的方法只能访问静态成员

  ②、静态方法中不可以使用this或super关键字

  ③、静态省略的是类名,成员变量省略的是this

  ④、主函数是静态的

  public static void main(String[] args)

  1)、public:代表着该函数的权限最大

  2)、static:代表主函数岁类的加载而加载就已经存在

  3)、void:主函数没有返回值

  4)、main:不是关键字,是一个特殊的单词,可以被jvm识别。

  5)、String[] args:http://hainanqichewang.com函数的参数,参数类型是一个数组,该数组中的元素师字符串,字符串类型的数组。

  5、静态的利弊

  ①、利:对对象的共享数据进行单独空间的存储,节省空间,可以被类名直接调用。

  ②、弊:生命周期过长,而且访问有局限性

  6、什么时候使用静态?

  ①、静态变量:如果对象中出现共享数据时,该数据被静态修饰,对象中的特有数据定义在堆内存中

  ②、静态函数:函数是否用静态修饰,就看该函数功能是否需要访问对象中的特有数据,需要,该功能为非静态;不需要,就定义成静态

  7、静态代码块

  ①、格式:

  static

  {

  code;

  }

  ②、特点:随类的加载而执行,且只执行一次,并优先于主函数而执行

  ③、作用:给类进行初始化

  8、面试题:

  1

  2

  3

  4

  5

  6

  7

  8

  9

  10

  11

  12

  13

  14

  15

  16

  17

  18

  19

  20

  21

  22

  23

  24

  25class StaticCode {

  StaticCode(){

  System.out.println("b");//因为没有创建过与之相关的对象,从而没有被执行过,所以不打印b

  }

  static//静态代码块给类初始化

  {

  System.out.println("a");

  }

  {//构造代码块给对象初始化,其优先级比构造函数高,因为构造函数有针对性,而构造代码块可以初始化所有对象

  System.out.println("c");

  }

  StaticCode(int x){//构造函数给对应的对象初始化

  System.out.println("d");

  }

  public static void show(){

  System.out.println("show run");

  }

  }

  class StaticCodeDemo {

  public static void main(String[] args) {

  new StaticCode(4);

  }

  }

  问打印结果是?为什么?

  结果:a c d,

  ---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值