类变量(静态变量),静态方法(类方法)快速了解一篇足矣

article/2025/9/13 22:56:11

什么是类变量?

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

如何定义类变量?

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

如何访问类变量?

类名.类变量名 
或者
对象名.类变量名

测试代码1:

package com.hspedu.static_;public class StaticTest {public static void main(String[] args) {//测试访问类变量A a=new A();//对象访问System.out.println(a.count1);//结果是:100a.count1=20;//改变值//类名访问System.out.println(A.count1);//结果是:20System.out.println(A.count2);//结果是:200}}
class  A{//两种不同的创建类变量的方式static public int count1=100;public static int count2=200;
}

类变量的相关注意

1.什么时候需要用类变量
当我们需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量):比如:定义职工类,统计所有职工共交多少钱。
2.类变量与实例变量(普通属性)区别
类变量是该类的所有对象共享的,而普通属性是每个对象独享的。
3.加上static称为类变量或静态变量,否则称为实例变量/普通变量/非静态变量
4.类变量可以通过类名.类变量名或者对象名.类变量名来访问,一般使用类名类变量名方式访问。要满足访问修饰符的访问权限和范围
5. 实例变量不能通过类名.类变量名方式访问。
6. 类变量是在类加载时就初始化了,也就是说,即使你没有创建对象,只要类加载了就可以使用类变量了。
7. 类变量的生命周期是随类的加载开始,随着类消亡而销毁。
测试代码2(注意事项第一点)当我们需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量):

package com.hspedu.static_;
public class Test2 {public static void main(String[] args) {//四个职工缴费Worker a=new Worker("王1炮",100);Worker b=new Worker("王2炮",500);Worker c=new Worker("王3炮",800);Worker d=new Worker("王4炮",200);//输出总金额System.out.println(Worker.Fee);//结果是:1600}}
class Worker{public static int  Fee=0;//静态变量public Worker(String name,int Fee){Worker.Fee+=Fee;}
}

测试代码3(注意事项第二点):类变量是该类的所有对象共享的,而普通属性是每个对象独享的。

package com.hspedu.static_;public class Test3 {public static void main(String[] args) {System.out.println("没有修改的类变量值:"+B.num1);//结果是:200//创建对象b1B b1 = new B();b1.num1=666;b1.num2=888;System.out.println("修改了的类变量值:"+B.num1);//结果是:666System.out.println("对象b1的num2值:"+b1.num2);//结果是:888//创建对象b2,验证类变量是否是共享,普通变量不是共享B b2 = new B();//看是否对象b1修改对对象b2有影响不System.out.println(b2.num1);//结果是:666System.out.println(b2.num2);//结果是:300}
}
class B{public static int num1=200;public int num2=300;
}

由此可证明:类变量是该类的所有对象共享的,而普通属性是每个对象独享的。

在这里插入图片描述

类方法基本介绍:

类方法也叫静态方法。
形式如下:
访问修饰符 static 数据返回类型 方法名(){}
static 访问修饰符  数据返回类型 方法名(){}

类方法的调用:

类名.类方法名 
或者
对象名.类方法名

测试代码4:

package com.hspedu.static_;public class Test4 {public static void main(String[] args) {//类名直接调用类方法System.out.println(C.way());C c = new C();//对象调用类方法System.out.println(c.way());//如果我们希望不创建实例,也可以调用某个方法(即当做工具来使用)// 这时,把方法做成静态方法时非常合适System.out.println(Math.abs(-63));//绝对值System.out.println(Math.sqrt(100));//开平方}
}
class C{public static int way(){return 1314520;}
}

小结:
当方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率。
比如:Math类、Arrays类、 Collections 集合类
实际开发,往往会将一些通用的方法,设计成静态方法,这样我们不需创建对象就可以使用,更加快捷

类方法使用注意事项和细节讨论

类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区:
类方法中无this的参数
普通方法中隐含着this的参数
2)类方法可以通过类名调用,也可以通过对象名调用
3)普通方法和对象有关,需要通过对象名调用,比如对象名.方法名(参数),不能通过类名调用。
4)类方法中不允许使用和对象有关的关键字,比如this和super. 普通方法(成员方法)可以。
5)类方法(静态方法)中只能访问静态变量或静态方法。普通成员方法,既可以访问非静态成员,也可以访问静态成员。
小结: 静态方法,只能访问静态的成员,非静态的方法,可以访问静态成员和非静态成员(必须遵守访问权限)
测试代码5类方法注意事项:

package com.hspedu.static_;package com.hspedu.static_;public class Test5 {public static void main(String[] args) {D d = new D();d.way2();//非静态方法,不能通过类名调用}
}
class D{public static int num1=10;public int num2=20;public static void way1(){//静态方法,类方法//类方法中不允许使用和对象有关的关键字,// 比如 this 和 super。普通方法(成员方法)可以//System.out.println(this.num1);报错//类方法(静态方法)中 只能访问 静态变量 或静态方法//System.out.println(way2());报错,访问非静态方法System.out.println("静态方法访问静态变量num1:"+num1);;//若是num2+num1,num2报错因为不是类变量}public  void way2(){//非静态方法,普通方法// 非静态方法可以访问 静态成员和非静态成员System.out.println("在普通方法钟访问静态方法:");way1();System.out.println("在普通方法中访问静态变量和普通变量:"+(this.num2+num1));}}

测试代码5运行结果:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/nrR7kJp1.shtml

相关文章

VS 关于 .sln 文件和 .suo 文件

Visual Studio.NET采用两种文件类型(.sln和.suo)来存储特定于解决方案的设置,它们总称为解决方案文件。为解决方案资源管理器提供显示管理文件的图形接口所需的信息,从而在每次继续开发任务时,不会因开发环境而分散精力&#xff1…

Linux命令ln -snf给文件创建软链接和硬链接

我们知道 ln 命令用于创建链接文件,ln命令的参数选项有很多,此处主要理解 -snf三个: -s:--symbolic比较容易,有-s时表示创建软连接,没有-s时,表示创建硬链接 -f:--force 强行删除任何已存在的目标文件 -n:--no-dereference 把符号链接的文件视为一般文件 一、创建软链…

Visual studio中.sln、.ncb、.rc、.sdf、.def、.vcproj等后缀文件解释

.sln 解决方案文件 Visual Studio使用解决方案文件(后缀为sln的文件)表示一个项目组,它通常包含一个项目中所有的工程文件信息。 .ncb 无编译浏览文件 无编译浏览文件:其中存放了供ClassView、WizardBar和Component Gallery使用的信息,由VC开…

凸函数的性质、判定,凸规划

一. 凸函数的性质 二. 凸函数的判别 判断一个函数是否为凸函数,最基本的方法是使用其定义。 对可微函数: 三、凸规划定义 最优化问题的目标函数为凸函数,不等式约束函数也为凸函数,等式约束函数是仿射的,则称该最优化问…

不等式约束问题-KKT条件 (1)

允许不等式约束的KKT条件(卡罗需-库恩-塔克条件,Karush-Kuhn-Tucker Conditions,有时称为一阶必要条件)是对只允许等式约束的拉格朗日乘数法的推广。 定义一个优化问题如下,该最优问题既有等式约束,又有不…

《统计学习方法》—— SVM(线性可分支持向量机、线性支持向量机、非线性支持向量机)的详细推导

前言 支持向量机是定义在特征空间上使得间隔最大的线性分类器。它可以形式化为凸二次规划问题。对于这样的凸二次规划问题,我们往往使用拉格朗日方法转为为它的对偶问题。对于这样的对偶问题,我们可以使用SMO最小序列算法进行求解。 我们将介绍三种支持…

深度学习核心技术精讲100篇(十三)-线性可分支持向量机中KKT最有条件理解

前言 KKT最优化条件是Karush[1939],以及Kuhn和Tucker[1951]先后独立发表出來的。这组最优化条件在Kuhn和Tucker发表之后才逐渐受到重视,因此许多情况下只记载成库恩塔克条件(Kuhn-Tucker conditions) 库恩塔克条件(Kuhn-Tucker conditions)是非线性规划领域里最重要的理论…

拉格朗日函数对偶问题、KKT条件

一、概念介绍 KKT最优化条件是Karush(1939)以及Kuhn和Tucker(1951)先后独立发表出来的,但在Kuhn和Tucker发表之后才逐渐受到重视,因此多数情况下记载成库恩-塔克条件(Kuhn-Tucker conditions)。先介绍几个优化的概念。 1.1 优化 最优化问题&#xff0…

西工大机考《 现代设计方法》大作业网考

???202110?? 试卷总分:100 得分:96 一、 单选题 (共 40 道试题,共 80 分) 1.Powell改进算法是一种( )。 A.一维搜索方法 B.处理约束问题的优化方法 C.利用海森矩阵求解的无约束优化方法 D.利用梯度求解的无约束优化方法 2.下列特性中,梯度法不具有的是( )。 A.二次收…

拉格朗日乘子法和KKT 条件解析

1.最优化问题 拉格朗日乘子法和KKT条件是求解最优化问题的重要方法,因此,在正式讲解二者之前,要先谈一谈最优化问题。 通常,需要求解的最优化问题分为3类: 1.1. 无约束优化问题: 对于此类问题,可以通…

直观理解拉格朗日乘子法和Karush-Kuhn-Tucker(KKT)条件

在最优化问题中,经常是会有约束条件的,而约束条件可分为等式约束条件和不等式约束条件,对于前者,我们有拉格朗日乘子法,对于后者,有KKT条件,对于既有等式约束又有不等式约束的最优化问题&#x…

非线性优化问题处理技术(二) Karush–Kuhn–Tucker条件

对于只有等式约束的非线性优化问题,拉格朗日定理是可以适用的,但是当存在不等式约束时就不适用了,此时Karush–Kuhn–Tucker(KKT)条件是更为通用的处理技术,拉格朗日定理其实只是KKT条件定理的特殊情况。 KKT条件一开始称为Kuhn–…

支持向量机SVM(二)

6 拉格朗日对偶(Lagrange duality) 先抛开上面的二次规划问题,先来看看存在等式约束的极值问题求法,比如下面的最优化问题: 目标函数是f(w),下面是等式约束。通常解法是引入拉格朗日算子,这里使…

2012年全国卷导数题与含约束的多元函数极值问题(KKT条件)

这道题目编的比较好,第一问就构造的特别巧妙 (1) f(x) f‘(1)e^(x-1) - f(0) x f(1) f(1) - f(0) 1, f(0)1 f(x) f(1)e^(x-1) - f(0)x 1/2x^2 …

运筹学教学|动态规划例题分析(一)

例题1&#xff1a; 问题描述 假设桌子上有n根火柴&#xff0c;我先手取1&#xff0c;2,…,k(k<n)根火柴&#xff0c;之后我的对手也必须取1&#xff0c;2&#xff0c;…k根火柴。双方轮换重复直到最后一根火柴被捡起来。最后一个捡起来火柴的人是输家&#xff0c;那么&…

对约束条件优化问题的理解

以二维空间 R^2 举例 无约束的优化问题注意我在图里画了等高线。此时 在局部极小值点 处的梯度必然为0&#xff0c;比较容易理解。这个梯度为零的条件是局部极小值点的必要条件。这样&#xff0c;优化问题的求解变成了对该必要条件解方程组。 2.带等式约束的优化问题, 与无约束…

数学建模 非线性规划

一.非线性规划模型 1.概念: 如果目标函数或约束条件中包含非线性函数,就称该规划问题为非线性规划问题.一般来说,求解非线性规划问题要比求解线性规划问题困难得多,也不像线性规划问题那样有单纯形法这一通用方法,各个方法都有自己的适用范围 注意:如果线性规划的最优解存在,则…

博弈论中的Stackelberg模型和库恩塔克条件如何通过Matlab求解或者数值分析?

博弈论中的Stackelberg模型和库恩塔克条件如何通过Matlab求解或者数值分析&#xff1f; 下面是两个供应链成员的利润函数&#xff0c;其中p_c和p_b为决策变量&#xff0c;其余参数均在[0,1]之间。此外&#xff0c;b为领导者&#xff0c;c为跟随者。按照逆向归纳法求解可以得到…

拉格朗日乘子库恩塔克条件

拉格朗日乘子法的证明 在学习支持向量机的时候&#xff0c;计算对偶问题时用到了拉格朗日乘子法((Lagrange multiplier method))&#xff0c;回想起高中时使用拉格朗日乘子法求不等式约束条件下的最优化问题时的困惑&#xff0c;虽然一直知道用&#xff0c;但是却不知道为什么…

库恩塔克条件

KKT条件主要涉及凸优化问题&#xff0c;学习SVM的时候求解拉格朗日函数的对偶问题时&#xff0c;需要使用KKT条件来得到最终的。 1、对于无约束问题(unconstrained minimization): 1) 一阶必要条件为&#xff1a; 2) 二阶必要条件为&#xff1a; 即Hessian半正定 2、等式约束问…