Java连载43-访问静态方法其他注意事项、static关键字
一、其他注意点
1.对于带有static的方法,我们讲过需要用“类名.”的方式进行访问,但是其实我们使用“引用.”的方式也是可以进行访问这个方法的举例。
package com.bjpowernode.java_learning; public class D43_ { public static void main(String[] args) { Test3.test3(); Test3 t1 = new Test3(); t1.test3(); } } class Test3{ String name; public Test3() {} public static void test3(){ System.out.println("我可以执行"); } }
2.对于上面的特性,为什么这样,我想用下面这个更进一步的例子,也许可以知晓一二了,我们之前讲过空指针异常。
这个空指针异常,是指空引用访问实例相关的数据就是对象相关的数据,这些数据在访问的时候,必须有对象的参与,当空引用的时候,对象是不存在的,访问这些数据就会出现空指针异常。
我们在紧接着上面的程序,再加一段执行程序
t1 = null; t1.test3();
我们可以看到,即使是空指针,也照样可以执行并没有出现空指针异常,这说明了这里的t1这个对象,我们根本就没用到它,在执行的时候,系统依然会改写为Test3.test3()这样进行执行。
但是这种方式不推荐,虽能执行但不合我们的逻辑。
二、静态变量
1.首先看一段对象创建的代码
package com.bjpowernode.java_learning; public class D43_2_static_keyword { public static void main(String[] args) { Chinese c1 = new Chinese("zhangsan",32,"China"); Chinese c1 = new Chinese("lisi",34,"China"); } } class Chinese{ String name; int id; String country; public Chinese(String name,int id,String country) { this.name = name; this.id = id; this.country = country; } }
解释:我们创建了两个Chinese对象,他们的国籍都是中国,但是这样我们每次创建都得写一次China,这样就造成了代码的冗余,当我们去掉这个实例变量的时候,场景不合理,还需要这样的属性值,因此我们对于这种对象都共有的属性,引出静态变量的概念。
2.静态变量,也就是在类的代码中,对于实例变量,我们加一个static关键字,代表这个属性是所有创建出来的该对象共有的属性
(1)静态变量在类加载的时候进行初始化,不需要创建对象了,内存就开辟出来了。
(2)静态变量存储在方法区内存。
例子:
package com.bjpowernode.java_learning; public class D43_2_static_keyword { public static void main(String[] args) { Chinese c1 = new Chinese("zhangsan",32); System.out.println(c1.country); System.out.println(Chinese.country); c1 = null; System.out.println(c1.country); } } class Chinese{ String name; int id; static String country = "China"; public Chinese(String name,int id) { this.name = name; this.id = id; } pubic Chinese() {} }
个例子可以看出我们访问这个实例变量的时候,可以用"类."访问,也可以用"引用."访问,都成功了,而且原理也和我们上面讲述空指针类似,下面的再几个例子。
package com.bjpowernode.java_learning; public class D43_2_static_keyword { public static void main(String[] args) { // Chinese c1 = new Chinese("zhangsan",32);//这样写报错因为,缺一个参数,即使是提前被定义了 Chinese c2 = new Chinese("lisi",34,"fhai"); //换个值 Chinese c3 = new Chinese("lisi",34,"China"); System.out.println(c2.country); System.out.println(c3.country); } } class Chinese{ String name; int id; static String country = "China"; public Chinese(String name,int id,String country) { this.name = name; this.id = id; this.country = country; } pubic Chinese() {} }
解释:说明即使我们定义了构造函数来修改这种对象里面的country值也修改不了。
(3)总结:
i.static英语的那次翻译为:静态的;
ii.static修饰的方法是静态方法;
iii.static修饰的变量是静态的;
iv.所有的static修饰的元素都称为静态的,都可以使用“类名.”的方式进行访问,当然也可以用“引用.”的方式进行访问(但不建议这么做)
三、源码:
D43_other_anouncements_of_interviewing_object.java
D43_2_static_keyword1.java
D43_2_static_keyword2.java
地址:
https://github.com/ruigege66/Java/blob/master/D43_other_anouncements_of_interviewing_object.java
https://github.com/ruigege66/Java/blob/master/D43_2_static_keyword1.java
https://github.com/ruigege66/Java/blob/master/D43_2_static_keyword2.java
2.CSDN:https://blog.csdn.net/weixin_44630050(心悦君兮君不知-睿)
3.博客园:https://www.cnblogs.com/ruigege0000/
4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料
Java连载43-访问静态方法其他注意事项、static关键字的更多相关文章
- java中普通的顶级类是不能使用static关键字修饰的。只有内部类可以使用static修饰,也可以不使用staitc关键字修饰。
java中普通的顶级类是不能使用static关键字修饰的.只有内部类可以使用static修饰,也可以不使用staitc关键字修饰. java中的类可以是static吗?答案是可以.在java中我们可以 ...
- 《java入门第一季》之面向对象(static关键字)
/* static的特点:(它可以修饰成员变量,还可以修饰成员方法) A:随着类的加载而加载 回想main方法. B:优先于对象存在 C:被类的所有对象共享 举例:班级的学生应该共用同一个班级编号. ...
- 《Java程序员面试笔试宝典》之Static关键字有哪些作用
static关键字主要有两种作用:第一,只想为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关.第二,希望某个方法或属性与类而不是对象关联在一起,也就是说,在不创建对象的情况下就可以通过 ...
- [C]控制外部变量访问权限的extern和static关键字
一.extern 概述 编译器是由上至下编译源文件的,当遇到一些函数引用外部全局变量,而这个变量被定义在该函数声明主体的下方,又或者引用自其它的编译单元,这个情况就需要extern来向编译器表明此变量 ...
- java——字符串常量池、字符串函数以及static关键字的使用、数组的一些操作函数、math函数
字符串常量池: 字符串比较函数: 字符串常用方法: 字符串截取函数: 字符串截取函数: static关键字使用: 要调用类中的static类型的变量的时候,可以用"类名.变量名&quo ...
- 《java入门第一季》之面向对象(static关键字内存图解)
- Java学习笔记(十八):static关键字
- Java面向对象-static关键字、静态方法与普通方法、静态成员变量
Java面向对象-static关键字.静态方法与普通方法 static关键字的基本作用:方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者变量不需要依赖于 ...
- java static关键字和代码块
static关键字 代码块 方法重写 1. 方法重写的特点: 2. 注意事项: static关键字 为什么需要学习static关键字? 针对某一个变量属于类而不属于某一个具体的对象的时候,我们可以考虑 ...
随机推荐
- sql语句中给列参数取别名及相关注意事项
1.使用双引号 select count(*) "总数" from table: 2.使用单引号 select count(*) '总数' from table: 3.直接加别名, ...
- 阿里云ECS服务器部署HADOOP集群(六):Flume 安装
本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建. 1 环境介绍 一台阿里云ECS服务器:master 操作系统:CentOS 7.3 Hadoop ...
- pytest系列(一):什么是单元测试界的高富帅?
pytest是python语言中一款强大的单元测试框架,用来管理和组织测试用例,可应用在单元测试.自动化测试工作中. unittest也是python语言中一款单元测试框架,但是功能有限,没有pyte ...
- [洛谷P1279][题解]字串距离
题目戳我 很明显的这题是一道dp,主要讲一下几个细节 1.初始化 我们需要初始化边界情况也就是一个字符串为空的情况 #----------# #----------# A:aaaaaa A:□□□□□ ...
- jmeter相关知识学习记录
基于Jmeter5.2.1 断言之响应断言 响应断言:对服务器的响应接口进行断言校验,来判断接口测试得到的接口返回值是否正确. 测试字段就是指要断言的内容的匹配处. 响应文本:就是响应的body部分: ...
- vscode 格式化代码 与 eslint 有冲突的问题解决
项目中配置了eslint后,在使用vue界面里格式化的时候总是不一致.然后在配置中加了配置也无效(File - Preference - Setting) 查了下原因是在vue开发的时候我们一般都安装 ...
- 搞定vscode编写java(手把手篇)
1: 下载VSCODE 本来我写过一个 vscode 编写java 帖子,但是 还是很多人私信我,下面写一个手把手教程 原文地址: https://www.cnblogs.com/dgwblog/p/ ...
- fjnu2019第二次友谊赛 B题
### 题目链接 ### 题目大意: 给你一个 n * m 的地图以及小蛇蛇头的初始位置,告诉你它会往 上.下.左.右 四个方向走.若在走的过程中(包括结束时)会使得小蛇越界,则输出 "Ga ...
- 使用cJSON库解析和构建JSON字符串
使用cJSON库解析和构建JSON字符串 前言 其实之前的两篇博文已经介绍了json格式和如何使用cJSON库来解析JSON: 使用cJSON库解析JSON JSON简介 当时在MCU平台上使用时,会 ...
- go语言之range
Go 语言范围(Range) Go 语言中 range 关键字用于 for 循环中迭代数组(array).切片(slice).通道(channel)或集合(map)的元素.在数组和切片中它返回元素的索 ...