1。掌握static的基本使用方法
1.1使用static声明属性
使用static可以声明全局属性,当修改其中一个对象的属性其他对象会一起修改。原因是每个对象的变量都在各自的堆内存中,但是static修饰的变量存放在数据区中,所有对象指都指向数据区中的一个内容,所以当修改了一个对象属性,则全部的二对象属性都会被修改。
package com.zhu;
class Person{
int age;
String name;
static String country="a城";
public Person(int age,String name){
this.age=age;
this.name=name;
}
public void info(){
System.out.println("姓名:"+name+",年龄:"+age+",城市:"+country);
}
}
public class StaticDemo {
public static void main(String[] args) {
Person per = new Person(15,"张三");
Person per1 = new Person(15,"李三");
Person per2= new Person(15,"王三");
per.country="b城";
per.info();
per1.info();
per2.info();
}
}
输出结果为:
E:\Java\jdk\bin\java.exe “-javaagent:E:\Java\IDEA\IntelliJ IDEA 2019.1.3\lib\idea_rt.jar=62223:E:\Java\IDEA\IntelliJ IDEA 2019.1.3\bin” -Dfile.encoding=UTF-8 -classpath E:\Java\jdk\jre\lib\charsets.jar;E:\Java\jdk\jre\lib\deploy.jar;E:\Java\jdk\jre\lib\ext\access-bridge-64.jar;E:\Java\jdk\jre\lib\ext\cldrdata.jar;E:\Java\jdk\jre\lib\ext\dnsns.jar;E:\Java\jdk\jre\lib\ext\jaccess.jar;E:\Java\jdk\jre\lib\ext\jfxrt.jar;E:\Java\jdk\jre\lib\ext\localedata.jar;E:\Java\jdk\jre\lib\ext\nashorn.jar;E:\Java\jdk\jre\lib\ext\sunec.jar;E:\Java\jdk\jre\lib\ext\sunjce_provider.jar;E:\Java\jdk\jre\lib\ext\sunmscapi.jar;E:\Java\jdk\jre\lib\ext\sunpkcs11.jar;E:\Java\jdk\jre\lib\ext\zipfs.jar;E:\Java\jdk\jre\lib\javaws.jar;E:\Java\jdk\jre\lib\jce.jar;E:\Java\jdk\jre\lib\jfr.jar;E:\Java\jdk\jre\lib\jfxswt.jar;E:\Java\jdk\jre\lib\jsse.jar;E:\Java\jdk\jre\lib\management-agent.jar;E:\Java\jdk\jre\lib\plugin.jar;E:\Java\jdk\jre\lib\resources.jar;E:\Java\jdk\jre\lib\rt.jar;E:\Java\project\out\production\Demo01 com.zhu.StaticDemo
姓名:张三,年龄:15,城市:b城
姓名:李三,年龄:15,城市:b城
姓名:王三,年龄:15,城市:b城
Process finished with exit code 0
java中有栈内存:保存对象的名称
堆内存:保存每个对象的属性
全局数据区:保存static类型的属性
全局代码区:保存所有方法的定义
调用static修饰的变量最好使用(类.属性)的方式调用。person.country=“b城”
1.2使用static声明方法
package com.zhu;
class Person1{
private int age;
private String name;
private static String country1="A城";
public static String getCountry() {
return country1;
}
public static void setCountry(String c) {//此方法直接可以由类名称调用。
country1 = c;
}
public Person1(int age,String name){
this.age=age;
this.name=name;
}
public void info(){
System.out.println("姓名:"+name+",年龄:"+age+",城市:"+country1);
}
}
public class ArraysDemo2 {
public static void main(String[] args) {
Person1 per = new Person1(15,"张三");
Person1 per1 = new Person1(15,"李三");
Person1 per2= new Person1(15,"王三");
Person1.setCountry("b城");//使用静态方法修改static属性内容
per.info();
per1.info();
per2.info();
}
}
1.3 static注意事项
使用static方法不能调用非static的属性和方法
package com.zhu;
class Person1{
private String name="hello";
private static String country1="A城";
public void Fun(String c){
System.out.println("姓名:"+name);//不能调用非static属性
fun()//错误的不能调用非static方法
}
public void fun(){
System.out.println("world");
}
}