一、其他注意点

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关键字的更多相关文章

  1. java中普通的顶级类是不能使用static关键字修饰的。只有内部类可以使用static修饰,也可以不使用staitc关键字修饰。

    java中普通的顶级类是不能使用static关键字修饰的.只有内部类可以使用static修饰,也可以不使用staitc关键字修饰. java中的类可以是static吗?答案是可以.在java中我们可以 ...

  2. 《java入门第一季》之面向对象(static关键字)

    /* static的特点:(它可以修饰成员变量,还可以修饰成员方法) A:随着类的加载而加载 回想main方法. B:优先于对象存在 C:被类的所有对象共享 举例:班级的学生应该共用同一个班级编号. ...

  3. 《Java程序员面试笔试宝典》之Static关键字有哪些作用

    static关键字主要有两种作用:第一,只想为某特定数据类型或对象分配单一的存储空间,而与创建对象的个数无关.第二,希望某个方法或属性与类而不是对象关联在一起,也就是说,在不创建对象的情况下就可以通过 ...

  4. [C]控制外部变量访问权限的extern和static关键字

    一.extern 概述 编译器是由上至下编译源文件的,当遇到一些函数引用外部全局变量,而这个变量被定义在该函数声明主体的下方,又或者引用自其它的编译单元,这个情况就需要extern来向编译器表明此变量 ...

  5. java——字符串常量池、字符串函数以及static关键字的使用、数组的一些操作函数、math函数

    字符串常量池: 字符串比较函数:  字符串常用方法:  字符串截取函数: 字符串截取函数:  static关键字使用: 要调用类中的static类型的变量的时候,可以用"类名.变量名&quo ...

  6. 《java入门第一季》之面向对象(static关键字内存图解)

  7. Java学习笔记(十八):static关键字

  8. Java面向对象-static关键字、静态方法与普通方法、静态成员变量

    Java面向对象-static关键字.静态方法与普通方法 static关键字的基本作用:方便在没有创建对象的情况下来进行调用(方法/变量). 很显然,被static关键字修饰的方法或者变量不需要依赖于 ...

  9. java static关键字和代码块

    static关键字 代码块 方法重写 1. 方法重写的特点: 2. 注意事项: static关键字 为什么需要学习static关键字? 针对某一个变量属于类而不属于某一个具体的对象的时候,我们可以考虑 ...

随机推荐

  1. MVC 控制台 +log4net 存入数据库

    首先在你的项目 安装好 log4net包 如下图进入AssemblyInfo.cs类 代码里面 加上这一串 [assembly: log4net.Config.XmlConfigurator(Conf ...

  2. ORA-27090: Unable to reserve kernel resources for asynchronous disk I/O

    2019-08-19T09:27:33.225584+08:00Slave encountered ORA-27090 exception during crash recoveryRecovery ...

  3. sql server使用sp_executesql返回拼接字符串里面的输出参数

    问题: 今天一同事请教博主,他拼接了一个语句,select表格形式数据,然后使用@@rowcount获取到行数. 但他又有这样特别的需求:想只获取行数而不返回表格数据结果,因为是while循环,不想返 ...

  4. s3c2440裸机-代码重定位(2.编程实现代码重定位)

    代码重定位(2.编程实现代码重定位) 1.引入链接脚本 我们上一节讲述了为什么要重定位代码,那么怎么去重定位代码呢? 上一节我们发现"arm-linux-ld -Ttext 0 -Tdata ...

  5. Linux系统学习 十二、VSFTP服务—简介与原理

    1.简介与原理 互联网诞生之初就存在三大服务:WWW.FTP.邮件 FTP主要针对企业级,可以设置权限,对不同等级的资料针对不同权限人员显示. 但是像网盘这样的基本没有权限划分. 简介: FTP(Fi ...

  6. Python:爬取网站图片并保存至本地

    Python:爬取网页图片并保存至本地 python3爬取网页中的图片到本地的过程如下: 1.爬取网页 2.获取图片地址 3.爬取图片内容并保存到本地 实例:爬取百度贴吧首页图片. 代码如下: imp ...

  7. 模块引用方式利弊辨析: 全局绝对引用(alias) && 长相对引用

    前言 这个问题首先要从我们项目的require语句开始说起. 当打开我们项目的时候,我们可能会看到一大堆长相对引用,如下所示: import component from '../../../../c ...

  8. 微信小程序的坑(持续更新中)

    参与微信小程序开发有一段时间了,先后完成信息查询类和交易类的两个不同性质的小程序产品的开发:期间遇到各种各样的小程序开发的坑,有的是小程序基础功能不断改进完善而需要业务持续的适配,有的是小程序使用上的 ...

  9. [译]Vulkan教程(29)组合的Image采样器

    [译]Vulkan教程(29)组合的Image采样器 Combined image sampler 组合的image采样器 Introduction 入门 We looked at descripto ...

  10. java之==操作符和equals操作符

    ==操作符: 基本数据类型比较值: 引用数据类型比较引用(是否指向同一个对象) equals操作符: 引用数据类型比较引用(是否指向同一个对象) 对于String.File.Date.包装类来说,只比 ...