Java基础-学习笔记08

news/2024/11/14 12:55:20/文章来源:https://www.cnblogs.com/97gogo/p/18344591

01 类变量、类方法、main方法、代码块

类变量(静态变量)

类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。

关于静态变量在内存中的存放地址,有两种说法,①认为静态变量存放在堆中,②认为静态变量存放在方法区中的方法域中。
不管哪种说法,不影响类变量作为类对象的共享属性的特点。类变量是随着类的加载而创建,所以即使没有创建对象实例也可以访问。
实际上,JDK7版本以前是②存放在方法区里的,JDK以上的版本则是①存放在堆里的。在进行类加载时,会在堆里生成一个对应的class对象(原型对象),在这个对象的最后会加载类变量。

定义语法:

访问修饰符 static 数据类型 变量名;
static 访问修饰符 数据类型 变量名;

访问语法:

类名.类变量名
对象名.类变量名 //静态变量的访问修饰符发访问权限,和普通属性一样

使用细节:

  1. 什么时候使用类变量
    当我们需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量):比如:定义学生类,统计所有学生共交多少钱。Student(name, static fee)
  2. 类变量与实例变量(普通属性)的区别
    类变量是该类的所有对象共享的,而实例变量是每个对象独享的。
  3. 加上 static 称为类变量或静态变量,否则称为实例变量/普通变量/非静态变量。
  4. 类变量可以通过 类名.类变量名 或者 对象名.类变量名 来访问,前提是满足访问修饰符的访问权限和范围。
  5. 类变量的生命周期随类的加载开始,随类消亡而销毁。

类方法(静态方法)

形式:

访问修饰符 static 数据返回类型 方法名(){}
static 访问修饰符 数据返回类型 方法名(){}

类方法的调用:

类名.类方法名
对象名.类方法名 //前提是满足访问修饰符的访问权限和范围

使用细节:

  1. 当方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率。比如,工具类中的方法utils,这样我们不需要创建对象就可以使用了。
  2. 类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区。类方法中无 this 参数,普通方法中隐含着 this 的参数。
  3. 普通方法和对象有关,需要通过对象名调用,不能通过类名调用。
  4. 类方法中不允许使用和对象有关的关键字,比如 this 和super,普通方法可以。
  5. 类方法(静态方法)中只能访问静态变量或静态方法。普通成员方法,遵守访问权限的前提下,既可以访问非静态成员,也可以访问静态成员。

理解 main 方法

解释 main 方法的形式:public static void main(String[] args){}

  1. main方法是虚拟机在调用
  2. Java虚拟机需要调用类的 main() 方法,所以该方法的访问权限必须是public
  3. Java虚拟机在执行main() 方法时不必创建对象,所以该方法必须是 static
  4. 该方法接收 String 类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数,接收参数
  5. Java执行的程序 参数1 参数2 参数3
    Eg:

IDEA传参数:edit configurations

代码块

代码块又称为初始化块,,属于类中的成员(即是类的一部分),类似于方法,将逻辑语句封装在方法体中,通过 {} 包围起来
但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显示调用,而是加载类时,或创建对象时隐式调用。
语法:

[修饰符]
{代码
};

说明:

  1. 修饰符可选,只能选static或者不选
  2. 使用static修饰的叫静态代码块,没有static修饰的叫普通代码块
  3. 结尾 ; 可写可不写
    理解:
  4. 相当于另外一种形式的构造器(对构造器的补充机制),可以做初始化操作
  5. 当多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重用性
  6. 代码块的执行顺序,优先于构造器

使用细节:

  1. static代码块,随着类的加载而执行,只会执行一次。如果是普通代码块,每创建一个对象,就执行一次。
  2. 类被加载的3种情况
    ① 创建对象实例时(new)
    ② 创建子类对象实例,父类也会被加载
    ③ 使用类的静态成员时(静态属性、静态方法)

创建对象时,先进行类的加载。先加载父类,再加载子类。(加载静态属性、执行静态代码块)。然后执行构造器,执行构造器时,会默认执行super();

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

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

相关文章

ABC366D 题解

第一眼是想写 \(kd-tree\) 的。 然后发现这就是一道三维前缀和的板子题。 三维前缀和 要想学习三维前缀和,我们首先得了解前缀和的概念,并且学会一维、二维前缀和。 什么是前缀和 前缀和是容斥原理的典型应用。这种优化方式可以使求和操作的时间复杂度降低到 \(O(1)\)(但是需…

C# 如何防止WinForm程序多次运行

[C# 开发技巧]如何防止程序多次运行 - Learning hard - 博客园 (cnblogs.com) 一、引言 最近发现很多人在论坛中问到如何防止程序被多次运行的问题的,如: http://social.msdn.microsoft.com/Forums/zh-CN/6398fb10-ecc2-4c03-ab25-d03544f5fcc9, 所以这里就记录下来,希望给遇到…

lwIP——带操作系统(FreeRTOS)移植

1. lwIP前期准备 在程序工程中,我们在工程文件夹下创建了一个名为 “lwip”的子文件夹。在“lwip”文件夹下,我们又创建了一个子文件夹:arch 。arch 文件夹用于存放 lwIP 系统的配置文件;2. 添加lwIP源文件3. 添加网卡驱动程序/* Includes -------------------------------…

Less is richness,基于less is more的博客园宽屏主题魔改

写在前面 之前做过很多个人博客,都是做着玩的,资源托管在免费或低价的服务器上,也不经常维护,所以就一直不长久,最终还是选择了博客园。发现博客园可以自定义样式,于是试着给博客换了一个又一个主题。个人比较喜欢宽屏的样式,感觉LessIsMore主题布局比较好、也比较简洁,…

5 大场景上手通义灵码企业知识库 RAG

大家好,我是通义灵码,你的智能编程助手!最近我又升级啦,智能问答功能全面升级至 Qwen2,新版本在各个方面的性能和准确性都得到了显著提升。此外,行间代码补全效果也全面优化,多种编程语言生成性能及准确性大幅提升,如前端、Java、Go、Python、C++ 等。此外,灵码新增代…

2024 年了,IT 运维监控系统都有哪些推荐?

大浪淘沙,2024 年的今天,市面上很多监控系统慢慢淡出了大家的视野,而一些新的监控系统也逐渐崭露头角。今天我们就来看看 2024 年的当下,哪些 IT 运维监控系统最值得关注。 Prometheus毫无疑问,Prometheus 是最值得关注的监控系统,因为 Prometheus 的规范和生态都非常厉害…

不只是前端,后端、产品和测试也需要了解的浏览器知识(二)

继上篇《 不只是前端,后端、产品和测试也需要了解的浏览器知识(一)》介绍了浏览器的基本情况、发展历史以及市场占有率。 本篇文章将介绍浏览器基本原理。在掌握基本原理后,通过技术深入,在研发过程中不断创新,推动产品性能、用户体验的提升,来实现业务的增长,创造可持…

三十分钟入门基础Go(Java小子版)

前言 Go语言定义 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态、强类型、编译型语言。Go 语言语法与 C 相近,但功能上有:内存安全,GC,结构形态及 CSP-style 并发计算。 适用范围 本篇文章适用于学习过其他面向对象语言(Java、…

(二) 树莓派CM4调试

1. 参考资料资料汇总页面https://shumeipai.nxez.com/raspberry-pi-datasheets《bcm2711-peripherals.pdf》,下载地址https://datasheets.raspberrypi.com/bcm2711/bcm2711-peripherals.pdf《cm4io-datasheet.pdf》,下载地址https://datasheets.raspberrypi.com/cm4/cm4-data…

中国式报表有这么多种类型,你都知道吗?

中国式报表是一种在中国企业中使用的会计报告格式,但你真的了解它吗?你知道它有多少种类型吗?今天我们就一起来聊聊,中国式报表都包含哪些类型的报表吧!按样式来划分,中国式报表通常分为以下几类:1. 行式报表 行式报表也就是我们常说的清单式明细表,是最常见也是最简单…

JDBC加载MySQL驱动【底层实现】

JDBC4.0如何加载引入依赖<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.32</version></dependency>上代码import java.sql.Connection;import java.sql.DriverManager;imp…

tensorboard_logger库无法导入的问题解决

一、问题描述最近在学习深度学习时,从大神们那里copy的代码中有用到tensorboard_logger这个库的东西,所以很自然地就用conda install或者pip去安装它,但是结果是:python开源库里面没有这东西。 这就让我很苦恼,所以只能自己动手,丰衣足食了。 二、解决方法首先找到tenso…