static的特点:(可以修饰成员变量和成员方法)
1.随着类的加载而加载。
2.优先于对象存在。
3.被类的所有对象共享。(判断是否用static修饰,只需要看其是否被所有对象共享)
4.可以用对象名调用也可以直接通过类名调用。
5.static修饰的内容与类相关称之为类变量,非静态修饰的内容称之为实例变量。
static使用注意事项:
1.静态方法中没有this关键字。(静态修饰的内容是随着类的加载而加载,this随着对象的创建而存在,静态修饰的内容比对象先存在)。
2.静态方法只能访问静态的成员变量和静态的成员方法
静态方法:
成员变量:只能访问静态变量。
成员方法:只能访问静态成员方法。
非静态方法:
成员变量:即可以访问静态变量又可以访问非静态变量。
成员方法:既可以访问静态的方法又可以访问非静态的成员方法。
静态只能访问静态,非静态可以访问一切。
静态变量和成员变量的区别:
1.所属不同:
静态变量:属于类,类变量。
成员变量:属于对象,实例变量
2.存储位置不同
静态变量:方法区的静态区。
成员变量:堆内存。
3.生命周期不同
静态变量:随着类的加载而加载,随着类的消失而消失。
成员变量:随着对象的创建而存在,随着对象的消失而消失。
4.调用方式不同
静态变量:可以通过对象名调用也可以直接通过类名调用。
成员变量:只能通过对象名调用。
package Student;
public class Student {
private String name;
private int age;
static String country;
public Student(String name,int age) {
this.name = name;
this.age = age;
}
public Student(String name,int age,String country) {
this.name = name;
this.age = age;
this.country = country;
}
public static void show() {
//静态方法只能访问静态变量
System.out.println(country);
}
public void method() {
//非静态方法既可以访问静态变量也可以访问非静态变量
System.out.println("姓名:"+name+",年龄:"+age+",国籍:"+country);
}
}
package Student;
public class StudentDAO {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student p1 = new Student("林青霞",27,"中国");
p1.method();
Student p2 = new Student("刘德华",50);
p2.method();
Student p3 = new Student("周润发",50);
p3.method();
//通过类名直接调用
Student.show();
Student.country = "美国";
Student.show();
}
}