static关键字

static关键字

static属性

在所有方法和属性上实际上都可以使用static关键字定义。

传统的属性保存在堆内存中,并且每一个对象独享此属性,所以我们要吧country设置成共享属性,

只要一次修改就可以影响到所有对象,那么我们要描述这样的共享属性,则只需要在属性前加上static 关键字即可。

当我们使用了static 关键字时,属性不在保存在堆内存中而是保存在一个全局数据区的内存空间之中,并且所以对象可以进行该数据区的访问。

那么问题来了,共享属性能通过一个对象修改吗?

对于static实际上称为类属性,而所有的类属性可以通过类名称直接调用,

所以,访问staic属性都使用类名称,

非static的属性要实例化才能调用,而sataic 的属性不受实例化对象的限制,也就是说是否有对象与static无关, 

选择:关于static属性和非static属性定义的选择?

在定义类99%的情况下,是不会考虑static,以非static属性为主

如果需要描述共享属性的概念,或者不希望受到实例化对象的控制。可以使用static属性

范例:定义一个人的类,同时设置所在的国家

 1 class Person{
 2  private String name;
 3  private int age;
 4  static String country="中国";//为了后面的操作方便,暂时不封装
 5  public Person(String name,int age){
 6   this.name=name;
 7   this.age=age;
 8  }
 9  public String getInfo(){
10   return "姓名:"+this.name+",年龄:"+age+",国家:"+this.country;
11  }
12 }
13 public class Newbegin{
14 public static void main(String args[]) {
15  Person p1=new Person("张三",10);
16  Person p2=new Person("李四",11);
17  Person p3=new Person("王五",12);
18  Person.country="中华民国";//修改一个对象的名称,  
19  System.out.println(p1.getInfo());
20  System.out.println(p2.getInfo());
21  System.out.println(p3 .getInfo()); 
22  }
23 }

static方法

对于static定义的方法也可以通过类名称直接来访问,不用被实例化控制。

范例:观察static定义方法

 1 class Person{
 2  private String name;
 3  private int age;
 4  private static String country="中国";//为了后面的操作方便,暂时不封装
 5  public Person(String name,int age){
 6   this.name=name;
 7   this.age=age;
 8  }
 9  public static void setCountry(String c){
10   country=c;//设置内容
11  }
12  public String getInfo(){
13   return "姓名:"+this.name+",年龄:"+age+",国家:"+this.country;
14  }
15 }
16 public class Newbegin{
17 public static void main(String args[]) {
18  Person.setCountry("中华民国");//没有产生实例化对象
19  Person p1=new Person("张三",10);
20  System.out.println(p1.getInfo());
21  }
22 }
 
限制:
1.所有static方法不允许调用非static的属性或者方法,
2.所有非static方法允许访问static属性或者方法
原因:
static方法可以不用实例化就可以调用,非static要进行实例化才能调用
属性使用static 的原因是因为要共享,方法中使用static 的原因只有一个:那就是某方法不希望受到类的影响,可以没有实例化对象使用

主方法的组成

java给出的主方法名字是最长的一个,其组成意义如下:

public:表示的是公共的,主方法作为起点必须可以随意访问;

static:执行java程序的时候执行的时候是一个类名称,不受实例化的限制;

void:主方法是一切的起点,既然开始就走吧,

main:是一个系统定义好的方法名称;默认名称

String args:表示该类执行时的相关参数;

范例:取得执行参数

1 public class Newbegin{
2  public static void main(String args[]) {
3   //所有参数类型都是String型
4   for(int x=0;x<args.length;x++){
5    System.out.println(args[x]);
6   }
7  }
8 }

参数的设置: java Newbegin hello world hello world

       java Newbegin "hello world" "hello world"

用""好来分格

 static的应用

static属性的最大功能是共享,所以使用static做一个对象产生的计数统计

对象产生个数统计

总结:

1.static定义属性和方法并不是你进行设计的首要选择

2.static属性和方法不受一个类的实例化对象限制,可以由类名称直接调用

原文地址:https://www.cnblogs.com/Tony98/p/10391563.html