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关键字定义的对象被保存在全局数据区空间中,如下图所示,因此才会起到改变全局对象变量的效果。
如何修改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不要学我