这一节我们来学习java语言中一个新的keyword就是statickeyword。
当然对于每个keyword,我们都要明白的是它有什么作用,怎么用。我们先来看一个样例:
class Person { String name;//姓名 String country = "中国";//国籍 public void printInfo() { System.out.println(name+":"+country); } } class StaticTest { public static void main(String[] args) { Person p = new Person(); p.name = "小强"; p.printInfo(); Person p1 = new Person(); p1.name = "小明"; p1.printInfo(); Person p2 = new Person(); p2.name = "小红"; p2.printInfo(); } }
我们看看这个样例的执行结果:
我们会发现创建的三个对象中,姓名不同。可是国籍是同样的,那么对于非常多个对象呢,国籍是同样的。那么我们就会想能不能把国籍独立起来放到一个空间中供全部对象直接引用就能够了。而在对象中仅仅须要有姓名这个属性就可以。
java语言给我了我们解决问题的途径,那就是我们如今要说的statickeyword。
非常明显。我们也就明白了statickeyword的作用:就是把特有数据谜面全部对象都能共享的数据,也称为对象的共享数据。
那么上面的代码用statickeyword进行优化:
class Person { String name;//姓名 static String country = "中国";//国籍 public void printInfo() { System.out.println(name+":"+country); } }
当然结果还是我们上面看到的结果。可是实际上,内存中会把country专门存放在一个独立的空间中,而每一个对象中都仅仅有name属性,这样就节省了非常多不必须的空间。
我们刚才看了statickeyword的作用,那么以下我们再来看statickeyword有哪些特点呢?
我们通过上面的样例。引申总结出下面四条特点:
1.static既是keyword。也是修饰符。用于修饰成员。这里的成员就是成员变量和成员函数。
2.statickeyword修饰的数据是共享数据。我们前面看到了static的作用就是修饰共享数据,而对象中存储的数据就是每一个对象的特有数据。
3.statickeyword修饰的成员随着类的载入而载入。这是因为static修饰的数据要被全部对象共享,所以要在对象共享之前就存在。因此java语言就赋予了static这种功能。
4.statickeyword修饰的成员优先于对象存在,由于static成员是随着类的载入面存在的。
5.statickeyword修饰的成员多了一种调用方法。能够直接被类名调用,即:类名.静态成员 的调用方式。
比方上面的样例中,我们能够这样调用:
class StaticTest { public static void main(String[] args) { Person p = new Person(); //p.name = "小强"; //p.printInfo(); System.out.println(Person.country); } }
结果:
我们看到staitc修饰的成员我们能够直接用类名去调用,也就是说我们不须要创建对象就能够直接调用。由于static成员随着类的载入而存在,实现了同样数据被不多个对象的共享。
当然。既然我们的java是面向对象语言,假设我们把全部的成员都用static修饰。也就是说没有对象了,那是一件多么可怕的事情呢。可是,无论怎么说,共享数据个人觉得确实还是比較爽的。