Hello 大家好,开始更新有关Java的文章,第一篇就是关于static关键字的,个人认为这个this关键字是Java中蛮重要的,一定要清楚地掌握才可以
static是静态的意思,是一个修饰符,就像是一个形容词,是用来形容类,变量,方法的。在声明static关键字时,可以在前面加上static修饰,用static修饰的成员变量称做类变量(static变量、静态变量)
说了一些static关键字的基本理念和它的作用,空谈不行,要将其应用到实例化代码中,接下来讲讲静态变量和实例变量的声明
class System{
int name; //姓名
int num; //编号
static int onlineNumber; //在线人数
}
注意:只要成员变量可以用static关键字修饰,普通的局部变量不可以,是非法的
public class User {
//static修饰的成员变量,内存中只有一份,可以被共享
public static int onlineNumber = 16;
//静态成员变量,直接用类名访问
//实例成员变量 - 用对象访问
private String name;
private int age;
public static void main(String[] args) {
//直接用类名访问,不用对象
//1.类名.静态成员变量
System.out.println(User.onlineNumber);
//2.对象名.实例成员变量
User u = new User();
//System.out.println(User.name); 不能用类名去访问实例成员变量
u.name = "张三";
u.age = 21;
System.out.println(u.name);
System.out.println(u.age);
System.out.println("-----------");
u.onlineNumber++; //新来了一个人
User u2 = new User();
u2.name = "李四";
u2.age = 22;
System.out.println(u2.name);
System.out.println(u2.age);
System.out.println("-----------");
u2.onlineNumber++; //体现了共享的特点
System.out.println(u.onlineNumber);
System.out.println(User.onlineNumber);
System.out.println(onlineNumber);
//同一个类中静态成员变量的访问可以省略类型
}
}
u.onlineNumber++;
u2.onlineNumber++;
//System.out.println(User.name); 不能用类名去访问实例成员变量
System.out.println(u.onlineNumber);
System.out.println(User.onlineNumber);
System.out.println(onlineNumber);
//同一个类中静态成员变量的访问可以省略类型
//静态方法 - 实现通用功能
public static int getMax(int x,int y){
return x > y ? x : y;
}
//实例方法 - 直接访问对象的实例成员
public void speak(){
name = "张三";
System.out.println(name + "在说话");
}
注意: static关键字需要放在方法的类型之前,而不可以乱放置;而且不可以用static修饰构造方法
接下来说一说两种方法之间的差异性
那如何将变量和方法联系起来呢,接下来我们就来说说
public static void main(String[] args) {
//1.类名.静态成员方法
System.out.println(Student.GetMax(10, 30));
System.out.println(GetMax(50, 99)); //可不用类名
//study(); 需要对象名去访问
//2.对象名.实例方法
Student st = new Student();
st.name = "孙悟空";
st.study();
//3.对象名.静态成员方法(语法可行,但是不推荐)
System.out.println(st.GetMax(1,9));
}
对于静态的东西,直接用类名调用即可,不会出错
下面是一句代码的内存结构图,可以很形象地展示出用类名调用类方法的过程
1、静态方法只能访问静态的成员,不可以’直接’访问实例成员
2、实例方法可以访问静态的成员,也可以访问实例成员
3、静态方法中是不可以出现this关键字的
我们到具体的代码中来看
package com.itheima.d1_static_field;
//static 访问注意事项:
public class Test3 {
public static int OnlineNum = 100;
String name;
//1.静态方法只能访问静态的成员,不可以'直接'访问实例成员
public static void gg()
{
System.out.println(OnlineNum);
System.out.println(Test3.OnlineNum);
// System.out.println(name); //不可以直接访问实例成员
Test3 t3 = new Test3();
System.out.println(t3.name); //但是可以创建临时变量来间接访问
}
}
public static void hold()
{
System.out.println("====ff====");
}
//2.实例方法可以访问静态的成员,也可以访问实例成员
public void run()
{
OnlineNum = 200;
hold(); //体现了静态变量和静态方法共享的特性
name = "张三";
System.out.println(this); //可以出现在实例方法中
}
//3.静态方法中是不可以出现this关键字的
public static void ff()
{
//System.out.println(this); //this代表当前对象
}
好的,我们本文的内容就讲到这里,关于static在Java中的基础知识,通过这篇文章,相信大家已经有所收获,如果还觉有些模糊,可以自己去编译器中运行一下(我用的IDEA),感受一下这个关键字的魅力
有关static关键字的应用知识会在下篇文章讲到,如果想知道记得关注我哦,本文如果有任何疑问,可以于评论区或私信留言,感谢您的观看