[转载] 详解Java中静态方法

参考链接: Java中的静态类

定义: 在类中使用static修饰的静态方法会随着类的定义而被分配和装载入内存中;而非静态方法属于对象的具体实例,只有在类的对象创建时在对象的内存中才有这个方法的代码段。 

注意: 非静态方法既可以访问静态数据成员 又可以访问非静态数据成员,而静态方法只能访问静态数据成员; 非静态方法既可以访问静态方法又可以访问非静态方法,而静态方法只能访问静态数据方法。 

原因: 因为静态方法和静态数据成员会随着类的定义而被分配和装载入内存中,而非静态方法和非静态数据成员只有在类的对象创建时在对象的内存中才有这个方法的代码段。 

引用静态方法时,可以用类名.方法名或者对象名.方法名的形式。 对以上描述进行验证的代码示例: 

import java.util.*;

 

public class TestStatic {

    public static void main(String[]args){

        System.out.println(S.getStatic());//使用类名加前缀访问静态方法

        S s=new S();

        System.out.println(s.getStatic());//使用实例化对象名访问静态方法

        System.out.println(s.get());

    }

    public static class S

    {

        private static int a;

        private int t=0;

 

        //静态初始器:由static和{}组成,只在类装载的时候(第一次使用类的时候)执行一次,往往用来初始化静态变量。

        static{

            a=10;

        }

 

        //静态方法只能访问静态数据成员

        public static int getStatic()

        {

            return a;

        }

 

        public int getT()

        {

            return t;

        }

 

        //非静态方法可以访问静态方法和非静态方法

        public int get()

        {

            getT();

            getStatic();

            t=a;//非静态方法可以访问非静态数据成员和静态数据成员

            return t;

        }

    }

}

 

总结: (1)static修饰的静态方法会随着类的定义而被分配和装载入内存中,编译器只为整个类创建了一个静态变量的副本,也就是只分配一个内存空间,虽然可能有多个实例,但这些实例共享该内存,特别值得注意的是,任何一个对象对静态数据成员的修改,都会影响其它对象。 (2)静态不能引用非静态这一特性,是由于静态的会随着类的定义而被分配和装载入内存中这一关键点决定的;如果静态引用了非静态的,根本无法从内存中找到非静态的代码段,势必会出错,这种做法是Java虚拟机决不允许的。

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

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

相关文章

[转载] 向集合中添加自定义类型--建议在自定义类型的时候要重写equals方法

参考链接: Java重写equals方法 package com.bjpowernode.t01list; import java.util.ArrayList; /* * 向集合中添加自定义类型 */public class TestList04 { public static void main(String[] args) { ArrayList list new ArrayList(); Student s1 new Stude…

[转载] java重写toString()方法

参考链接: 在Java中重写toString() 前言: 在你兴高采烈的写完一个类,创建测试类时,创建对象,传入参数,调用对象,以为会得到参数值,但突然发现输出的是“ 类名什么东东?&…

haproxy+keepalived实现负载均衡及高可用

HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高性能性、负载均衡,以及基于TCP和HTTP的应用程序代理。相较与 Nginx,HAProxy 更专注与反向代理,因此它可以支持更多的选项,更精细的控制,更多的健…

[转载] Java中变量与常量

参考链接: Java中的实例变量隐藏 1、变量的定义:定义变量就是要告诉编译器这个变量的数据类型,这样编译器才知道需要分配多少空间给它,以及它能存放什么样的数据。在程序运行过程中空间的值是变化的,这个内存空间就成…

Linux-实用快捷键操作

博文说明【前言】: 本文将通过个人口吻介绍Linux下一些常用的实用快捷键,在目前时间点【2017年6月14号】下,所掌握的技术水平有限,可能会存在不少知识理解不够深入或全面,望大家指出问题共同交流,在后续工作…

iOS技术博客:App备案指南

📝 摘要 本文介绍了移动应用程序(App)备案的重要性和流程。备案是规范App开发和运营的必要手段,有助于保护用户权益、维护网络安全和社会秩序。为了帮助开发者更好地了解备案流程,本文提供了一份最新、最全、最详的备…

[转载] Java中静态成员变量,静态代码块,静态内部类何时被初始化?

参考链接: Java中的初始化程序块Initializer Block 关于这个问题,本文不扯理论,直接上代码,通过结果来验证结论,废话少说,测试代码如下: public class StaticTest { public static StaticMem…

mikrotik dhcp server

操作路径: /ip dhcp-server 关联操作: /ip pool属性 述 dhcp server interface (名称) – 选择 DHCP 服务的网络接口 dhcp address space (IP 地址/掩码; 默认: 192.168.0.0/24) – DHCP 服务器将出租给客户端的网络地 址段 gateway (IP 地址; 默认: 0.0.0.0) – 分配给客户端的…

[转载] Java static关键字与static{}语句块

参考链接: Java中的静态块static block 目录直通车 一、 类的加载特性与时机 1、 类加载的特性 2、 类加载的时机 二、 static的三个常用 1、 修饰成员变量 2、 修饰成员方法 3、 静态块(static{}) 一、 类的加载特性与时机 …

Perl文件读写操作

本文转自 tiger506 51CTO博客,原文链接:http://blog.51cto.com/tiger506/830771,如需转载请自行联系原作者

[转载] Java 语言中的实例初始化块 ( IIB) 详解

参考链接: Java中的实例初始化块(IIB) 在 Java 语言中的类初始化块 文章中我们简单的介绍了下 Java 中的实例初始化块 ( IIB )。不过我觉得介绍的有点简单了,于是,再写一篇文章详细介绍下吧。 Java 语言中,存在三种操作&#x…

不用正则表达式,用javascript从零写一个模板引擎(一)

前言 模板引擎的作用就是将模板渲染成html,html render(template,data),常见的js模板引擎有Pug,Nunjucks,Mustache等。网上一些制作模板引擎的文章大部分是用正则表达式做一些hack工作,看完能收获的东西很少。本文将使用编译原理那套理论来打…

[转载] Java静态绑定与动态绑定

参考链接: Java中的静态绑定与动态绑定 程序绑定的概念: 绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来。对java来说,绑定分为静态绑定和动态绑定;或者叫做前期绑定和后期绑定. 静态绑定: 在程序执行前方…

关于批量插入数据之我见(100万级别的数据,mysql)

2019独角兽企业重金招聘Python工程师标准>>> 因前段时间去面试,问到如何高效向数据库插入10万条记录,之前没处理过类似问题,也没看过相关资料,结果没答上来,今天就查了些资料,总结出三种方法&am…

各个OS关于查看磁盘和wwn号的方法

1,HP-UX几个命令1)查看型号,和uname -a差不多model2)查看光纤卡信息ioscan -funC fc3) 查看扫描出的磁盘信息ioscan -fucC disk4)查看磁盘及其对应的路径ioscan -m dsf5) 查看划分过来的lunioscan -m lun6) 查看磁盘大小diskinfo …

[转载] Java是不是面向对象的程序

参考链接: 为什么Java不是纯粹的面向对象语言 转载自:https://blog.csdn.net/a21700790yan/article/details/80129053 Java——是否确实的 “纯面向对象”?让我们深入到Java的世界,试图来证实它。 在我刚开始学习 Java 的前面几…

极速理解设计模式系列:6.适配器模式(Adapter Pattern)

四个角色:目标抽象类角色(Target)、目标对象角色(Adapter)、源对象角色(Adaptee)、客户端角色(Client) 目标抽象类角色(Target):定义需要实现的目标接口 目标对象角色(Adapter):调用另外一个源对象,并且转换…

[转载] Java之继承

参考链接: Java多重继承 Java之继承 继承是面向对象程序的一个基本特征,通过继承可以实现父子关系,以及代码的复用。通过继承实现的类称为子类,被继承的类称为父类,所有直接或间接被继承的类都称为父类。 Java类体…

Spark(二): 内存管理

2019独角兽企业重金招聘Python工程师标准>>> Spark 作为一个以擅长内存计算为优势的计算引擎,内存管理方案是其非常重要的模块; Spark的内存可以大体归为两类:execution和storage,前者包括shuffles、joins、sorts和agg…

[转载] 手把手教你整合最优雅SSM框架:SpringMVC + Spring + MyBatis

参考链接: Java继承类的对象创建 本文发表于2016年6月,写于作者学生时期。文中使用到的技术和框架可能不是当下最佳实践,甚至很不“优雅”。但对于刚接触JavaEE和Spring的同学来说,还是能有很多收获的,大牛轻拍 我们…