1、介绍static关键字
1.static修饰的变量:静态变量
2.static修饰的方法:静态方法
3.所有static关键字修饰的都是类相关的,类级别的
4.所有static修饰的,都是采用"类名.方法名、变量名"
2.变量的分类
变量根据声明的位置进行划分:
1.在方法体中声明的变量叫做:局部变量
2.在方法体外声明的变量叫做:成员变量
其中的成员变量又可以分为:
1.实例变量
2.静态变量(有静态关键字static修饰的变量)
eg1.
以下实例的,都是对象相关的,访问时采用"引用."的方式进行访问。
实例相关的,必须先有对象(使用new创建对象),才能访问,可能会出现空指针异常
public class Test {
public static void main(String[] args) {
//需要先new对象出来,才可以引用方法
Test test =new Test();
test.test();
}
//实例方法
public void test(){
System.out.println("我是实例方法中的一句话");
}
}
eg2.
以下静态的,都是类相关的,访问时采用”类名.“的方式访问。
不需要对象的参与即可访问(可以不用new对象就可以使用)。没有空指针异常的发生
public class Test01 {
public static void main(String[] args) {
//使用static修饰的方法直接使用,不需要new对象
test();
//new对象出来也可以使用但是一般不会这样写
Test01 test01 = new Test01();
test01.test();
}
public static void test() {
System.out.println("我是静态方法中的一句话");
}
}
3.什么时候变量声明为实例的,什么时候声明为静态的?
如果这个类型的所有对象的某个属性值都是一样的,不建议定义为实例变量,浪费内存空间。
建议定义为类级别特征,定义为静态变量,在方法区中只保留一份,节省内存开销。
一个对象一份的是实例变量
所有对象一份的是静态变量
eg.
class Chinese{
// 身份证号
// 每一个人的身份证号不同,所以身份证号应该是实例变量,一个对象一份。
String idCard;
// 姓名
// 姓名也是一个人一个姓名,姓名也应该是实例变量。
String name;
// 国籍
String country;
// 无参数
public Chinese(){
}
// 有参数
public Chinese(String s1,String s2, String s3){
idCard = s1;
name = s2;
country = s3;
}
}
eg.
class Chinese{
// 身份证号
// 每一个人的身份证号不同,所以身份证号应该是实例变量,一个对象一份。
String idCard;
// 姓名
// 姓名也是一个人一个姓名,姓名也应该是实例变量。
String name;
// 国籍
// 重点重点五颗星:加static的变量叫做静态变量
static String country = "中国";
// 无参数
public Chinese(){
}
// 有参数
public Chinese(String s1,String s2){
idCard = s1;
name = s2;
}
}
注意:
1.静态变量在类加载时初始化,不需要new对象,静态变量的空间就开出来了。
2.静态变量存储在方法区。
4. 关于方法来说,什么时候定义为实例方法?什么时候定义为静态方法?
1.思想角度
如果说该行为必须由对象去触发,那么该方法定义为实例方法。
2.代码角度
当这个方法体当中,直接访问了实例变量,这个方法一定是实例方法。
我们在开发当中,大部分情况下,如果是工具类的话,工具类当中的方法一般都是静态的。静态方法有一个优点就是不需要new对象,直接采用类名调用,极其方便。工具类就是为了方便,所以工具类中的方法一般都是static的。
5.static修饰代码块
static块可以置于类中的任何地方,类中可以有多个static块。
在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次。
public class Test02 {
public static void main(String[] args) {
test.getTest();
}
class test{
static {
System.out.println("静态代码块输出");
}
public static void getTest(){
System.out.println("成员方法");
}
}
}
6.静态类
java中一个类要被声明为static的,只有一种情况,就是静态内部类(内嵌类)。如在外部类声明为static的,程序会编译都不会通过。
1、静态内部类,跟静态方法一样,只能访问静态成员变量和方法,不能访问非静态方法和属性。
2、普通内部类,可以访问任意外部类的成员变量和方法。
3、静态内部类,可以声明普通成员变量和方法,而普通内部类不能声明static成员变量和方法。4、静态内部类,可以单独初始化。