this关键字和static关键字

一、this关键字   

关于java语言当中的this关键字:

  1.this是一个关键字,翻译为:这个

  2.this是一个引用,this是一个变量,this变量中保存了内存地址指向了了自身,

this存储在JVM堆内存java对象内部。

  3.创建100个java对象,每一个对象都有this,也就是说有100个不同的this.

  4.this关键字可以出现在”实例方法“当中,this指向当前正在执行这个动作的对象。(this代表当前对象)

  5.this在多数情况下都是可以省略不写的

  6.this不能使用在带有static的方法中

什么时候程序在运行的时候会出现空指针异常呢?

   空引用访问实例相关的数据,因为实例相关的数据就是对象相关的数据

这些数据在访问的时候,必须有对象的参与,当空引用的时候,对象不存在

访问这些实例数据一定会出现空指针异常

实例相关的数据包括:

   实例变量【对象需要存在】

   实例方法【对象需要存在】

带有static的方法,其实既可以采用类名的方式访问,也可以采用引用的方式访问

但是即使采用引用的方式去访问,实际上执行的时候和引用指向的对象无关

在myeclipse中开发的时候,使用引用的方式访问带有static的方法,程序会出现警告

所以带有static的方法还是建议使用“类名."的方式访问

在带有static的方法当中不能”直接“访问实例变量和实例方法

  因为实例变量和实例方法都需要对象的存在

   而static的方法当中是没有this的,也就是说当前对象是不存在的。

  自然也是无法访问当前对象的实例变量和实例方法

 this.什么时候不能省略?

   用来区分局部变量和实例变量的时候,”this."不能省略

 this可以用在哪里?

    1.可以使用在实例方法当中,代表当前对象【语法格式:this.】

   2.可以使用在构造方法当中,通过当前的构造方法调用其他的构造方法【语法格式:this(实参);】

   注意:this()这种语法只能出现在构造方法的第一行

二、static关键字

什么时候成员变量声明为实例变量呢?

   -所有对象都有这个属相,但是这个属相的值会随着对象的变化而变化【不同对象的这个属相具体的值不同

什么时候成员变量声明为静态变量呢?

  -所有对象都有这个属性,并且所有对象的这个属性的值是一样的,建议定义为静态变量,节省内存的开销。

静态变量在类加载的时候初始化,内存在方法区中开辟。访问的时候不需要创建对象,直接使用“类名.静态变量名"的方式访问。

 关于java中的static关键字:

    1.static英语单词翻译为静态的

    2.static修饰的方法是静态方法

    3.static修饰的变量是静态变量

    4.所有static修饰的元素都称为静态的,都可以使用"类名."的方式访问,当然也可以用引用.的方式访问【不建议】

    5.static修饰的所有元素都是类级别的特征,和具体的对象无关

可以使用static关键字来定义“静态代码块”:

  1.语法格式:

       static{

           java语句;

       }

 2.静态代码块在类加载是执行,并且只执行一次。

 3.静态代码块在一个类中可以编写多个,并且遵循自上而下的顺序依次执行

 4.静态代码块的作用是什么?怎么用?用在哪儿?什么时候用?

    和具体的需求有关,例如项目中要求在类加载的时候/时机执行代码完成日志的记录。

 那么这段记录日志的代码就可以编写到静态代码块当中,完成日志记录

   静态代码块是java为程序员准备一个特殊的时刻,这个特殊的时刻被称为类加载时刻,若

希望在此刻执行一段特殊的程序,这段特殊的程序可以直接放到静态代码块当中。

5.通常在静态代码块当中完成预备工作,先完成数据的准备工作,例如:初始化连接池,解析ZML配置文件

方法什么时候定义为静态的?

   方法描述的是动作,当所有的对象执行这个动作的时候,最终产生影响是一样的,那么这个动作已经不再属于某一个对象动作了,可以将这个动作提上为类级别的动作,模板级别的动作。

静态方法中无法直接访问实例变量和实例方法。

 大多数方法都定义为实例方法,一般一个行为或者一个动作在发生的时候,都需要对象的参与

 但是也有例外,例如:大多数"工具类"中的方法都是静态方法,因为工具类是方便编程,为了方便方法的调用,自然不需要new对象是最好的。

 public class StaticTest{

    //实例变量

    int i=100;

    //实例方法

    public void doSome(){

    }

    //静态方法【静态上下文】

      public static void main(String[] args){

        //System.out.println(i);

        //doSome();

     

      StaticTest   st = new StaticTest();

      System.out.println(st.i);

       st.doSome();

     }

}

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

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

相关文章

koa2文件的上传下载功能

const Router require(“koa-router”); const upload new Router(); const bodyParser require(“koa-bodyparser”); const multer require("koa/multer"); const path require(“path”); const article require("…/utils/sql"); const { getCur…

(超详细)2-YOLOV5改进-添加SimAM注意力机制

1、在yolov5/models下面新建一个SimAM.py文件,在里面放入下面的代码 代码如下: import torch import torch.nn as nnclass SimAM(torch.nn.Module):def __init__(self, e_lambda1e-4):super(SimAM, self).__init__()self.activaton nn.Sigmoid()self…

在 C++/WinRT 中使用委托处理事件

本主题介绍了如何使用 C/WinRT 注册和撤销事件处理委托。 可以使用任何标准 C 函数类对象来处理事件。 使用 Visual Studio 添加事件处理程序(WPF) 一种将事件处理程序添加到项目的简便方法是使用 Visual Studio 中的 XAML 设计器用户界面 (UI)。 XAML …

STM32 1位共阳极数码管

数码管分为共阳极和共阴极,即多个二极管的同一端接到GND/Vss(若一起接到GND,则称为共阴极。若一起接到Vss,则称为共阳极) 把数码管上的每个二极管一次标号对应a,b,c,d,e,f,g,dp。我们知道发光二极管一端正一端负&#…

WSDM 2024 Oral | 港大提出DiffKG:融合知识图谱与扩散模型,为推荐系统赋能

论文链接: https://arxiv.org/abs/2312.16890 代码链接: https://github.com/HKUDS/DiffKG 实验室链接: https://sites.google.com/view/chaoh TLDR 知识图谱已成为提升推荐系统性能的重要资源,能提供丰富的事实信息并揭示实体间的…

问界又“翻车”了? 新能源电池“怕冷”成短板

文 | AUTO芯球 作者 | 李欣 2023年12月17日,蔚来创始人李斌亲自下场!驾驶ET7从上海出发,经过超14小时的行驶后,达成一块电池行驶超过1000公里的成绩,这一直播引起外界的广泛关注。 这不禁让人与”懂车帝冬测“联想到…

成员函数中的this指针,以及为什么可以指向调用对象(帮助理解)

对于类中的成员函数,所有对象都访问的是同一块空间 但是到这里可能就会疑问了,那这不是和static静态函数一样了吗?为什么它有this指针呢? 注:这些操作都是编译器进行的管理,不同的编译器有不同的管理方式&…

Python——函数的参数

1.位置参数 位置参数可以在函数中设置一个或者多个参数,但是必须有对应个数的值传入该函数才能成功调用,例如: def power(x):return x*xprint(powr(5)) 如果传入的值与对应函数设置的位置参数不符合,则会报错: Traceba…

自动驾驶 | 决策规划岗位校招面试中常见的数学方法整理

文章目录 前言计算几何学求解方程的根无约束优化——求解函数极值 前言 前段时间,我mentor面试了一个决策规划方向实习的候选人,这个候选人是我母校的学生,算是我的学弟,跟我一个专业,他的老师是我学院的院长&#xf…

test-02-test case generate 测试用例生成 EvoSuite 介绍

拓展阅读 junit5 系列 基于 junit5 实现 junitperf 源码分析 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) 拓展阅读 自动生成测试用例 什么…

用LM Studio:2分钟在本地免费部署大语言模型,替代ChatGPT

你想在本地使用类似ChatGPT 的大语言模型么?LM Studio 可以帮你2分钟实现ChatGPT的功能,而且可以切换很多不同类型的大语言模型,同时支持在Windows和MAC上的PC端部署。 LM Studio是一款面向开发者的友好工具,特别适合那些想要探索…

arm64上面运行armhf程序

arm64屏上跑armhf程序 起因:我们之前给客户的屏是armhf的,由于性能问题需要升级,现在提供给他们的屏是arm64的。 客户之前在armhf环境开发时花钱买了armhf版本的第三方的静态库使用, 现在升级用arm64的话又得花钱买arm64版本的库…

Go 类型系统

1、命名类型和未命名类型 命名类型:类型可以通过标识符来表示,这种类型称为命名类型。Go语言的基本类型中有20个预声明简单类型都是命名类型,Go语言还有一种命名类型——用户自定义类型。 未命名类型:一个类型由预声明类型、关键…

【促销定价】背后的算法技术 2 - 数据预处理生成

【促销定价】背后的算法技术 2 - 数据预处理生成 01 数据探查02 数据清洗03 数据聚合04 数据补全05 小结参考文献 导读:在日常生活中,我们经常会遇见线上/线下商家推出各类打折、满减、赠品、新人价、优惠券、捆绑销售等促销活动。一次成功的促销对于消费…

python -- pyQt5中 样式设置

一、父控件设置样式表后对子控件产生影响,控制styleSheet的作用范围 https://blog.csdn.net/qq_31073871/article/details/90288625 QFrame 作为容器,放入其他多种部件,里面的边框都生效 在类名后面用 #号串接变量名,子控件不…

Required request parameter ‘ids‘ for method parameter type List is not present]

在写delete方法的时候,出现了bug 于是将RequestParam换成PathVariable 两者有何区别? pathVariable和RequestParam的区别 在Spring MVC框架中,PathVariable 和 RequestParam 是两种用于从HTTP请求中获取参数的注解,它们的区别…

Flask vs Django:我该选择哪一个?

大家好!在选择适合自己的Web开发框架时,Flask和Django都是开发者最喜欢的Python Web应用框架。 在本文章中给大家介绍如何正确选择以及优缺点对比,喜欢记得收藏、关注、点赞。 一,Flask Flask是一个轻量级的Web应用框架&#x…

决策树:理解机器学习中的关键算法

决策树:理解机器学习中的关键算法 决策树是一种流行而强大的机器学习算法,它从数据中学习并模拟决策过程,以便对新的未知数据做出预测。由于其直观性和易理解性,决策树成为了分类和回归任务中的首选算法之一。在本文中&#xff0…

2024最新外贸建站:SiteGround主机购买使用及自建外贸独立站教程

原文来源:https://guomuyu.com/building-website-siteground.html 在开始之前,让我们先了解一下什么是外贸独立站。外贸独立站简单来说就是一个拥有独立域名的网站,它不依赖于第三方平台(如阿里巴巴、亚马逊等)的网站…

Python--闭包

在 Python 中,闭包是一种函数,它能够记住并访问其所在词法作用域(即定义该函数的作用域)中的变量,即使该函数在其词法作用域之外被调用。要形成闭包,需要满足以下几个条件: 必须有一个内嵌函数&…