- 非static
实例变量instance variable 是属于类的每一个对象,不受其他对象属性改变的影响
非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性
static相反 不因对象的不同而改变→
由于类只会加载一次,静态变量在方法区的静态域中,只会存在一份内存。
- 类变量class Variable / 类属性:可以被多个对象所共享,不会随着对象的不同而不同的。
- 类方法:不需要创建对象就可以调用,从生命周期的角度去理解
静态的方法内,不能使用this关键字、super关键字,只能调用静态的方法或属性
工具类中的方法,习惯上声明为static的。 比如:Math、Arrays、Collections
测试codeStaticTest()
package classobject.lzq06.staticfinal;
/**
* @author Liuzhen
* @create 2021-11
*/
public class StaticTest {
public static void main(String[] args) {
Chinese.nation = "中国";
Chinese c1 = new Chinese();
c1.name = "马龙";
c1.age = 31;
c1.nation = "CHN";
Chinese c2 = new Chinese();
c2.name = "孙杨";
c2.age = 28;
Chinese.nation = "CHINA"; //类.静态属性
System.out.println("创建冠军的人数为:" + Chinese.getTotal());
System.out.println("TA们来自"+c1.nation); //CHINA
System.out.println();
System.out.println("****对象.非静态/静态方法****");
//编译不通过 Chinese.name = "张培萌"; 不应该赋 实例对象的属性
c1.eat();
System.out.println();
System.out.println("****类.静态方法****");
Chinese.show();
//编译不通过 Chinese.eat(); Chinese.info();
}
}
Chinese类
class Chinese{
String name;
int age;
static String nation;
private static int total = 0;//记录创建的对象个数
public Chinese(){
total++;
}
public void eat(){
System.out.println("中国人能吃中餐");
this.info();
}
public void info(){
//调用非静态结构
System.out.println("调用非静态结构 name :" + name +",调用非静态结构age : " + age);
//调用静态结构
walk();
}
public static int getTotal() {
return total;
}
public static void show(){
System.out.println("Static我是一个中国人!");
//不能调用非静态的结构
//name = "Tom";
//可以调用静态的结构
walk();
}
public static void walk(){
System.out.println("Static中国人都能走路");
}
}
RunResult:

- 内存解析
![]()
-
修饰代码块
-
修饰内部类

浙公网安备 33010602011771号