static关键字

定义属性

static声明的属性和非static声明的属性最大的不同时保存的内存区域不同,static申明的属性保存在全局数据区

  • static申明的属性可直接通过类.属性的形式访问
  • 所有static对象属性必须参数实例化对象才可以访问,但是static对象就不需要了,无需实例化可以直接类.属性访问
  1. class Book{
  2. private String name;
  3. private String price;
  4. static String pub = "清华大学出版社";
  5. }
  6. public class TestStatic{
  7. public static void main(String[] arg){
  8. Book.pub="北京大学出版社";//static申明的属性可直接通过类.属性的形式访问无需实例化可以直接类.属性访问
  9. System.out.println(Book.pub);//结果 北京大学出版社
  10. }
  11. }

定义方法

  • static 方法不能够直接访问static属性和static方法,只能够调用static属性和方法
  • 非static方法可以直接访问static属性和static方法,不受任何限制
  1. class Book{
  2. private String name;
  3. private String price;
  4. static String pub = "清华大学出版社";
  5. public static String setPub(String tempPub){
  6. return this.pub = tempPub;
  7. }
  8. }
  9. public class TestStatic{
  10. public static void main(String[] arg){
  11. Book.setPub("北京大学出版社");//无需实例化对象,就可以调用方法
  12. System.out.println(Book.pub);//结果 北京大学出版社
  13. }
  14. }

main方法,解析

  • public 表示公共的
  • static 表示方法时由类名称调用,不许实例化对象
  • void void表示没有返回值
  • main 系统规定好的名称,不能修改
  • String[] arg 传入的参数

传入参数调用,多个参数用空格分隔开 java TestStatic hello hi hh

参数存在空格时,加双引号区分java TestStatic ”hello word" "hi hh"

总结

  • static属性和方法无需对象实例化就可以调用。但是一般都不用static定义属性
  • java内存区分为: 栈内存(存堆内存地址),堆内存(存数据),全局数据区(存static属性),全局方法区(存static方法)