static静态成员变量和静态方法

2024-05-09 19:04

本文主要是介绍static静态成员变量和静态方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当有new创建一个对象的,里面属性和方法,通过构造函数,能定义多个不同的对象,在我们做面向对象开发的时候,给一个场景,人在一个班级的时候,你的老师可能是固定的。

当我们用构造方法去构造的时候,每次都去传递一个固定的实参去定义个老师。

这样好会显得代码非常的冗余。

一.static修饰的静态成员变量

1.静态变量

被static修饰的成员变量,叫做静态变量。

2.特点

该类所有对象共享

3.调用方式

(1)类名调用(推荐)

(2)对象名调用

4.代码案例

5.代码内存图

1.首先在测试类中加载main方法,解析字节码文件

2.初始化成员变量和方法,默认给初始值。

3.被static修饰的静态成员变量,单独放在一个位置,我们暂且叫它静态成员变量区。

4.通过new关键字在堆里面去构造一个对象

5.将赋值过去的成员变量,给对应的变量

6.并且每个对象都有一个地址值,我们暂且理解他用隐藏的this关键字来连接起来的。

7.在创建第二个新对象的时候,还是一样初始化变量的值,重复以上的操作,不过已经不用给静态变量那一块赋值了,因为没创建一个对象,都会加载静态成员变量区的static修饰的静态成员变量。

6.共享

当我们去定义一个类的时候,发现他的属性,每个对象都用得到的时候,我们可以使用静态成员变量。

二.static修饰的静态方法

1.三种类

(1)测试类

程序的入口,判断测试是否能正常运行。

(2)JavaBean类

用来描述一类事物

package aa.com;public class JvB {String name;int age;public JvB() {}public JvB(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 + "岁");}}

(3)工具类

不是用来描述一类事物的,而是帮我们做一些事情的类。

1.规则

(1)类名见名知义

(2)私有化构造方法

(3)方法定义成静态的方便调用

2.案例(定义一个求数组和的方法)

工具类:

package aa.com;public class gjl {public static int getResult(int[] arr) {int sum = 0;for (int i = 0; i < arr.length; i++) {sum = sum + arr[i];}return sum;}
}

测试类:

package aa.com;public class ceShi {public static void main(String[] args) {
//
//        JvB aa = new JvB("张三", 20);
//        aa.show();int[] arr = {10, 20, 30, 40, 50};System.out.println(gjl.getResult(arr));}
}

3.调用

类名.方法名;

三.static的注意事项

1.静态方法只能访问静态变量和静态方法

2.非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法

3.静态方法中是没有this关键字

总结:

静态方法中,只能访问静态。

非静态方法可以访问所有。

静态方法中没有this关键字

这篇关于static静态成员变量和静态方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/974235

相关文章

C# 中变量未赋值能用吗,各种类型的初始值是什么

对于一个局部变量,如果未赋值,是不能使用的 对于属性,未赋值,也能使用有系统默认值,默认值如下: 对于 int 类型,默认值是 0;对于 int? 类型,默认值是 null;对于 bool 类型,默认值是 false;对于 bool? 类型,默认值是 null;对于 string 类型,默认值是 null;对于 string? 类型,哈哈,没有这种写法,会出错;对于 DateTime 类型,默

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

js小题:通过字符串执行同名变量怎么做

在JavaScript中,你不能直接使用一个字符串来直接引用一个变量,因为JavaScript是一种静态类型语言(尽管它的类型在运行时可以变化),变量的名字在编译时就被确定了。但是,有几种方法可以实现类似的功能: 使用对象(或Map)来存储变量: 你可以使用一个对象来存储你的变量,然后使用字符串作为键来访问这些变量。 let myVars = { 'var1': 'Hello', 'var

OC中的static关键字

1.修饰局部变量      1.只会初始化一次      2.全局只会存在一份内存      3.不会改变自身的作用域,比如原来是局部变量现在的话依然是局部变量      4.生命周期延长(直到程序结束,这个局部变量才会被销毁)      2.  修饰全局变量     static 修饰的全局变量 在整个工程 中只会存在一份     只可以在当前的.h .m文件中才可以访问。 如果单纯全局变量的

静态文件及模板

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501 1  静态文件 动态Web应用也会需要静态文件,通常是CSS和JavaScript文件。Flask可以向已经配置好的Web服务器提供静态文件,只要在包或模块所在的目录中创建一个名为s

MySQL中的系统变量权限

MySQL的系统变量用于控制服务器的操作。它们可以是全局的(影响整个MySQL服务器实例),也可以是会话的(仅影响当前客户端会话),或者两者兼有。 你可以使用SET语句来动态地改变这些变量的值。例如: 设置全局系统变量的运行时值: 使用set global语句,该语句需要system_VARIABLES_ADMIN权限(或不推荐使用的SUPER权限)。例如: SET GLOBAL max_

python - 变量和字符串

一.变量 变量名就像我们现实社会的名字,把一个值赋值给一个名字时,Ta会存储在内存中,称之为变量(variable),在大多数语言中,都把这种行为称为“给变量赋值”或“把值存储在变量中”。 •不过Python与大多数其他计算机语言的做法稍有不同,Ta并不是把值存储在变量中,而更像是把名字贴在值的上边。 •所以有些Python程序员会说“Python”没有“变量”,只有“名字”。 >>> t

线程间通信方式(互斥(互斥锁)与同步(无名信号量、条件变量))

1通信机制:互斥与同步 线程的互斥通过线程的互斥锁完成; 线程的同步通过无名信号量或者条件变量完成。 2  互斥 2.1 何为互斥?         互斥是在多个线程在访问同一个全局变量的时候,先让这个线程争抢锁的资源,那个线程争抢到资源,它可以访问这个变量,没有争抢到资源的线程不能够访问这个变量。那这种只有一个线程能够访问到这个变量的现象称之为线程间互斥。 2.2互斥锁API 1.

在WinCE的C#编程中,需要静态调用C++的动态库,需要添加using System.Runtime.InteropServices

using System.Runtime.InteropServices;         [DllImport("Win32DLL.dll", EntryPoint = "WriteREG_SZToRegTCHAR")]         private static extern bool WriteREG_SZToRegTCHAR(int iFlag, string regKeyP

【c2】编译预处理,gdb,makefile,文件,多线程,动静态库

文章目录 1.编译预处理:C源程序 - 编译预处理【#开头指令和特殊符号进行处理,删除程序中注释和多余空白行】- 编译2.gdb调试:多进/线程中无法用3.makefile文件:make是一个解释makefile中指令的命令工具4.文件:fprint/fgets/fwrite/fread,ftell/rewind/fseek/fflush4.1 文本文件:FILE结构体4.2 二进制文件:没