package day1;
/**
* static关键字
*
* @author jack
*
* static修饰成员变量该变量为静态成员变量 所有对象共享的成员变量,可以用static修饰
* 静态成员变量只会在数据共享区维护一份,而非静态成员变量在每个对象中维护一份;
* 静态成员变量访问方式:
* 1.使用对象访问
* 格式:对象.静态变量名
* 2.使用类名访问(优先使用该方式)
* 格式:类名.静态变量名
* 非静态成员变量访问方式:
* 1.使用对象访问
* 格式:对象.非静态变量名
*
* static修饰方法 如果一个方法没有直接访问非静态成员,那么就可以使用static修饰,
* 一般用于工具类的方法
* 静态成员方法访问方式:
* 1.使用对象访问
* 格式:对象.静态成员方法名
* 2.使用类名访问(优先使用该方式)
* 格式:类名.静态成员方法名
* 非静态成员方法访问方式:
* 1.使用对象访问
* 格式:对象.非静态成员方法名
*
* 注意:
* 1.静态成员方法可以访问静态成员,但不能"直接"访问非静态成员;
* 2.非静态成员方法可以直接访问静态与非静态成员;
* 3.静态函数不能出现this或者super关键字;
*
* 静态数据的生命周期:静态成员变量数据是优先于对象存在的;
*
*
* 静态方法不能访问非静态成员?
* 静态方法内,只要存在对象,那么久可以访问该对象的非静态成员。
*
*
* 静态成员变量与非静态成员变量的区别:
* 1.作用上的区别
* 1.静态成员变量的作用是共享一份数据给所有对象;
* 2.非静态成员变量的作用是描述一类事物的共同属性;
* 2.数量和存储位置的区别
* 1.静态成员变量是存储在方法区内存中,而且只有一份数据;
* 2.非静态成员变量是存储在堆内存中,有n个对象就有n份数据;
* 3.生命周期的区别
* 1.静态成员变量数据随类文件的加载而存在,随类文件的消失而消失;
* 2.非静态成员变量数据随对象的创建而存在,随对象被垃圾回收器回收而消失;
*/
class Person {
String name; //非静态成员变量
static String country="中国"; //静态成员变量
// 非静态成员方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// 静态成员方法
public static String getCountry() {
System.out.println(country);
return country;
}
public static void setCountry(String country) {
Person.country = country;
}
public Person(String name) {
this.name = name;
}
@Override
public String toString() {
return "Person [name=" + name + ", country=" + country + "]";
}
}
public class Day1 {
public static void main(String[] args) {
Person p1 = new Person("张三");
Person p2 = new Person("李四");
Person.setCountry("俄罗斯");
System.out.println(Person.getCountry());
Person.country = "韩国";
Person.getCountry();
System.out.println(p1.toString());
System.out.println(p2.toString());
}
}
Java static关键字
最新推荐文章于 2023-11-22 13:28:53 发布