定义一个Person类
成员变量:
姓名,年龄,国籍
class Person {
private String name;
private int age;
private String country;
// 完成对应的Constructor,Setter and Getter
}
需求:
创建三个Person类对象,国籍都是 中华人民共和国
代码:
Person p1 = new Person("骚磊", 16, "中华人民共和国");
Person p2 = new Person("骚杰", 26, "中华人民共和国");
Person p3 = new Person("茂林", 36, "中华人民共和国");
Java_Day22:static以及构造代码块、静态代码块的概述
package com.qfedu.a_staticfield;
/*
* 【警告】
* The static field Person.country should be accessed in a static way
* 在Person类内的static修饰成员变量country 应该通过静态方式访问
* 【处理警告方式】
* 使用Person类名操作静态成员变量
*
* 【数据共享性】
* 静态成员变量不管通过哪一种方式修改操作数据,都会影响到所有使用的位置
*
* 【没有对象】
* 1. 在对象未创建的情况下,静态成员变量可以通过类名直接调用
* 2. 在对象被销毁的情况下,静态成员变量依然可以通过类名直接调用
*/
class Person {
private String name;
private int age;
public static String country = "中华人民共和国";
public Person() {
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
public class Demo1 {
public static void main(String[] args) {
// 静态成员变量在没有创建对象的情况,可以通过类名使用
System.out.println("Person.country: " + Person.country);
// 匿名对象作为方法的参数
test(new Person());
// 54行代码执行完毕,是否还存在Person类的对象? 没有对象!!!
System.out.println("Person.country: " + Person.country);
}
public static void test(Person person) {
System.out.println(person);
}
}
1. static修饰静态成员变量是一个【共享资源】,但是需要明确当前代码中的确需要对应的共享资源之后,才可以使用static修饰,而且static修饰的方式只是共享资源解决案例的一种。
例如:
姓名,年龄,家庭住址...[以上数据不能使用静态]
2. static修饰静态成员变量,推荐使用类名调用,因为【没有对象】
3. static修饰的静态成员变量,一处修改,处处受影响,因为【共享资源】
4. static修饰的静态成员变量,在类对象创建之前出现,在类对象销毁之后销毁,生存周期不同,所有【没有对象】
【没有对象】
PSFP private static final Person
3.static修饰成员方法【重点】
3.1 比葫芦画瓢 main方法
public static void main(String[] args) {
}
main方法就是一个静态方法。
JVM运行main方法的时候是不需要依赖于任何的对象操作
静态方法的运行是不依赖于类对象!!!
3.2 static修饰静态成员方法案例
package com.qfedu.b_staticmethod;
/*
* 【警告】
* The static method testStatic() from the type Car should be accessed in a static way
* 在Car类static修饰的静态成员方法testStatic() 应该通过静态方法访问
* 【建议】
* static修饰的方法全部采用类名访问!!!
*
* 【错误】
* Cannot make a static reference to the non-static field name
* 在静态成员方法中,不能使用一个静态的引用指向一个非静态成员变量。
* 在静态成员方法中,不能使用非静态成员变量
*
* 【错误】
* Cannot make a static reference to the non-static method test() from the type Car
* 在一个静态成员方法中,不能使用一个静态引用去操作Car类内的非静态成员方法test();
* 在静态成员方法中,不能使用非静态成员方法
*
* 【错误】
* Cannot use this in a static context
* 不能在static修饰的静态内容中,使用this关键字
*
* 【可以使用】
* 静态成员方法中可以使用类内的其他静态成员变量,和其他静态成员方法。
* 【难兄难弟】
*/
class Car {
// 非静态成员变量
public String name;
// 静态成员变量
public static String color = "白色";
public Car() {}
// 非静态成员方法
public void test() {
System.out.println("Car类【非静态成员方法】");
}
// 静态成员方法
public static void testStatic() {
// name = "A4L";
// test();
// this.name = "ATSL";
color = "黑色";
test2();
System.out.println("Car类【静态成员方法】");
}
public static void test2() {
System.out.println("12321321");
}
}
public class Demo1 {
public static void main(String[] args) {
Car car = new Car();
// 通过类对象操作非静态成员变量
car.name = "领克05";
Car.color = "黑色";
car.test();
// 推荐使用类名调用静态成员方法
Car.testStatic();
}
}