static
static是一个关键字,用来定义属性和方法;
声明static属性
在一个类中,所有的属性一旦定义,所有内容由各自的堆内存空间保存;
class Person{
private String name;
private int age;
String country = "清朝"; //国家,暂时不封装
public Person(String name,int age){
this.name = name;
this.age = age;
}
public String getInfo(){
return "姓名"+this.name;
}
}
static结构内存分析:
每一个对象保存各自的属性,此时没有任何问题,若未来的某一天,country改变了,且此时已有非常多对象,因为每一个而对象都有各自的country属性,即整体设计出了问题(1、重复保存;2、修改困难)
可将country修改为公共属性,此时使用static定义公共属性;
static String country;
static属性定义在全局数据区中;对于static属性的访问需要注意,其本身是一个公共属性,最好应该通过所有对象的最高代表(类)来进行访问;
static可以由类名称直接访问
Person.country="China"
static虽然定义在类中,但并不受到类实例化对象的控制,static属性可以再没有实例化对象的时候使用;
在进行类设计时首选非static属性,公共信息存储时考虑static属性;
声明static方法
static可以进行方法的定义,可以直接由类名称在没有实例化对象的情况下调用;
public static void setInfo(String c){
country = c;
}
Person.setInfo("TEST"); //可直接调用
此时方法有两种:static、非static,在调用上有限制:
- static只允许调用static属性或static方法;
- 非static方法只允许调用static属性或static方法;
所有static定义的属性和方法都可以在没有实例化对象的情况下使用,
static定义的方法或属性都不是代码编写之初需要考虑的,只有在回避实例化对象且描述公共属性的时候才会考虑使用static定义的方法以及属性;
static应用案例
范例:编写一个程序类,实现实例化对象个数的统计,么一次新的实例化对象实现一个统计操作;
此时可以单独创建一个static属性
class book{
private String title;
private static int count=0;
public book(String title){
this.title = title;
count++;
}
}
范例:实现属性的自动命名;
如果现在传递了title属性,若没有传递title,则自动命名;