static使用方法
如果一个成员变量使用了static关键词,那么这个变量不在属于对象自己,而是属于所在的类。多个对象共享同一份数据。
public class student {
private int id;//学号
private String name;//姓名
private int age;//年龄
static String room;//所在教室
private static int idconuter=0;//学号计数器
public student(){
this.id= ++idconuter;
}
public student(String name,int age) {//学号不在构造指定
this.name=name;
this.age=age;
this.id=++idconuter;
}
public void setName(){
this.name=name;
}
public String getName(){
return name;
}
public void setAge(){
this.name=name;
}
public int getAge(){
return age;
}
public void setId(){
this.id = id;
}
public int getId() {
return id;
}
}
public class demo01StaticField {
public static void main(String[] args) {
student one=new student("郭靖",19);
student two=new student("黄蓉",18);
one.room="101教室";//在创建对象是room使用的static关键字,所以在调用room时只要在同一类都可以使用
System.out.println("姓名"+one.getName()+
"年龄"+one.getAge()+"教室"+one.room+"学号"+one.getId());
//姓名郭靖年龄19教室101教室学号1
System.out.println("姓名"+two.getName()+
"年龄"+two.getAge()+"教室"+two.room+"学号"+two.getId());
//姓名黄蓉年龄18教室101教室学号2
}
一旦使用static修饰成员方法,那么这就成为了静态方法,静态方法不属于对象,而是属于类的
如果没有static关键字那么必需创建对象然后通过对象才能使用。
如果有static关键字我们可以直接通过类名称使用。
无论时成员变量还是成员方法。如果有了static都推荐使用类类名称进行调用
静态变量:类名称.静态变量
静态方法:类名称.静态方法()
对象名调用时在java.c翻译时也会被翻译成类名称使用
注意事项:静态方法只能访问静态变量不能访问非静态变量,而非静态变量可以访问静态或者非静态变量。
原因:1.因为在内存中是先有的静态内容候有的非静态内容。
先人不知道后人,后人知道先人。
2.静态方法当中不能用this。
原因:this代表当前对象,通过谁调用的方法,谁就是当前对象。而访问静态方法时用到类名点方法,没有用到对象。
package Demo01;
public class MyClass {
int num;//成员变量
static int numstatic;//静态变量
public void method(){
System.out.println("这是一个成员方法");
System.out.println(num);//成员方法可以访问非静态变量
System.out.println(numstatic);//成员方法可以访问静态变量
}
public static void methodstatic(){
System.out.println("这是一个静态方法");
System.out.println(numstatic);//静态方法可以访问非静态变量
//System.out.println(num);静态方法不能访问非静态变量
//System.out.println(this);静态方法不能使用this关键词
}
}
public class demo02methodstatic {
public static void main(String[] args) {
MyClass obj=new MyClass();//首先创建对象才可以使用没有static的成员方法
obj.method();
MyClass.methodstatic();//有static的方法属于类的,可以通过对象名来调用,也可以通过类名来调用。
obj.methodstatic();//两种方法都是对的,但是我们推荐使用类名来调用,让人们不以为那是一个普通方法。
Mymethod();
//Mymethod()在翻译的时候会被翻译成demo02methodstatic.Mymethod
}
//对于本类中的方法我们可以省略类名称。
public static void Mymethod(){
System.out.println("这是一个本类中的方法");
}
}