Static

一、引言

        什么是static?

        static读作静态,是java的一个关键字,可以用来修饰成员变量和成员方法

        java中的成员变量按照有无static修饰分为两种:类变量和实例变量

        java中有无修饰方法是类方法和实例方法

二、类变量

  1. 有static修饰,是属于类的,在计算机中只有一份,会被所有的累共享
  2. 使用方法直接用类名点的方式去调用

三、实例变量

  1. 无static修饰,是实例变量,是属于每个对象的
  2.  使用方法 通过创建对象再点 是属于对象的
    public class Student {
        //类变量
        static String name;
        //实例变量
        int age;
    }
    
    public class StudentTest {
        public static void main(String[] args) {
            //类变量
            //类名点的方式
            Student.name = "法外狂徒张三";
    
            //实例变量
            //创建对象
            Student student = new Student();
            student.age = 18;
        }
    }

四、修饰方法

 1、类方法

    1.1 static修饰的方法,可以被类名调用,是因为它是随着类的加载而加载的;
         所以类名直接就可以找到static修饰的方法             

 2、实例方法

    2.1 非static修饰的方法,需要创建对象后才能调用,是因为实例方法中可能会访问实例变                        量,而实例变量需要创建对象后才存在。所以实例方法,必须创建对象后才能调用。

public class Student{
    double score;
    
    //类方法:
    public static void printHelloWorld{
        System.out.println("Hello World!");
        System.out.println("Hello World!");
    }
    
    //实例方法(对象的方法)
    public void printPass(){
        //打印成绩是否合格
        System.out.println(score>=60?"成绩合格":"成绩不合格");
    }
}



public class Test2{
    public static void main(String[] args){
        //1.调用Student类中的类方法
        Student.printHelloWorld();
        
        //2.调用Student类中的实例方法
        Student s = new Student();        
        s.printPass();
        
        //使用对象也能调用类方法【不推荐,IDEA连提示都不给你,你就别这么用了】
        s.printHelloWorld();
    }
}

 3、工具类

    3.1 如果一个类中的方法全都是静态的,那么这个类中的方法就全都可以被类名直接调用,由于调用起来非常方便,就像一个工具一下,所以把这样的类就叫做工具类。

//验证码工具类
public class MyUtils{
    public static String createCode(int n){
        //1.定义一个字符串,用来记录产生的验证码
        String code = "";
        
        //2.验证码是由所有的大写字母、小写字母或者数字字符组成
        //这里先把所有的字符写成一个字符串,一会从字符串中随机找字符
        String data = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKMNOPQRSTUVWXYZ";
        
        //3.循环n次,产生n个索引,再通过索引获取字符
        Random r = new Random();
        for(int i=0; i<n; i++){
            int index = r.nextInt(data.length());
            char ch = data.charAt(index);
            //4.把获取到的字符,拼接到code验证码字符串上。
            code+=ch;
        }
        
        //最后返回code,code的值就是验证码
        return code;
    }
}


//比如这是一个登录界面
public class LoginDemo{
    public static void main(String[] args){
        System.out.println(MyUtils.createCode());
    }
}

五、原理

  1. 局部变量

    • 局部变量是在方法内部声明的变量,它们在方法被调用时分配在堆栈帧中,并在方法执行结束后被销毁。
    • 局部变量的生命周期限于方法的执行,一旦方法结束,它们就会被从堆栈中移除。
  2. 实例变量(非静态变量)

    • 实例变量是在类中声明的非静态变量,每个类的实例都会拥有一份实例变量。
    • 实例变量存储在堆中,而不是堆栈中。每个类的实例在堆中都有一个单独的内存块来存储其实例变量。
  3. 静态变量

    • 静态变量是使用static关键字声明的变量,它们与类本身关联,而不是与类的实例关联。
    • 静态变量被分配在特殊的静态存储区域,而不是堆栈中。它们在类加载时初始化,并在整个程序的生命周期内存在。
  4. 实例方法(非静态方法)

    • 实例方法是使用非静态方式声明的方法,它们依赖于类的实例才能被调用。
    • 每次调用实例方法时,会创建一个包含该方法的堆栈帧。该帧会存储方法的参数和局部变量。
  5. 静态方法

    • 静态方法是使用static关键字声明的方法,它们与类本身关联,而不是与类的实例关联。
    • 静态方法在类加载时就可以被调用,无需创建类的实例。它们通常用于实现与类关联的工具方法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值