JAVA基础(49)---static及static修饰变量

static

所解决的问题

这里摘录一下《Java编程思想(第四版)》(《Java核心技术Ⅰ卷/Ⅱ卷》)里关于static关键字的一段原话:(P29)通常来说,当创建类时,就是在描述那个类的对象的外观与行为 。除非用new创建那个对象,否则,实际上并未获得任何对象。执行new来创建对象的时候,数据存储空间才被分配,其方法才供外界调用。有两种情形用上述方法是无法解决的。一种情形是,只想为某特定域分配单一存储空间,而不去考虑究竟要创建多少个对象,甚至根本不需要创建任何对象。另一种情形是,希望某个方法不与包含他的类的任何对象关联在一起。也就是说,即使没有创建对象,也能够调用方法。

简单来说,static的主要目的就是创建独立于具体对象的域变量与方法

static 的使用

static可以修饰方法,还可以修饰变量、代码块

static所修饰的方法和变量的特点

  1. 属于当前类所有,与对象无关
  2. 调用方式:不需要创建对象就能够直接使用,可以通过类名.属性名/类名.方法名()
  3. 存储空间:存在与方法区中静态区
package org.lanqiao.staticdemo;

public class CountObject {
	public static void main(String[] args) {
		Person p1 = new Person();
		System.out.println("Person类的对象的数量为:" + Person.objNum());
		Person p2 = new Person();
		System.out.println("Person类的对象的数量为:" + Person.objNum());
		Person p3 = new Person("张三" ,20);
		System.out.println("Person类的对象的数量为:" +  Person.objNum());
		System.out.println("Person类的对象的数量为:" +  Person.objNum());
		System.out.println("Person类的对象的数量为:" +  Person.objNum());
		
	}
	
	
}
/*
 * 统计person类创建对象的个数
 */
class Person{
	
	private String name;
	private int age;
        static int objNum = 0 ;
	public Person() {
		objNum++;
	}
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
		objNum++;
	}
	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;
	}
	
}

使用static所修饰的变量是属于当前类所有,是所有对象所共有的。
使用static所修饰的变量是随着类的加载而加载;而我们的成员变量 是随着对象的创建而创建
对于静态的变量的访问方式:类名.属性名

静态变量随着类的加载而创建,所以在Person加载到class区时,在静态区就已经创建了bojNum,当p1要进行访问时,底层实现其实是从class区Person存储的一个静态地址访问到的静态区。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值