Java的面向对象

15-static关键字

2021-07-06 925 0

简介 static关键字可以修饰属性、方法、代码块、内部类等结构...

1. static修饰属性

    当我们编写一个类时,其实就是在描述该类的对象的属性和行为,而此时并没有产生实质上的对象,只有通过new关键字才会产生对象,这时系统才会分配内存空间给对象,其方法才可以供外部调用。

    我们有时候希望无论是否产生了对象或无论产生了多少对象,某些特定的数据在内存空间里只有一份,例如所有的中国人都有个国家名称,每一个中国人都共享这个国家名称,不必在每一个中国人的实例对象中都对国家名称赋值。

    static关键字的使用

    static,翻译成中文是静态的,该关键字可以用来修饰属性、方法、代码块、内部类

    属性,按是否使用static修饰,又分为静态属性和非静态属性(实例变量)

    非静态属性(实例变量):我们创建了类的多个对象,每个对象都独立的拥有一套类中的非静态属性。当修改其中一个对象中的非静态属性时,不会导致其他对象中同样的属性值的修改。

    静态属性(或类变量):使用static修饰属性,我们创建了类的多个对象,多个对象共享静态属性。当通过某一个对象修改静态属性时,其他对象的此静态属性也被修改。类中static修饰的属性是属于类的,所有该类的对象共享。

    static修饰属性的其他说明:

    ① 静态属性随着类的加载而加载。可以通过"类.属性名"的方式进行调用

    ② 静态属性的加载要早于对象的创建。

    ③ 由于类只会加载一次,则静态属性在内存中也只会存在一份:存在方法区的静态域中。

    静态属性举例:System.out; Math.PI;


//StaticTest.java
package com.ylaihui.oop10;

class Chinese{
    	static String nation;
    	String name;
    	int age;
}

public class StaticTest {
	public static void main(String[] args) {
		Chinese.nation = "中国";
		
		Chinese c1 = new Chinese();
		c1.name = "姚明";
		c1.age = 40;

		Chinese c2 = new Chinese();
		c2.name = "马龙";
		c2.age = 30;
		
		c1.nation = "CH";
		c2.nation = "CHINA";
		
		System.out.println(c1.nation); //CHINA
		System.out.println(c2.nation); //CHINA
	}
}



2. static修饰方法

    使用static修饰方法称为静态方法

    静态方法是随着类的加载而加载的,可以通过"类.静态方法"的方式进行调用

    静态方法中,只能调用静态的方法或静态属性(很好理解,如果能调用非静态属性或非静态方法,如果还没有new对象,此时没有对象呢,要调用谁的呢?)

    非静态方法中,既可以调用非静态的方法和非静态属性,也可以调用静态的方法和静态的属性

    static注意点:

    在静态的方法内,不能使用this关键字、super关键字 (同样的道理,此时还不一定有对象,谁是this?谁是super呢?)

    如何确定一个属性是否要声明为static的?

    属性是可以被多个对象所共享的,不会随着对象的不同而不同的。

    类中的常量也常常声明为static

    如何确定一个方法是否要声明为static的?

    操作静态属性的方法,通常设置为static的

    工具类中的方法,习惯上声明为static的。 比如:Math、Arrays、Collections



点赞 0

文章评论

欢迎您:

纸上得来终觉浅,绝知此事要躬行!

112 文章 70348 浏览 3 评论

联系我

  •   QQ:    361352119
  •  Email:  lisimmy@sina.com
  • 微信: