Java入门-Static修饰成员变量的用法和特点

(一)掌握有无static修饰成员变量的用法和特点

(1)有static修饰的成员变量为:类变量(类的变量):无论创建多少个变量,都只共享一个name变量

(2)无static修饰的成员变量为:实例变量(对象的变量):每个创建的对象都有自己独立的age

Student类中:

package D1_StaticDemo;

public class Student {
    //类变量(类的变量):无论创建多少个变量,都只共享一个name变量
    static String name;//加上
    //实例变量(对象的变量):每个创建的对象都有自己独立的age
    int age;

}

创建Test类进行特点查看:

package D1_StaticDemo;



public class test {
    public static void main(String[] args) {
        //掌握有无static修饰成员变量的用法和特点
        //1.类变量的用法
        //类名.类变量实现访问static修饰的类变量(推荐)
        Student.name="元华";

        //2.类变量name也可以通过对象访问
        Student s1=new Student();
        s1.name="威望";

        Student s2=new Student();
        s2.name="石坝";//因为共用一个name变量,所以修改后由s1访问name时,显示:石坝
        System.out.println(s1.name);//石坝
        System.out.println(s2.name);
        //实例变量age只能由对象访问
        s1.age=13;
        s2.age=12;
        //s1,s2的age变量为实例变量,所以互不影响
        System.out.println(s1.age);
        System.out.println(s2.age);

    }

}

static:静态,可以修饰成员变量,成员方法。

类变量:属于类,与类一起加载,在内存中只有一份,可以被类和类的所有对象共享

实例变量:属于对象,每个对象中都有一份,只能用对象访问

(二)static修饰成员变量应用场景

在开发中,若某个数据只需要一份,且希望能够被共享(访问,修改),则该数据可以定义为类变量来记住

案例:系统启动后,要求用户类记住自己创建了多少个用户对象。

public class User{

//类变量

Public static int number ;

//构造器,每创建一个对象,number+1

public User(){

// User.number++;
 //在同样一个类中,访问自己的类变量,可以省略类名不写
 number++;

}

}

使用测试类查看效果:

package D1_staticDemo2;

public class test2 {
    public static void main(String[] args) {
        //通过案例理解类变量的应用场景
        User t1=new User();
        User t2=new User();

        System.out.println(User.number);


    }
}

(三)static修饰成员方法

根据有无static修饰分为类方法和实例方法

(1)类方法:有static修饰的成员方法,属于类,可以用类和对象触发访问

package D1_staticDemo3;

public class StaticMethod {
    public static void Print(){//加了static,变成类方法
        System.out.println("hello");
    }
}

在test中查看:

package D1_staticDemo3;

public class test3 {
    public static void main(String[] args) {
        //static修饰成员方法
        //1.类方法的用法
        StaticMethod.Print();//直接使用类访问
        StaticMethod s1=new StaticMethod();
        s1.Print();//使用对象s1访问类方法


    }
}

(2)实例方法:无static修饰的成员方法,属于对象,只能用对象来触发访问

在StaticMethod类中添加实例方法:

public void printPass(){

system.out.println("成绩判断");

}

在Test中访问:

s1.printPass();

(四)Static修饰的成员方法的应用场景

9f0a50cc24734358a48c257d85d8f339.jpg

 310cbd4f78024932b946a3706112b8e1.jpg

(五)Static的注意事项

455c576e2dc84f6cb03bf407945f3a1e.jpg

 因为实例方法和实例成员属于对象,而类方法属于类,在类方法中不能明确某一个对象,所以无法调用实例方法和实例对象

同理,this关键字也是指向对象,所以类方法中无法使用

(六)代码块

0ae06fa1dff34aee8d6d6ccc592c137f.jpg

 在加载类时会先调用静态代码块

aaed9241940a4ad9b515fe7a392ba666.jpg

 且调用一次c90d30fdbde042b382e542a6a2212085.jpg

 可以在静态代码块中对成员变量进行赋值

d15a914dcaea4f2cb9a437d08e289759.jpg

 实例代码块e1f1ea4ecebc4615aa2fbc6e48f45105.jpg

 实例代码块作用,记录日志,避免在有参构造器和无参构造器中重复写

(七)单例设计模式

饿汉式单例,第一次调用类时创建对象(类变量会随着类的创建一起运行)

懒汉式单例在使用时才创建对象

  • 25
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半截詩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值