【Java】static静态变量(016)

🏷️🏷️主页:@嘿111

🏷️🏷️🏷️static静态变量

目录

static调用方式

static内存图

工具类

定义数组工具类

定义学生工具类

静态变量的注意事项


🏷️static静态变量初认识

static 关键字在 Java 中用于创建类成员(包括字段、方法和代码块)的静态版本。这意味着无论这个类创建了多少对象,;静态成员只有一个副本,并被所有对象共享。

静态变量也称为类变量,因为它们与类关联而不是类的某个特定实例。它们可以通过类名直接访问,也可以通过类的任何对象来访问。

static被该类的所有对象共享,被static修饰的成员变量叫做静态变量

static调用方式

如以下代码,直接调用static修饰的静态变量

java 复制代码
public class Student {
    private String name;
    private int age;
    public static String teacherName;
     public Student(){}
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    public  void show(){
        System.out.println(name+","+age+","+teacherName);
    }

    public void study()
    {
        System.out.println(name+"正在学习");
    }
}
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
      //直接调用教师的名字
     Student.teacherName="小美";
     Student s1=new Student();
     //给s1中的名字和年龄赋值
     s1.setAge(18);
     s1.setName("zhangsan");
     s1.show();
     s1.study();
//s1.teacherName="小美";
     Student s2=new Student();
     //给s2中的名字和年龄赋值
     s2.setAge(20);
     s2.setName("lisi");
     s2.show();
     s2.study();
//s2.teacherName="小美";

    }
}

static内存图

在堆内存中单独开辟静态区用来存储静态变量


工具类

工具类,顾名思义,就是使用的工具,哪里有需要就往哪里添加它,当遇到非静态的工具类,调用的时候还要去new一下。

定义数组工具类

需求:在实际开发中,经常会遇到一些数组使用的工具类。请按照如下要求编写一个数组的工具 类:ArrayUtil

提供一个工具类方法printArr,用于返回整数数组的内容,返回的字符串格式如:[10,20,50,34,100](只考虑整数数组,且只考虑一维数组)

提供这样一个工具方法getAerage,用于返回平均分。(只考虑浮点型数组,且只考虑一维数组定义一个测试类TestDemo,调用该工具类的工具方法,并返回结果。

java 复制代码
public class ArrayUtil {
    public static String printArr(int[] arr)
    {
        StringBuilder sb=new StringBuilder();
        sb.append("[");
        for (int i = 0; i <arr.length ; i++) {
            if(i==arr.length-1)
            {
                sb.append(arr[i]);
            }
            else {
                sb.append(arr[i]).append(",");
            }
        }
        sb.append("]");
        return sb.toString();
    }
public static double getAerage(int[] arr)
{
        double sum=0;
    for (int i = 0; i < arr.length; i++) {
        sum+=arr[i];
    }
    return sum/arr.length;
}

}
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        int []arr={10,20,50,34,100};
        //测验工具类中的方法
        String str=ArrayUtil.printArr(arr);
        System.out.println(str);
        double r=ArrayUtil.getAerage(arr);
        System.out.println(r);
    }
}

定义学生工具类

需求:定义一个集合,用于存储3个学生对象。

学生类的属性为:name、age、gender定义一个工具类,用于获取集合中最大学生的年龄。

java 复制代码
import java.util.ArrayList;  
import java.util.HashSet;  
import java.util.List;  
import java.util.Set;  

// 学生类  
class Student {  
    private String name;  
    private int age;  
    private String gender;  

    // 构造函数  
    public Student(String name, int age, String gender) {  
        this.name = name;  
        this.age = age;  
        this.gender = gender;  
    }  

    // 获取年龄  
    public int getAge() {  
        return age;  
    }  

    // 可以添加其他属性的getter方法和setter方法  
}  

// 工具类  
class StudentUtils {  
    // 获取集合中最大学生的年龄  
    public static int getMaxAge(Set<Student> students) {  
        int maxAge = -1; // 初始值为负一,表示尚未找到  
        for (Student student : students) {  
            if (student.getAge() > maxAge) {  
                maxAge = student.getAge();  
            }  
        }  
        return maxAge;  
    }  
}  

// 主类  
public class Main {  
    public static void main(String[] args) {  
        Set<Student> studentSet = new HashSet<>();  

        // 添加学生对象到集合中  
        studentSet.add(new Student("Alice", 20, "Female"));  
        studentSet.add(new Student("Bob", 22, "Male"));  
        studentSet.add(new Student("Charlie", 19, "Male"));  

        // 获取最大学生的年龄并输出  
        int maxAge = StudentUtils.getMaxAge(studentSet);  
        System.out.println("集合中最大学生的年龄是: " + maxAge);  
    }  
}

静态变量的注意事项

  • 静态方法只能访问静态变量和静态方法
  • 非静态方法可以访问静态变量或者静态方法(非静态方法可以访问所有)
  • 静态方法中没有this关键字
相关推荐
Wx120不知道取啥名17 分钟前
C语言之长整型有符号数与短整型有符号数转换
c语言·开发语言·单片机·mcu·算法·1024程序员节
开心工作室_kaic43 分钟前
ssm010基于ssm的新能源汽车在线租赁管理系统(论文+源码)_kaic
java·前端·spring boot·后端·汽车
Python私教44 分钟前
Flutter颜色和主题
开发语言·javascript·flutter
代码吐槽菌44 分钟前
基于SSM的汽车客运站管理系统【附源码】
java·开发语言·数据库·spring boot·后端·汽车
Ws_1 小时前
蓝桥杯 python day01 第一题
开发语言·python·蓝桥杯
zdkdchao1 小时前
jdk,openjdk,oraclejdk
java·开发语言
神雕大侠mu2 小时前
函数式接口与回调函数实践
开发语言·python
精致先生2 小时前
问题记录01
java·数据库·mybatis
Y.O.U..2 小时前
STL学习-容器适配器
开发语言·c++·学习·stl·1024程序员节
小魏冬琅2 小时前
探索面向对象的高级特性与设计模式(2/5)
java·开发语言