static关键字,static修饰类成员,static修饰方法

static关键字

作用:

用static修饰的类成员,在内存中多个对象中【共享】一块内存

示意图:

在这里插入图片描述

static修饰类成员

实例:

学生类,此类用于建立学生对象的基本信息,快速阅读本文重点只需要关注 school 和 idCounter
school用于展示static修饰的内容共享一块内存
idCounter用于实现每创建一个学生对象使id序号自动+1

package y20.m9.constructionMethod;

/**
 * @author WuZS
 * @date 2020/10/7 22:08
 *
 * 学生类,包含 学号、姓名、年龄、学校信息
 * 注:【学号】不能自主赋值,从1号开始,每新建一个学生对象自动向下顺延
 */
public class Student {
    private int id;
    private String name;
    private int age;
    /**
     * 所有学生对象共享一个idCounter
     */
    private static int idCounter=0;
    private  static String school;

    /**
     * //    新建学生对象没有输入信息时只顺延学号
     */

    public Student(){
        ++idCounter;
        this.id=idCounter;
        System.out.println("构造方法1");
    }

    /**
     * @param name
     * @param age
     * //    新建学生对象录有输入信息时录入信息并顺延学号
     */

    public Student(String name,int age){
        this.name=name;
        this.age=age;
        this.id=++idCounter;
        System.out.println("构造方法2");
    }
    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public int getId() {
        return id;
    }

    public void setSchool(String school) {
        Student.school = school;
    }

    public  String getSchool() {
        return school;
    }
}

主控类,此类用于操作学生对象
在本类中创建了3个学生对象,其中 One 和 Two 初始化时没有带参数,所以 One、Two 与 Three 在创建时调用的是不同的构造方法
给 One.school 赋值,打印 Three.school 的值发现与 One.school 一样,体现了上文提到的【共享性】

package y20.m9.constructionMethod;

/**
 * @author WuZS
 * @date 2020/10/7 22:09
 */
public class Console {

    public static void main(String[] args) {
        Student One = new Student();
        Student Two = new Student();
        Student Three= new Student("LiMing",99);
        One.setSchool("哈尔滨佛学院");
        System.out.println(Three.getName()+ " " + Three.getSchool());

        System.out.println(One.getName() + One.getId() + "\n" + Two.getName() + Two.getId() + "\n" + Three.getName() + Three.getId());
    }
}

输出

构造方法1
构造方法1
构造方法2
LiMing 哈尔滨佛学院
null1
null2
LiMing3

static修饰方法(静态方法)

概念:
用static修饰的方法叫做静态方法,静态方法属于【类】,不属于对象

public class Console(){
	private static void main(String[] args){
	//静态方法是属于类的,所以可以用【类名.静态方法名】的形势调用
		Student.staticMethod();
	//静态变量同理
		System.out.print(Student.school);
	
	//当然,也可以采用调用对象方法的方式调用静态方法
	//编译器会将其自动转成【类名.静态方法/变量名】的格式
		Student One = new Student();
		One.staticMethod();
		System.out.print(One.shool);
	}
}
public class Student(){
	private int id;
	private static int school ="南山敬老院";
	public static void staticMethod(){
		System.out.print(school);
	}

注意:
1.静态不能直接(要通过对象间接)访问非静态
原因:内存中先有静态内容,后有非静态内容,先人不知后人

2.静态方法中不能用this
原因:this表示当前对象,
代码举例

public class Student(){
	private int id;
	private static int school ="南山敬老院";
	public static void staticMethod(){
		//ERROR,静态不能直接访问非静态
		System.out.print(id);
		
		//Right
		System.out.print(school);
	}
	public void unstaticMethod(){
		//非静态可以直接访问静态,先人不知道后人,但后人知道先人
		System.out.print(school)
	}
}

static静态内存结构

在这里插入图片描述

静态代码块

概念:

第一次用到本类时,执行唯 一 一 次;

举例:

public class Student(){
	static{
		System.out.print("静态代码块执行");
	}
	public Student(){
		System.out.print("构造方法执行")
	}
}

因为静态内容总是先于非静态内容执行,所以输出会是如下形式

静态代码块执行
构造方法执行
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值