Java学习11

目录

一.类变量和类方法:

1.类变量定义访问:

2.类变量的使用细节:

3.类方法:

4.静态main方法(public static void main(String [] args)):

二.代码块:

1.基本语法:

2.代码块使用细节与注意事项:

三.单例模式(在程序运行过程中,只能创建一个对象实例):

(1)饿汉式单例模式步骤:

(2)懒汉式:

(3)区别:


一.类变量和类方法:

static变量保存在class实例的尾部,class对象保存在堆中。

static变量是同一个类的所有对象共享,static变量在类加载(new创建实例时类加载)的时候就生成了。

1.类变量定义访问:

(1)语法:

访问修饰符 static 数据类型 变量名;

(2)访问:

类名.类变量名(推荐)或者对象.类变量名

静态变量的访问修饰符的访问权限和范围和普通属性是一样的。

类变量是随着类加载而创建的,没有加载的实例也可以使用。

2.类变量的使用细节:

  • 实例变量不能通过类名.变量名来访问(非静态变量)
  • 类变量在类加载时就初始化了,即使你没有创建对象,只要类加载了,就可以使用类变量了。
  • 类变量的声明周期是随着类的加载而开始,随着类消亡而销毁。

3.类方法:

当方法使用static修饰后,方法就是静态方法,静态方法可以访问静态属性/变量。

(1)语法:

访问修饰符 static 数据返回类型 方法名(){ }(推荐)

static 访问修饰符 数据返回类型 方法名(){ }

(2)类方法的调用:

类名.类方法名或对象名.类方法名

(3)类方法的注意事项与使用细节:

非静态方法不能通过类名调用,类方法不允许使用与类相关的关键字(this、super)。

类方法(静态方法)只能访问静态变量或静态方法,普通成员既可以访问非静态成员(变量、方法),又可以访问静态变量(方法)。

4.静态main方法(public static void main(String [] args)):

(1)main方法是Java虚拟机来调用的,所以访问权限是public。

(2)Java虚拟机在执行main方法时不必创建对象,因此是方法必须是static。

(3)该方法接受String类型的数组参数

(4)main方法可以直接调用main方法所在类中的静态方法或静态属性,不能直接访问该类中的静态成员。

(4)main动态传值:

Edit configurations中的Program argument中填入参数,参数之间要以空格隔开。

二.代码块:

  • 代码块又称为初始化块,属于类中的成员,类似于方法,将逻辑语句封装在方法体中,通过{}包裹起来。
  • 与方法体不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象显示调用,而是加载类时,或创建对象时隐式调用。
  • 相当于另一种形式的构造器(对构造器的补充机制),可以做初始化的操作,如果多个构造器中都有重复的语句,可以抽取到代码块中,提高代码的复用性。
  • 代码块的执行顺序在构造器之前。

1.基本语法:

[修饰符]{

    代码

};

书写注意事项:

  1. 修饰符可选,要写的话,只能写static
  2. 代码块分两类,使用static修饰的叫静态代码块,没有static修饰的叫普通代码块。
  3. 逻辑语句可以为任何逻辑语句(输入、输出、方法调用、循环、判断) 

2.代码块使用细节与注意事项:

  • static代码块也叫静态代码块,作用就是对类进行初始化,而且它随着类加载而执行,并且只会执行一次。如果是普通代码块,每创建一个对象就执行一次。
  • 如果使用类的静态成员,普通代码并不会执行,而静态代码块会执行。
  • 调用静态代码块和静态属性初始化,静态代码块和静态属性初始化调用的优先级一样,如果多个静态代码块和多个静态变量初始化,则按他们定义的顺序调用。(普通代码块)
  • 构造器最前面其实隐含了super()和调用普通代码块,静态代码块在类加载时执行。
  • 静态代码块只能调用静态成员(静态属性和静态方法),普通代码块可以调用任意成员。

类加载:

  1. 创建对象实例(new)
  2. 创建子类对象实例,父类也会被加载。
  3. 使用类的静态成员时(静态属性、静态方法)

创建一个子类对象时,调用顺序如下:

三.单例模式(在程序运行过程中,只能创建一个对象实例):

(1)饿汉式单例模式步骤:

私有化构造器->类的内部创建对象(静态对象)->向外暴漏一个静态的公共方法->通过公共方法获取对象。

public class Stringto{public static void main(String[] args){girlfriend g = girlfriend.getInstance();//通过方法获取对象girlfriend g2 = girlfriend.getInstance();//g与g2是同一个对象}
}
class girlfriend{private static name;private static girlfriend gf = new girlfriend("小静");//类加载时完成静态属性初始化,只会初始化一次private girlfriend(String name){this.name = name;}public static girlfriend getInstance(){//只有使用静态对象,才能不创建对象直接调用该方法return gf;}
}

(2)懒汉式:


public class Stringto{public static void main(String[] args){Cat c1 = Cat.getInstance();Cat c2 = Cat.getInstance();//c1与c2两个对象相同。}
}class Cat {private String name;public static int n1 = 99;private static Cat cat;private Cat(String name){this.name = name; }public static Cat getInstance(){  if(cat == null){cat == new Cat("小可爱");}return cat;}
}
//懒汉式只有当用户使用getInstance时,才返回cat对象。后面再次调用时,会返回上次创建的cat对象。

(3)区别:

  1. 饿汉式在类加载就创建了对象实例,懒汉式是在使用时才创建。
  2. 懒汉式存在线程安全问题,饿汉式存在资源浪费的可能。

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

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

相关文章

Redis桌面客户端

3.4.Redis桌面客户端 安装完成Redis,我们就可以操作Redis,实现数据的CRUD了。这需要用到Redis客户端,包括: 命令行客户端图形化桌面客户端编程客户端 3.4.1.Redis命令行客户端 Redis安装完成后就自带了命令行客户端&#xff1…

2024年,如何实现高效的自动化渗透测试?

随着当前网络安全威胁的不断扩展与升级,开展渗透测试工作已经成为广大企业组织主动识别安全漏洞与潜在风险的关键过程。然而,传统的人工渗透测试模式对测试人员的专业能力和经验水平有很高的要求,企业需要投入较大的时间和资源才能完成。在此…

Webpack常见插件和模式

目录 目录 目录认识 PluginCleanWebpackPluginHtmlWebpackPlugin自定义模版 DefinePlugin的介绍 ( 持续更新 )Mode 配置 认识 Plugin Loader是用于特定的模块类型进行转换; Plugin可以用于执行更加广泛的任务,比如打包优化、资源管理、环境变量注入等 …

云存储比起自建服务器做数据存储的好处是什么?

近年来,国内科技行业开始趋于饱和,越来越多的企业将海外业务作为新的增长点。 但由于国内外政策、市场等因素不同,在出海过程中,安全合规、海外业务保障、应对各地区合规挑战成为企业最普遍的需求之一。 最基本的问题之一是&…

SAP-HCM 个税累计期间分析

从19年离开上一家单位,一直没有深入了解个税计算公式,最近新单位需要上线薪酬核算模块,对19年出的一些政策及SAP的计算规则做一番研究,主要是针对0531新增字段的分析,其实开始一直没明白为什么要推后一个月维护&#x…

Solana 2024 投资新风口:挖掘 DeFi、硬件开发与交易创新

将区块链的技术红利带给所有用户,Solana 自 2017 年诞生以来就致力于赋予开发者、消费者、投资人等各路人士的优越应用体验。在“以太坊杀手”林立的公链竞争阶段,Solana 凭借高性能公链的独特定位,朝着去中心化、安全性、低成本的目标不断精…

java 溯本求源之基础(八)之 jar(下篇)

上篇中我们介绍了 Java 类加载顺序、JAR 命令的使用以及 MANIFEST.MF 文件的作用。Java 类加载顺序包括 Bootstrap classes、Extension classes 和 Class Path。JAR 命令是一个归档和压缩工具,用于打包 Java 应用程序。MANIFEST.MF 文件存储打包文件的元信息&#x…

从国内外IT人的差异谈如何破除35岁魔咒

本来想写篇关于DBA如何破除35岁魔咒的文章,但发现整个IT从业人员都面临着35岁魔咒,例如互联网的从业人员的平均年龄只有26岁。但国外同行的职业生命却长得多,这里我们通过分析一下国内外IT人的差异来探讨如何破除35岁魔咒。 我们和丑国的IT…

电脑端手机配置检测的安全性和隐私保护探讨

摘要 本文介绍了如何使用克魔助手工具在电脑上检测手机的配置信息。通过该工具,用户可以全面了解手机的硬件和操作系统信息,包括电池、CPU、内存、基带信息和销售信息等。 引言 在日常工作中,了解手机的配置信息对于开发和测试人员非常重要…

stm32之GPIO寄存器

文章目录 1 背景2 GPIO寄存器的类型2.1 端口配置寄存器2.2 设置/清除寄存器和位清除寄存器 3 总结 1 背景 C51单片机在进行数据的输入输出时,是直接操作与外部引脚关联的内部寄存器,例如,当设置P2_1为0时,就是将外部引脚的P21引脚…

5.6 物联网RK3399项目开发实录-Android开发之U-Boot 编译及使用(wulianjishu666)

物联网入门到项目实干案例下载: https://pan.baidu.com/s/1fHRxXBqRKTPvXKFOQsP80Q?pwdh5ug --------------------------------------------------------------------------------------------------------------------------------- U-Boot 使用 前言 RK U-B…

爬虫逆向实战(38)-某空气质量平台(反调试,AES,DES,MD5)

一、数据接口分析 主页地址:某空气质量平台 1、抓包 (1) 反调试 该网站对鼠标右击以及F12进行了监听并拦截 虽然该网站无法打开Chrome控制台,导致我们无法抓包,但是道高一尺魔高一丈。既然我们无法在打开该网站的时候打开Chrome控制台&…