Static关键字

1.static定义属性

!!!!static属性和方法可以在没有实例化的情况下直接由类名称调用!!!!

staic属性保存在全局数据区!!!!!

内存区一共分为四个:栈内存(存地址),堆内存(存普通属性),全局数据区(存放static数据),全局代码区(存放所有方法)。

一旦在属性定义上使用了static之后,只要有一个对象修改了属性的内容,那么其所有的对象对应的属性内容也随之改变。

static属性与普通属性(非static属性)最大的区别就是保持的内存区域的不同。

static属性和非static属性最大的区别:所有的非static属性必须产生实例化对象之后才可以访问,但是static属性不受实例化对象的控制,也就是说,在没有实例化对象产生的情况下,依然可以使用static属性。

static定义属性的一个特征:虽然定义在类结构里面,但是并不受到对象的控制,是独立于类存在的。

Q:那么什么时候使用static属性?什么时候不使用static属性?

A:在你编写类的过程中,你所选择的首要的修饰符一定不是static(大部分情况下),如果需要描述出共享信息的时候再使用static(可以方便集体修改,避免重复开辟内存空间)。

2.static定义方法

对于类中的方法则可分为static方法和非static方法。这两组方法间的访问也将受到限制:

    static方法不能直接访问非static属性或方法,只能够调用static属性或者方法。

    非static方法可以访问static属性或方法,不受任何的限制。

Q:那为什么会存在以上的限制呢?

A:所有的非static定义的结构,必须在类已经明确的产生了实例化对象才会分配堆内存空间,才可以使用。

A:所有的static定义的结构,不受实例化对象的控制,即可以在没有实例化对象时候访问。

3.主方法

实在是有点长..............

    public:主方法是程序的开始,所以这个方法对任何的操作都是可见的,那么就用public(公共)描述。

    static:证明此方法是由类名称调用的。

    void:主方法是一切的执行的开始点,既然是所有的开头,那么就不能够回头,执行完毕为止。

    main:是一个系统规定好的名次,不能被修改。

    String[] args:指程序运行时传递的参数

4.static的实际应用

1.实现类实例化对象个数的统计

希望每当实例化一个类的对象的时候都可以打印一个信息:产生的第x个实例化对象

class Took{
	private static int num=0;
	public Took() {
		num++;
		System.out.println("这是第"+num+"个产生的对象");		
	}
}
public class Test2 {
  public static void main(String[] args) {
        new Took(); new Took(); new Took();
        new Took(); new Took();	new Took();
  }

}

2.实现属性的自动设置

例如:某一个类有一个无参构造方法,一个有构造方法,有参构造主要的目的是传递一个title属性,但是希望不管调用的是无参的还是有参的构造,都可以为title设置内容(尽量不使用重复的内容设置)

class Took{
	private String title;
	private static int num=0;
	public Took() {
		this("NOTITLE-"+num++);
	}
	public Took(String title) {
		this.title=title;
	}
	public String getTitle() {
		return this.title;
	}
}
public class Test2 {
  public static void main(String[] args) {
    System.out.println(new Took("Java开发").getTitle());
    System.out.println(new Took().getTitle());
  }

}

此时就算没有设置title属性的内容那么结果也不会为null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值