Java学习笔记-static关键字

Java学习笔记——Static关键字有关

static关键字的概念

static关键字,在书本上的描述是“如果有些属性希望被所有对象共享,则就必须将其声明为static属性”,其实书上的语言描述起来有一点点啰嗦,其实对于static我们可以直接理解为C/C++里面的全局变量。如果想把某个属性改变成所有对象都能使用的,在属性声明之前加个“static”就OK了。

static关键字的用途

1.声明属性

和上面讲到的一样,如果想将一个属性作为全局属性使用,在属性定义之前加一个static,例如

class Person{//定义一个“人”类
	String name;//名字
	int age;//年龄
	String Country="美国";//所在国家
}

此时假设我们已经产生了1000个这样的对象,现在发现这些“人”的所在国家不是美国而是天朝,此时如果我们依次对1000个对象进行修改会非常麻烦。而现在如果我们将Country变量改成全局变量,这样只需要对Country中的内容修改一次,便可以改变所有对象中Country的内容

class Person{//定义一个“人”类
	String name;//名字
	int age;//年龄
	static String Country="中国";//所在国家,使用static关键词
}

其实要理解为什么,就与Java中的内存区域有关。在Java中有栈内存空间、堆内存空间、全局数据区、全局代码区,四个内存区域,有static关键字定义的对象被保存在全局数据区空间中,如下图所示,因此才会起到改变全局对象变量的效果。

渣画技.JPG

如何修改static属性

其实只要不是private属性,都可以直接对其进行操作,例如

Person.Country="中国";

如果是private属性就要使用Getter和Setter方法

使用static声明方法

用static来声明的方法,可以被称为“类方法”,可以由类名称直接调用,如下面的代码段所示

package forstatic;

class Person{
	private String name;//定义name,age,ID属性
	private int age;
	private static String city="City A";//定义static city
	
	public static String getCity() {
		return city;
	}
	
	public static void setCity(String city) {
		Person.city = city;
	}

	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public void info() {
		System.out.println("姓名:"+this.name+" 年龄:"+this.age+" 城市:"+city);
	}
}

public class Usestatic {
	public static void main(String[] args) {
		Person p1=new Person("小李",20);
		Person p2=new Person("小刘",21);
		Person p3=new Person("小张",22);
		System.out.println("——————————————修改之前—————————————");
		p1.info();
		p2.info();
		p3.info();
		System.out.println("——————————————修改之后—————————————");
		Person.setCity("City B");
		p1.info();
		p2.info();
		p3.info();
	}
}

在上面的代码中,如果对person类中的属性进行修改,就必须使用getter或者setter方法,例如:

p1.setAge(18);

但是由于setCity方法由static修饰,因此可以直接用类名称调用,例如

Person.setCity("City B");

上面代码的执行结果为

姓名:小李 年龄:20 城市:City A
姓名:小刘 年龄:21 城市:City A
姓名:小张 年龄:22 城市:City A
——————————————修改之后————————————————
姓名:小李 年龄:20 城市:City B
姓名:小刘 年龄:21 城市:City B
姓名:小张 年龄:22 城市:City B

要注意的是,非static声明的方法可以去调用static声明的方法或者属性,但是static声明的方法不能调用非static类型声明的属性或者方法!

修饰代码块

静态代码块在第一次载入类的时候被执行,而且只执行一次!,而且静态内容优先于非静态内容,这里就不多做解释了,我认为只需要记住在载入类时只执行一次就OK了

总结

1、static是一个修饰符,可以用来修饰属性或者方法),static修饰的成员变量叫做静态变量或者类变量。

2、static修饰的属性(或方法)被所有的对象共享(类似于C/C++中的全局变量)。

3、static修饰的属性相比于平常的属性多了一种调用方式,可以直接被类名称所调用。



本人在学习java时所作的笔记以及一些重要内容的回顾总结与记录
使用的教材为《Java开发实战经典》
学了一阵子java了才写笔记,其实就是我懒,希望xdm不要学我

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值