一、static关键字修饰变量
实例变量:
当所有对象都有这个属性,但是这个属性的值会随着对象的变化而变化【不同对象的这个属性的值不同】讲变量声明为实例变量。
静态变量:
所有对象都有这个属性,并且,所有对象的这个属性值是一样的,建议定义为静态变量,节省内存开销。
用“类名.静态变量名”的方式访问。
采用引用.的方式访问的时候,即使引用是null,也不会出现空指针异常,因为访问静态的数据不需要对象的存在。
1.static为静态的。
2.static修饰的所有元素都为静态的,用“类名.静态变量名”的方式访问,也可采用引用.的方式访问的时候。
3.其修饰的都是类级别的,不需要对象的存在
例如:
package test008;
//中国人类
public class Chinese {
String id;
String name;
String country;
public Chinese(String id, String name, String country) {
this.id = id;
this.name = name;
this.country = country;
}
public Chinese() {
// this.id = null;
// this.name = null;
// this.country = null;
}
}
package test008;
public class Chinesetest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Chinese zhangsan=new Chinese("1","张三","中国");
System.out.println(zhangsan.name+","+zhangsan.id+","+zhangsan.country);
Chinese lisi=new Chinese("1","李四","中国");
System.out.println(lisi.name+","+lisi.id+","+lisi.country);
}
}
所有国籍一样,属于类级别的特征,可以提升整个模板的特征,可以在变量前面添加static关键字修饰。
静态变量在类加载的时候初始化,不需要创建对象,内存就开辟了。
package test008;
public class Chinesetest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Chinese zhangsan=new Chinese("1","张三");
System.out.println(zhangsan.name+","+zhangsan.id+","+Chinese.country);
Chinese lisi=new Chinese("1","李四");
System.out.println(lisi.name+","+lisi.id+","+Chinese.country);
}
}
package test008;
//中国人类
public class Chinese {
String id;
String name;
//所有国籍一样,属于类级别的特征,可以提升整个模板的特征,可以在变量前面添加static关键字修饰
//静态变量在类加载的时候初始化,不需要创建对象,内存就开辟了。
//静态变量存储在方法内存中
static String country="中国";
public Chinese(String id, String name) {
this.id = id;
this.name = name;
this.country = country;
}
public Chinese() {
// this.id = null;
// this.name = null;
// this.country = null;
}
}
二、static关键字修饰方法
1.语法格式:
static{
java语句;
}
2.静态代码块在类加载时执行,并且只执行一次。
3.在一个类中可以编写多个,并且遵循自上而下的顺序。
4.作用:
- 在类加载的时刻执行代码完成日志的记录
- 静态代码块时为程序员准备的一个特殊时刻,为类加载时刻,希望在此刻执行特殊的程序,可以使用static关键字
package test010;
public class StaticTest01 {
static {
System.out.println("li");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print("main begin");
}
}
二、方法什么时候定义为静态的
方法是描述动作的,当所有对象执行这个动作的时候,最终产生影响是一样的,那么,这个动作已经不在属于某一个对象的动作,可以将这个动作提升为类级别的动作,模板级别的动作。
大多数工具类中方法都是静态方法,工具类就是方便编程,不用创建对象。