※static:
表示的静态的意思,属于类的,当使用到这个类的时候会静态加载静态的属性以及方法。
--static用于修饰变量和方法、代码块
--有static修饰的则为静态的,没有的则为非静态
--静态的是属于类的 静态的东西是每个对象都共享的【同一个内存区域】
--而非静态是属于对象的,每个对象都有一个独立的内存空间【互不干涉】
--静态方法可以通过类名直接访问
--非静态的属性和方法要通过对象访问访问
--非静态代码块可以直接访问当前类中的非静态方法和属性
--静态的代码块中,不能直接访问非静态的方法和属性,除非通过对象调用
思考:什么时候使用静态,什么时候使用非静态
工具方法、常量使用静态修饰,同一个类中共享的可以静态
定义类时的成员方法以及属性一般就是非静态修饰
/**
* @author Lantzrung
* @date 2022年7月22日
* @Description
*/
public class Person {
private String name;
private String sex;
private int age;
public static void main(String[] args) {
// 创建两个新的对象
Person p1 = new Person("zhang", "nan", 26);
Person p2 = new Person("li", "nan", 18);
// 输出p1和p2的值
System.out.println(p1);// Person [name=zhang, sex=nan, age=26]
System.out.println(p2);// Person [name=li, sex=nan, age=18]
// 给静态变量赋值
// 操作二:
// 静态的属性和方法在类加载的时候已经在方法区中分配了内存
p1.item = 15;
System.out.println(p1.item);// 15
System.out.println(p2.item);// 15
// 操作四:
// static的方法、变量可以直接使用类名来调用
System.out.println(Person.item);
// 调用静态的方法
p1.test();
}
// static使用的注意事项:
// static用于修饰变量、方法、类
// static静态的是属于类的,非静态是属于对象的【静态与非静态的区别】
// static的方法、变量可以直接使用类名来调用
// static修饰的变量--当前的类变量
// 静态的代码块不能直接调用非静态的属性及方法,除非通过对象调用【内存的分配】
// 静态的属性和方法在类加载的时候已经在方法区中分配了内存
// 操作一:
// 定义一个静态变量
public static int item = 10;
// 操作三:
// 定义一个静态的测试方法
public static void test() {
// Cannot make a static reference to the non-static field name
// 意思就是:静态的方法中不能调用非静态的引用
// 静态的代码块不能直接调用非静态的属性及方法,除非通过对象调用【内存的分配】
// System.out.println(name);
// System.out.println(getName());
// 解决办法:
// 需要创建一个新的对象来进行调用
Person p = new Person();
System.out.println(p.name);
System.out.println(p.getName());
}
// 非静态的方法
// 可以直接调用
public void test1() {
System.out.println(name);
System.out.println(getName());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Person() {
super();
}
public Person(String name, String sex, int age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", sex=" + sex + ", age=" + age + "]";
}
}
-- 操作二: