【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关键字
相关推荐
zquwei15 分钟前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring
TT哇21 分钟前
*【每日一题 提高题】[蓝桥杯 2022 国 A] 选素数
java·算法·蓝桥杯
火烧屁屁啦44 分钟前
【JavaEE进阶】初始Spring Web MVC
java·spring·java-ee
飞飞-躺着更舒服1 小时前
【QT】实现电子飞行显示器(改进版)
开发语言·qt
w_31234541 小时前
自定义一个maven骨架 | 最佳实践
java·maven·intellij-idea
岁岁岁平安1 小时前
spring学习(spring-DI(字符串或对象引用注入、集合注入)(XML配置))
java·学习·spring·依赖注入·集合注入·基本数据类型注入·引用数据类型注入
武昌库里写JAVA1 小时前
Java成长之路(一)--SpringBoot基础学习--SpringBoot代码测试
java·开发语言·spring boot·学习·课程设计
Q_19284999061 小时前
基于Spring Boot的九州美食城商户一体化系统
java·spring boot·后端
张国荣家的弟弟1 小时前
【Yonghong 企业日常问题 06】上传的文件不在白名单,修改allow.jar.digest属性添加允许上传的文件SH256值?
java·jar·bi
ZSYP-S2 小时前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring