热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java重修之路(七)面向对象之静态,主函数,Doc文档,静态代码块,对象初始化过程,单例设计模式

静态(Static)是一个修饰符,用于修饰成员(包括成员变量和成员函数)被Static修饰的变量不在堆内存中&

静态(Static)


是一个修饰符,用于修饰成员(包括成员变量和成员函数)
被Static修饰的变量不在堆内存中,被提取到共享区域中,节省空间。被对象所共享。


public class Person {private int age;private String name;private String Dept = "计算机科学学院";
}
比如这个Person类,每个人的Dept都是一样的,每次new一个对象都会包含一个初始化完成的Dept,这样极大浪费空间,发现每个对象的Dept都是一样的,于是用Static修饰,将Static提到共享区域中共用,节省空间。

当成员被Static修饰时,就多了一种调用方式,除了可以被对象调用以外,还可以直接通过类名调用。类名.静态成员。
对象共享的数据才能定义为静态。
Static特点:
随着类的加载而加载,随着类的消失而消失。生命周期最长。(一旦类被调入内存,此时静态变量就已经存在)
被所有对象所共享。
优先于对象存在。
可以直接被类名调用。





实例变量和类变量的区别:
类中静态变量也称为类变量,类的成员变量成为实例变量。
1.存放位置的区别:
类变量随着类的加载而存在于方法区/共享区.
实例变量随着对象的建立存在于堆内存的对象实例里。
生命周期的区别:
类变量生命周期最长,随着类的消失而消失。
实例变量随着对象的消失而消失。





静态的使用注意事项。
1.静态方法只能访问静态成员(包括成员变量和成员方法)
原因很简单:因为静态方法随着类的加载而加载,此时对象还不存在,因此非静态的成员变量和成员方法都不存在,所以不能访问。
非静态方法既可以访问静态,也可以访问非静态。
2.静态方法中不可以定义this,super关键字,还是因为静态优先于对象存在,this也是代表对象。





利弊:
对对象的共享数据进行单独的存储, 节省空间。
可以直接被类名调用。
弊端:生命周期过长,访问有局限性。





主函数Main

public class Hello {public static void main(String[] args) {// 主函数是一个特殊的函数,作为程序的入口,可以被JVM调用。// public:访问权限最大,可以被虚拟机访问// Static:代表着主函数随着类的加载而加载// void:主函数没有具体的返回值// main:不是关键字,但是是一个特殊的标记,可以被JVM识别// 参数:是字符串数组// 主函数是固定格式的,供虚拟机识别// 主函数可以重载,但是虚拟机只识别这一个System.out.println(args.length);System.out.println(args);// 其实传进去一个数组实体,但是长度为0 new String[0]}public static void main(String[] args, int x) {System.out.println("主函数重载");}
}
打印结果:
0
[Ljava.lang.String;@2a139a55



帮助文档的制作doc

给类制作帮助文档要求类必须是public修饰
类中的私有的方法不会暴露,只会暴露public和protected会暴露出去供人使用
制作方法:
写好类和方法的注释说明之后,编译:
这里写图片描述

效果:

这里写图片描述

然后点开index.html即可查看。

这里写图片描述
至此,说明文档制作完成。


静态代码块

特点:随着类的加载而执行,只执行一次。用于给类进行初始化。

public class Person {static {System.out.println("我是静态代码块!");}public static String Name = "zhangsan";}

运行结果:

这里写图片描述



看下边执行结果:

这里写图片描述
打印结果为:bca


注意与构造代码块的区别:
静态代码块与类联系在一起,构造代码块与对象联系在一起,构造代码块详见上一篇文章构造代码块详解
静态代码块初始化类,构造代码块初始化对象。 静态代码块最先执行,只有有对象出现才会有构造代码块,注意执行顺序。
静态代码块也只能访问静态成员。


这里写图片描述


打印结果为:acd 首先是静态代码块,然后是构造代码块,然后是构造函数。





对象的初始化过程

这里写图片描述

静态方法之间互相调用,不能用this. 因为没有对象,可以用 类名. 但是一般省略。


单例设计模式


一个类在内存中只存在一个对象。

这里写图片描述


这里写图片描述


为了获取到实例,但是又不能new,只能通过getInsTance方法,但是没有对象,不能通过对象调用,只能讲此方法静态,由于静态只能调用静态,必须将s静态,然后private。最后通过类名调用。




实现方式二:懒汉式

这里写图片描述


Single类进内存,对象还没有存在,只有调用了getInstance才会建立对象。但是懒汉式有弊端,不能保证唯一性。

这里写图片描述

有可能CPU刚刚判断玩s==null 成立,就转去执行其他程序,然后B走到这里再次判断s==null成立,这时后边再执行就会有两个对象,不能保证唯一性。

解决方案:

这里写图片描述
synchronized是同步的意思,会进行加锁成立,一次只允许进一个。
建议使用饿汉式。



推荐阅读
  • 深入解析 Java UTC 时间处理技术与应用 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
  • Java 中 ZonedDateTime 类的天数方法详解及示例代码 ... [详细]
  • Java 模式原型在游戏服务器架构中的应用与优化 ... [详细]
  • Netty框架中运用Protobuf实现高效通信协议
    在Netty框架中,通过引入Protobuf来实现高效的通信协议。为了使用Protobuf,需要先准备好环境,包括下载并安装Protobuf的代码生成器`protoc`以及相应的源码包。具体资源可从官方下载页面获取,确保版本兼容性以充分发挥其性能优势。此外,配置好开发环境后,可以通过定义`.proto`文件来自动生成Java类,从而简化数据序列化和反序列化的操作,提高通信效率。 ... [详细]
  • 探索偶数次幂二项式系数的求和方法及其数学意义 ... [详细]
  • 本文深入探讨了Java中正确使用return语句的方法。通过详尽的示例和解释,帮助读者理解return语句在不同场景下的应用,提升代码质量和可读性。希望读者在阅读后能够掌握return语句的最佳实践,从而在实际开发中更加得心应手。 ... [详细]
  • 捕获并处理用户输入数字时的异常,提供详细的错误提示与指导
    在用户输入数字时,程序能够有效捕获并处理各种异常情况,如非法字符或格式错误,并提供详尽的错误提示和操作指导,确保用户能够准确输入有效的数字数据。通过这种方式,不仅提高了程序的健壮性和用户体验,还减少了因输入错误导致的系统故障。具体实现中,使用了Java的异常处理机制,结合Scanner类进行输入读取和验证,确保了输入的合法性和准确性。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • Java 中 print、println 和 printf 的功能与区别详解
    在 Java 中,`print` 方法将参数内容输出到控制台,并将光标停留在最后一个字符的后面。而 `println` 方法不仅显示参数内容,还会在输出结束后自动添加一个换行符,使下一次输出从新的一行开始。此外,`printf` 方法则提供了更灵活的格式化输出选项,允许用户通过指定格式字符串来控制输出的格式和样式。这三种方法各有特点,适用于不同的输出需求。 ... [详细]
  • C++入门必备:首个博客知识点汇总
    本文总结了C++初学者需要掌握的关键知识点,特别强调了成员类型的区分。其中,protected成员与private成员在本类中的作用相同,但protected成员允许派生类的成员函数访问,而private成员则不允许。此外,文章还介绍了其他重要的C++基础概念,如类的构造函数、析构函数以及继承机制,为初学者提供了一个全面的学习指南。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • Java SE 文件操作类详解与应用
    ### Java SE 文件操作类详解与应用#### 1. File 类##### 1.1 File 类概述File 类是 Java SE 中用于表示文件和目录路径名的对象。它提供了丰富的方法来操作文件和目录,包括创建、删除、重命名文件,以及获取文件属性和信息。通过 File 类,开发者可以轻松地进行文件系统操作,如检查文件是否存在、读取文件内容、列出目录下的文件等。此外,File 类还支持跨平台操作,确保在不同操作系统中的一致性。 ... [详细]
  • 字节码开发笔记:深入解析与应用技巧 ... [详细]
  • 通过采用用户数据报协议(UDP),本研究设计并实现了一种高效的文件传输方法。在发送端,系统利用Java编程语言中的相关类库,如`File`和`FileInputStream`,实现了文件的读取与分段处理,确保了数据的快速传输。该方法不仅提高了传输效率,还降低了网络拥塞的风险,适用于大规模文件传输场景。 ... [详细]
author-avatar
大额资金一号
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有