`
thinkingmt
  • 浏览: 25226 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

About"static"

 
阅读更多

static静态修饰符,大家都知道,在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的,而所谓静态就是指在编译后所分配的内存会一直存在,直到程序退出内存才会释放这个空间,也就是只要程序在运行,那么这块内存就会一直存在。

 

在Java程序里面,所有的东西都是对象,而对象的抽象就是类,对于一个类而言,如果要使用他的成员,那么普通情况下必须先实例化对象后,通过对象的引用才能够访问这些成员,但是有种情况例外,就是该成员是用static声明的。

 

在java类库当中有很多类成员都声明为static,可以让用户不需要实例化对象就可以引用成员,最基本的有Integer.parseInt(),Float.parseFloat()等等用来把对象转换为所需要的基本数据类型。这样的变量和方法我们又叫做类变量和类方法。

 

下面是一个,个人认为比较典型的介绍类成员的例子:

 

public class StaticTest 
{ 
    int x=1; //实例变量 
    static int y=1; //类变量 
    
    public StaticTest() 
    { 
        x++;
        y++; 
    } 
    
    public void nonStaticMethod() 
    { 
        System.out.println("run a non_static method."); 
    } 
    
    public static void staticMethod() 
    {
        System.out.println("run a static method."); 
    } 
    
    public static void main(String args[]) 
    { 
        //生成实例t1
        StaticTest t1=new StaticTest();
        
        //生成实例t2 
        StaticTest t2=new StaticTest(); 
        
        //输出实例t1中的变量x 
        System.out.println("t1.x="+t1.x); 
        //输出实例t2中的变量x 
        System.out.println("t2.x="+t2.x); 
        
        //System.out.println("StaticTest.x="+StaticTest.x); 该行代码有编译错误,错误如下:
        //无法从静态上下文中引用非静态变量x  
        
        //nonStaticMethod(); 该行代码有编译错误,错误如下:
        //无法从静态上下文中引用非静态方法 nonStaticMethod(); 
        
        //对于以上两个编译错误的解释:
        //对于非静态属性和方法,必须先实例化对象后,通过对象的引用才能够访问这些成员,
        //但是有种情况例外,就是该成员是用static声明的。故正确使用方法如下:
        t1.nonStaticMethod(); 
        
        //在不用对象引用的情况下,对静态方法直接调用:
        staticMethod(); 
        //当然,也可以用对象的引用来调用静态方法,但这违背了定义静态方法的目的,故不推介:
        t1.staticMethod();
        
        //输出类StaticTest中的类变量y(静态变量y) 
        System.out.println("StaticTest.y="+StaticTest.y); 
        //当然,也可以用对象的引用来调用静态属性,但这违背了定义静态属性的目的,故不推介:
        System.out.println("t1.y="+t1.y); 
    } 
} 

 

 

上例中t1.y和t2.y是 指向同一个储存空间。

 

执行后输出结果如下:
t1.x=2
t2.x=2
run a non_static method.
run a static method.
run a static method.
StaticTest.y=3
t1.y=3

对以上结果的解释说明:

  • 当生成StaticTest类的实例t1时系统为实例变量x初始化分配空间,并执行x++,因此t1的x为2,而y++使y也为2;生成第二个实例t2时重新初始化x为1、而类变量y此时已在创建t1的时候被++为2,故此时y再次++变为3。
  • 实例变量无法由类直接引用,必须在生成实例后由实例进行引用。

 另外一个例子,基于上面的StaticTest 类:

 

public class UsingStatic
{
    StaticTest t1;
    StaticTest t2;
    
    public UsingStatic()
    {
        t1 = new StaticTest();
        t2 = new StaticTest();
    }
    
    public void usingNonStaticMember()
    {
        //successful scenario:
        System.out.println("t1.x="+t1.x);  
        System.out.println("t2.x="+t2.x);
        t1.nonStaticMethod();
        t2.nonStaticMethod();
        
        //failure scenario:
        //System.out.println("t1.x="+StaticTest.x);//无法从静态上下文中引用非静态变量x
        //StaticTest.nonStaticMethod();//无法从静态上下文中引用非静态方法 nonStaticMethod(); 
    }
    
    public void usingStaticMember()
    {
        //successful scenario:
        System.out.println("StaticTest.y="+StaticTest.y);
        StaticTest.staticMethod();
        
        //not suggested,no point to using a object to invoke the static attributes.
        //the suggested approach see the successful scenario, use the class to invoke the static attributes.
        System.out.println("t1.y="+t1.y);
        System.out.println("t2.y="+t2.y);//not suggested
        
        //not suggested,no point to using a object to invoke the static methods.
        //the suggested approach see the successful scenario, use the class to invoke the static methods.
        t1.staticMethod();
        t2.staticMethod();//not suggested
    }
}
 

 

 

运行usingNonStaticMember()的结果:
t1.x=2
t2.x=2
run a non_static method.
run a non_static method.
运行usingStaticMember()的结果:
StaticTest.y=3
run a static method.
t1.y=3
t2.y=3
run a static method.
run a static method.

 

 

至于类方法,如:Integer.parseInt(),可以在不创建对象的情况下使用。至今未发现难点。

 

 

 

 

 

 

 

接下来讲讲为什么 main函数的写法是固定的:

 

为什么要那样写,和JVM的运行有关系。
当一个类中有main()方法,执行命令“java 类名”则会启动虚拟机执行该类中的main方法。

由于JVM在运行这个Java应用程序的时候,首先会调用main方法,调用时不实例化这个类的对象,而是通过类名直接调用因此需要是限制为public static。

对于java中的main方法,jvm有限制,不能有返回值,因此返回值类型为void。
main方法中还有一个输入参数,类型为String[],这个也是java的规范,main()方法中必须有一个入参,类细必须String[],至于 字符串数组的名字,这个是可以自己设定的,根据习惯,这个字符串数组的名字一般和sun java规范范例中mian参数名保持一致,取名为args。

因此,main()方法定义必须是:“public static void main(String 字符串数组参数名[])”。

 

分享到:
评论

相关推荐

    基于springboot框架的毕业设计系统的开发(完整Java源码+数据库sql文件+项目文档+Java项目编程实战+编程练手好项目).zip

    在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对学生毕业设计信息管理的提升,也为了对学生毕业设计信息进行更好的维护,毕业设计系统的出现就变得水到渠成不可缺少。通过对毕业设计系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。 毕业设计系统通过MySQL数据库与Spring Boot框架进行开发,毕业设计系统能够实现教师管理,公告类型管理,班级管理,课题信息管理,任务类型管理,选题申请管理,学院管理,课题任务管理,最终成绩管理,公告信息管理,学生管理等功能。 通过毕业设计系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源

    hegaojian_WanAndroid_1742851819.zip

    hegaojian_WanAndroid_1742851819.zip

    《基于YOLOv8的违章停车识别系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    使用matlab基于卷积神经网络实现的汉语短句语音识别,输出拼音( 我正在学torch,这个已停止更.zip

    毕业设计

    移动开发_iOS_OpenUrl_快捷方式创建技术_App桌_1742856949.zip

    移动开发_iOS_OpenUrl_快捷方式创建技术_App桌_1742856949.zip

    《基于YOLOv8的体育发展识别系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    uappkit_uapp_1742847088.zip

    app开发

    蓝桥杯python相关资源

    蓝桥杯python相关资源

    招聘_实时聊天_APP_React_Redux_前后端分离_1742854279.zip

    招聘_实时聊天_APP_React_Redux_前后端分离_1742854279.zip

    《基于YOLOv8的玩具产品分析系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    vscode1.98.1版本,适用于macos

    vsco1.98.1版本,适用于macos

    《基于YOLOv8的体育产业监测系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    Kotlin_基础篇教程_函数与类实践_开发参考_1742851889.zip

    Kotlin_基础篇教程_函数与类实践_开发参考_1742851889.zip

    电子发票统计并生成表格

    电子发票统计并生成表格

    IIS重写IIS rewirte的插件ARR(Application Request Routing) Microsoft Application Request Routing 3.0 (x64)

    网上很多都是IIS7的教程ARR,对IIS10来说已经无效了。这个是最新的插件IIS重写IIS rewirte的插件ARR(Application Request Routing)

    linux相关课程学习笔记

    linux系统相关知识、shell编程相关知识、虚拟机安装及配置

    毕业设计神器!最新学生成绩管理系统源码(thinkphp6 框架),让你的毕设轻松出彩

    还在为毕业设计选题纠结?这款基于 thinkphp6 框架 开发的学生成绩管理系统源码,前端采用 X - adminV2.2,功能完备、结构清晰,完美适配毕业设计需求,助你在答辩中脱颖而出! 功能全面,轻松应对毕设考核 全流程管理模块:覆盖系统信息设置、单位信息管理、类别管理,以及学期、班级、学科等基础配置,更有管理员、权限、角色管理,完整呈现系统设计与实现的深度。 智能化成绩处理:支持考试信息自定义,灵活设置学科分数线;一键生成考试号、试卷标签、成绩采集表。多样化成绩录入(在线、表格、扫码枪)、实时查看成绩列表与图表,统计结果以柱形图、折线图、雷达图等形式展示,搭配学生历次成绩对比(表格 + 折线图),充分展现数据处理与分析能力。 精细化权限设计:区分教师、学生双身份登录,按职务、任务分工细化数据权限,体现系统安全性与合理性,为毕设增添专业亮点。 三大核心优势,锁定高分 极简操作,演示无忧:界面简洁直观,操作流程优化至 “三步到位”,答辩演示流畅自然,轻松征服导师。 热门技术栈,学习轻松:基于流行的 thinkphp6 框架,前端 X - adminV2.2,前后端分离。

    《基于YOLOv8的摄像设备分析系统》(包含源码、完整数据集、可视化界面、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    前端技术_React_TS_豆瓣电影信息_缓存优化扩展_1742857602.zip

    app开发

    基于Android的屏幕锁设计.zip

    基于Android的屏幕锁设计实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。

Global site tag (gtag.js) - Google Analytics