一、static是什么
1.1 static的介绍
static是静态的意思,可以修改成员变量和成员方法
stati修改成员变量表示该成员变量在内存中只存储一份,可以被共享访问、修改
1.2成员变量的格式
静态成员变量创建格式
public class user {
/**
* 在线人数
* 注意Static修饰的成员量 在内存只有一份
*/
public static int onlineNumber = 161;
}
(1) 静态成员变量的引用(有static修饰,属于类,内存中加载一次):常表示如在线人数,等需要被共享的信息,可以被共享访问。
类名.静态成员变量(推荐)
对象.静态成员变量(不推荐)
//1.类名.静态成员变量
System.out.println(user.onlineNumber);
//2.对象.静态变量(不推荐)
user u = new user();
System.out.println(u.onlineNumber);
(2)实例成员变量(无staic修饰,存在于每个对象中):常表示姓名name、年龄age、等属于每个对象的信息
public static int onlineNumber = 161 ;
//实例成员变量
private String name;
private int age;
对象名.实例成员变量
//对象名.实例成员变量
user1 u = new user1();
u.name = "张三";
u.age = 16;
1.3总结
static修饰的变量,既无论创建多少个对象,只要是这个类面的,便都可以调用,存储的位置也是一样的。
而无static修饰的变量,则会分开存储,变量之间的存储互不干扰。
二、 static的修饰方法
2.1 成员方法的分类
(1)静态成员方法(有static修饰,归属于类,建议用类名访问,也可以用对象访问。
(2)实例成员方法(无static修饰,归属于对象),只能用对象触发访问。
2.1.1静态成员法
public class student {
/**
* 静态成员的方法,有static修饰,归属于类,可以被共享访问,用类名和对象名都可以访问
*/
public static int getMax(int age1, int age2) {
return age1 > age2 ? age1 : age2;
}
public static void main(String[] args){
//1.类名.静态成员方法
System.out.println(student.getMax(10,3));
//注意:同一个类中,访问静态方法,类名可以省略不写
System.out.println(getMax(10,3));
//3.对象.静态方法(语法可行,但是不推荐)
System.out.println(s.getMax(10,3));
}
}
2.1.2实例成员法
public class student {
/**
* 实例成员变量 : 无static修饰,属于对象
*/
private String name;
/*
实例方法:属于对象,只能用对象触发访问
*/
public void study(){
System.out.println(name);
}
public static void main(String[] args){
//因为study(); 没有static修饰所以报错
//2.对象.实例法
student s = new student();
s.name = "猪八戒";
s.study();
}
}
2.1.3总体代码
public class student {
/**
* 实例成员变量 : 无static修饰,属于对象
*/
private String name;
/**
* 静态成员的方法,有static修饰,归属于类,可以被共享访问,用类名和对象名都可以访问
*/
public static int getMax(int age1, int age2) {
return age1 > age2 ? age1 : age2;
}
/*
实例方法:属于对象,只能用对象触发访问
*/
public void study(){
System.out.println(name);
}
public static void main(String[] args){
//1.类名.静态成员方法
System.out.println(student.getMax(10,3));
//注意:同一个类中,访问静态方法,类名可以省略不写
System.out.println(getMax(10,3));
//因为study(); 没有static修饰所以报错
//2.对象.实例法
student s = new student();
s.name = "猪八戒";
s.study();
//3.对象.静态方法(语法可行,但是不推荐)
System.out.println(s.getMax(10,3));
}
}
三、static访问注意事项:
- 静态方法只能访问静态成员,不能直接访问实例成员
- 实例方法可以访问静态成员,也可以访问实例成员
- 静态方法中不可以出现this关键字
3.1静态方法只能访问静态成员,不能直接访问实例成员,但可以通过创建一个对象,间接访问
public class text3 {
public static int onlineNumber = 10;
public static void test2(){
System.out.println("==text2===");
}
/*
实例成员
*/
private String name;
public void run(){
System.out.println(name + "跑得快");
}
//1.静态方法只能访问静态成员,不能“直接“访问实例成员
public static void test()
{
//可以类名.静态变量访问
System.out.println(text3.onlineNumber);
//可直接访问静态成员
System.out.println(onlineNumber);
//System.out.println(name);直接访问实例成员会报错
//可以新建一个对象,访问
text3 text = new text3();
System.out.println(text.name);
//当然run()直接访问实例方法也会报错
text.run();//也需要一个对象来进行间接访问
}
}
3.2实例方法可以访问静态成员,也可以访问实例成员
public class text3 {
public static int onlineNumber = 10;
public static void test2(){
System.out.println("==text2===");
}
/*
实例成员
*/
private String name;
public void run(){
System.out.println(name + "跑得快");
}
//2.实例方法可以访问静态成员,也可以访问实例成员
public void go()
{
System.out.println(text3.onlineNumber);//类名.静态变量成员访问
System.out.println(onlineNumber);//静态成员变量访问
test2();//静态方法访问
System.out.println(name);//实例成员访问
run();//实例方法访问
}
}
3.3静态方法中不可以出现this关键字,因为this只能代表当前对象,而静态方法的共享性不只代表当前对象。
//3.静态方法中不可以出现this关键字
public static void test3()
{
//System.out.println(this); 这里this只能代表当前对象!!
}