【JAVA入门】Day08 - 静态变量

【JAVA入门】Day08 - 静态变量


文章目录

  • 【JAVA入门】Day08 - 静态变量
    • 【补充】工具类


        静态是面向对象中的一个概念,用英文标识符表示是 static
        在一个标准 JavaBean 类中,static 类型的变量和方法经常被使用。

public class Student {//属性:姓名 年龄 性别 他老师是谁private String name;private int age;private String gender;public static String teacherName;...
}

        在以上类中,教师姓名 teacherName 使用 static 修饰符修饰,这表示,所有的 Student 对象,都共用这一个 teacherName 变量,一旦修改,全部的对象中的 teacherName 都会改变。
        使用 static 修饰的变量,可以直接用类名调用,这是一种新的调用方式。

Student.teacherName = "王师";

         static 表示静态,是 Java 中的一个修饰符,可以修饰成员方法、成员变量。被 static 修饰的成员变量,叫做静态变量;被 static 修饰的成员方法,叫做静态方法

静态变量

  • 静态变量被所有对象共享。
  • 可以用类名调用(推荐)。
  • 可以用对象名调用。
  • 在创建静态变量时,该变量会存储在堆内存中。
  • 静态变量是随着类的加载而加载的,优先于对象的出现。

静态方法

  • 多用在测试类和工具类中。
  • Javabean类中很少会用。
  • 可以用类名调用(推荐)。
  • 可以用对象名调用。

static的注意事项:

  • 静态方法只能访问静态变量和静态方法。
  • 非静态方法可以访问静态变量或静态方法,也可以访问非静态的成员变量和非静态的成员方法。
  • 静态方法中是没有 this 关键字的。
  • 从内存的角度来讲,静态数据在创建类之初就存储在内存中,此时没有创建对象,因此静态数据在内存中相互调用是完全没问题的,但静态方法调用非静态成员变量或方法就不行了,因为此时连对象都没有,何来的非静态成员。

【补充】工具类

         在 Java 中,有三种类。

  • Javabean 类:用来描述一类事物的类。比如:Teacher,Dog,Cat。
  • 测试类:用来检查其他类是否书写正确,带有 main 方法的类,是程序的入口。
  • 工具类:不用于描述一类事物,而是帮我们做一些事情的类。

工具类的特点主要有

  • 类名见名知意。
  • 私有化构造方法。
  • 方法定义为静态。
public class ArrUtil {private ArrUtil(){}public static int getMax(){}public static int getMin(){}public static int getSum(){}public static int getAvg(){}

         因为创建工具类的对象是没有什么意义的,所以工具类的构造方法往往写成私有。而内部的方法用于反复调用,不再修改,所以写成静态

【例1】定义数组工具类
需求:按照如下要求编写一个数组工具类 ArrayUtil。

  • 提供一个工具类方法 printArr,用于返回整数数组内容。返回的字符串格式如:[10, 20, 50, 34, 100]。
  • 提供这样一个工具方法 getAverage,用于返回平均分。(只考虑浮点型数组,只考虑一维数组)
  • 定义一个测试类 TestDemo,调用该工具类的工具方法,并返回结果。
public class ArrayUtil {//私有化构造方法//目的:为了不让外界创建他的对象private 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 getAverage(int[] arr) {double sum = 0;for(i = 0; i < arr.length; i++) {sum = sum + arr[i];}double average = sum / arr.length;return average;}}public class TestDemo {public static void main(String[] args) {int arr1[] = {1, 2, 3, 4, 5};String str = ArrayUtil.printArr(arr1);System.out.println(str);double arr2[] = {1.5, 3.7, 4.9, 5.8, 6.6};double average = ArrayUtil.getAverage(arr2);System.out.println(average)}
}

【例2】定义学生工具类
需求:定义一个集合,用于存储3个学生对象。属性:name、age、gender。定义一个工具类,用于获取集合中最大学生的年龄。

public class Student {private String name;private int age;private String gender;public Student(){}public Student(String name,int age, String gender) {this.name = name;this.age = age;this.gender = gender;}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 String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}
}public class StudentUtil {private StudentUtil(){}public static getMaxAgeStudent(ArrayList<Student> list) {//先定一个参照物int maxAge = list.get(0).getAge();for(int i = 1; i < list.size(); i++) {int tempAge = list.get(i).getAge();if(tempAge >= maxAge) {maxAge = tempAge;}}return maxAge;
}public class TestDemo {public static void main(String[] args) {//创建学生集合ArrayList<Student> list = new ArrayList<>();//创建3个学生对象Student stu1 = new Student("zhangsan",23, "男");Student stu2 = new Student("lihong", 23, "女");Student stu3 = new Student("wangming", 25, "男");//把学生对象添加到集合中list.add(stu1);list.add(stu2);list.add(stu3);//找到最大年龄int maxAge = StudentUtil.getMaxAgeStudent(list);System.out.println(maxAge);}
}

##【补充】main 方法与 static
         在测试类中,有一个 main 方法,它是程序的入口,优先执行。所以,我们可以看到它有以下特点:

public class HelloWorld {public static void main(String[] args) {System.out.println("HelloWorld");}
}
  • public                                     被JVM调用,访问权限足够大。
  • static                                     被JVM调用,不用创建对象,直接类名访问。因为 main 方法是静态的,所以测试类中的其他方法也需要是静态的。
  • void                                     被JVM调用,不需要给返回值。
  • main                                     一个通用的名称,虽不为关键字,但是被JVM识别。
  • String[] args                                     以前用于接收键盘录入数据,现在没用了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/29732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css伪类和伪元素选择器

伪类选择器关注元素的状态和条件&#xff0c;而伪元素选择器则关注元素的视觉表现和扩展。两者都是CSS中强大的工具&#xff0c;能够帮助开发者实现复杂的样式布局和交互效果。 伪类选择器 伪类选择器在CSS中用于选择元素的特定状态或位置。以下是一些常见的伪类选择器及其使…

LeetCode:2288.价格减免(Java 字符串处理)

目录 2288.价格减免 题目描述&#xff1a; 实现代码与解析&#xff1a; 模拟 原理思路&#xff1a; 2288.价格减免 题目描述&#xff1a; 句子 是由若干个单词组成的字符串&#xff0c;单词之间用单个空格分隔&#xff0c;其中每个单词可以包含数字、小写字母、和美元符号…

AV1:帧间预测(一)参考帧管理

​AV1中帧类型 在H.26X系列标准中&#xff0c;根据帧允许的预测模式可以将帧分为I帧、P帧和B帧&#xff0c;根据帧在码流中前后的参考关系又可以分为IRAP、RADL等。AV1也类似地将帧分为4种类型&#xff0c;在码流中用frame_type来标识帧类型。 KEY_FRAME&#xff1a;相当于IDR帧…

HTB Editorial

Editorial User Nmap ┌──(kali㉿kali)-[~/…/machine/SeasonV/linux/Editorial] └─$ nmap -A 10.129.24.67 -T 4 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-16 21:54 EDT Nmap scan report for 10.129.2…

C#使用轻量级深度学习模型进行车牌颜色识别和车牌号识别

看到这个文章时候请注意这个不涉及到车牌检测&#xff0c;这个仅仅是车牌颜色和车牌号识别&#xff0c;如果想涉及到车牌检测可以参考这个博客&#xff1a;[C#]winform部署yolov7CRNN实现车牌颜色识别车牌号检测识别_c# yolo 车牌识别-CSDN博客 【训练源码】 https://github.…

DBeaver windows下载、安装与连接数据库

下载 官网下载地址&#xff1a;https://dbeaver.io/download/ 安装 1、双击安装 2、下一步…… 选择所有用户 3、组件选择 配置连接数据库 下载驱动

【记录44】【案例】echarts地图

效果&#xff1a;直接上效果图 环境&#xff1a;vue、echarts4.1.0 源码 // 创建容器 <template><div id"center"></div> </template>//设置容器大小&#xff0c;#center { width: 100%; height: 60vh; }这里需注意&#xff1a;笔者在echar…

Git的下载安装及可视化工具小乌龟

一、 Git 的下载 第1步&#xff1a;下载Git&#xff0c;下载地址&#xff1a;Git for Windows 这个就需要去 Git 官网下载对应系统的软件了&#xff0c;下载地址为 git-scm.com或者gitforwindows.org&#xff0c;或者阿里镜像&#xff08;感谢评论区的星悸迷航同学&#…

亚马逊收购 MX Player

不知道你在安卓手机上用什么视频播放器&#xff0c;个人看最强大的就是MX Player&#xff08;支持快进、倍速、睡眠定时、自定义解码器、AB段重复等&#xff0c;学英语十分强大&#xff09;。 MX Player 最初是韩国的视频播放软件和OTT服务平台&#xff0c;于2011年推出&#…

什么是云恶意软件攻击,如何进行有效的防护

一切都在向云转移。云端数据越多&#xff0c;恶意攻击者攻击云平台的兴趣就越大。 攻击者使用恶意软件窃取数据并破坏服务。虽然恶意软件在云端可能不像在个人电脑上那么普遍&#xff0c;但大行其道的云恶意软件令人担忧。此外&#xff0c;组织不像您预料的那样意识到这点。 …

鸿蒙开发网络管理:【@ohos.request (上传下载)】

上传下载 说明&#xff1a; 本模块首批接口从API version 6开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import request from ohos.request;限制与约束 默认支持https&#xff0c;如果要支持http&#xff0c;需要在config.json里…

所以spring mvc异常处理工作原理是啥

文章目录 spring mvc异常处理&#xff08;源码分析&#xff09;概述原理&#xff08;源码角度&#xff09;模拟debug前期提要分析4个map4个map的初始化为什么需要基于mappedMethods缓存 总结一下 spring mvc异常处理&#xff08;源码分析&#xff09; 概述 spring mvc有下面三…

力扣每日一题 6/18 字符串/模拟

博客主页&#xff1a;誓则盟约系列专栏&#xff1a;IT竞赛 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 2288.价格减免 【中等】 题目&#xff1a; 句子 是由若干个单词组成的字符…

‘引爆增长·赋能十堰’第一届学习峰会在十堰东方汉宫国际酒店成功举办

‘引爆增长赋能十堰’第一届学习峰会在十堰东方汉宫国际酒店成功举办 2024年6月 17 至18 日&#xff0c;为期两天的“引爆增长赋能十堰”第一届学习交流峰会在湖北十堰东方汉宫国际酒店一号盛大举行&#xff0c;学习峰会现场&#xff0c;来自十堰地区及邻边地市的上百位实体企业…

netty服务端与客户端的启动流程

如图所示&#xff0c;右侧是服务端Server&#xff0c;左侧是客户端Client 要点说明&#xff1a; 1.在Server中&#xff0c;在NioEventLoopGroup()中&#xff0c;会有1个selector和线程在不断循环&#xff0c;等待是否有accept事件&#xff0c;在accept事件发生后&#xff0c;才…

四款让人大开眼界的高质量软件,个个实力超群,使用起来爱不释手

电脑里的Windows软件&#xff0c;简直多得数不清&#xff0c;啥都有。 像那个电子表格、写文章的、玩游戏聊天的、还有修图的&#xff0c;这些都太常见了&#xff0c;它们确实给咱们生活带来方便&#xff0c;但有时候也会让那些不太懂电脑的小伙伴们头疼不已。 讲真&#xff0…

重学java 73.设计模式

本想送你一本沉思录&#xff0c;可该迷途知返的人是我 —— 24.6.18 设计模式 设计模式(Design pattern)&#xff0c;是一套被反复使用、经过分类编目的、代码设计经验的总结&#xff0c;使用设计模式是为了可重用代码、保证代码可靠性、程序的重用性,稳定性。 1995 年&#x…

全网最全 Kimi 使用手册,看完 Kimi 效率提升 80%

在当前AI文字大模型领域&#xff0c;ChatGPT4.0无疑是最强大。然而&#xff0c;最近最火爆的大模型非国产Kimi莫属。 相较于其它大模型&#xff0c;Kimi 最大的优势在于&#xff0c;超长文本输入&#xff0c;支持200万汉字&#xff0c;是全球范围内罕见的超长文本处理工具&…

在Linux系统中安装凸语言

凸语言在2023国产编程语言蓝皮书中的介绍如下&#xff1a; 凸语言gitee页面&#xff1a;凸语言: tu-lang 是一种动态类型编译型的通用编程语言, 已实现自举 (gitee.com) 使用git克隆源码&#xff1a; git clone https://github.com/tu-lang/tu.git 安装凸语言环境&#xff1a…

qt使用信号槽时,一直提示无法解析的外部符号

今天写了个信号槽时&#xff0c;粗心大意在发信号的类的头文件中忘记加上Q_OBJECT&#xff0c;导致一直出现无法解析的外部符号&#xff0c; 信号没有在类声明中使用 Q_OBJECT 宏。这个宏是必需的&#xff0c;因为它告诉 Qt 的元对象编译器&#xff08;moc&#xff09;需要处理…