• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Jay_zhen
博客园    首页    新随笔    联系   管理    订阅  订阅
关键字 static
  • 非static
    实例变量instance variable 是属于类的每一个对象,不受其他对象属性改变的影响
    非静态方法中,既可以调用非静态的方法或属性,也可以调用静态的方法或属性

static相反 不因对象的不同而改变→
由于类只会加载一次,静态变量在方法区的静态域中,只会存在一份内存。

  1. 类变量class Variable / 类属性:可以被多个对象所共享,不会随着对象的不同而不同的。
  2. 类方法:不需要创建对象就可以调用,从生命周期的角度去理解
    静态的方法内,不能使用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:

  • 内存解析
  1. 修饰代码块

  2. 修饰内部类

posted on 2021-12-29 10:08  Jay_zhen  阅读(46)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3