Java基础:第三十二讲 静态成员

《Effective Java》第24条:静态成员类优于非静态成员类 上面的测试代码之所以输出的是 { },就是因为当调用 s.clear() 的时候,实际上执行的是HashMap内部类 keySet 类中的 clear() 方法,所以会将调用外部类(HashMap类)中的clear() 方法,将HashMap中的值全部清空。首先,前面的文字已经说过,非静态成员类(内部类)的实例会永久关联外围类的实例,因此内部类可以直接访问外围实例的所有成员(包括私有成员)。静态成员类(也叫静态内部类)是最简单的一种嵌套类,它声明在一个类的内部,可以访问外围类的所有成员,包括私有成员。 阅读详情

Java是面向对象的语言,在开发的时候要以对象的方式来组织代码,方法和属性应该属于某个对象,而不是独立存在。

在Java中还存在一类方法和属性,不属于某个具体对象,而是多个对象共享的,称为静态方法或者静态属性。

1、静态属性

静态属性是某个类的所有对象共享的属性,通过static关键字定义。下面的代码定义了一个静态属性:

public Class Person(

   public static int count;

)

要访问静态属性,可以通过对象名,还可以通过类名。下面的代码都是正确的:

方式一:

Person.count = Person.count+1;

方式二:

Person person = new Person();

person.count++;

这与非静态成员是不同的,非静态成员只能通过对象名调用,每个对象都有自己对应的属性,例如张三有自己的身高,李四有自己的身高。因为静态成员是对应到类的,而非静态成员是对应到对象的,每个对象都会有一个。假设,Person类实例化了6个对象,对于静态成员,内存中只有一个空间来保存这个属性,而非静态成员会有6个,每个对象一个。所以,静态成员又称为类成员,非静态成员称为对象成员。

实例:写出下面代码的输出结果

Person p1 = new Person();

p1.count=10;

Person p2 = new Person();

p2.count=20;

System.out.println(p1.count);

System.out.println(p2.count);

答案:20 20鼠标选中查看答案。

2、静态方法

静态方法属于类的方法,不属于某个具体对象的,所以静态方法不能访问非静态成员。

静态方法的定义,使用关键字static,下面定义了一个静态方法,对count进行操作:

public static void setCount(int count){

      Person.count = count;

}

public static int getCount(){

   return count:

}

实际上,大家在课程已开始的时候就已经使用静态方法了,记不记得main方法的定义?

静态方法不能访问非静态属性,下面的代码就是错误的:

public int height;

public static int getHeight(){

   return height;

}

问题:什么时候用静态方法呢?

答案:如果方法执行过程中不使用对象的属性(也就是非静态成员变量),只是用静态成员变量或者通过参数传入的信息,这时候方法的处理过程与对象无关,所以可以设置成静态方法,并且应该设置成静态方法。

鼠标选中查看答案。

3、静态初始化器

构造方法用于对成员变量进行初始化,静态成员变量不属于某个对象,如何对静态成员变量进行初始化呢?使用静态初始化器。下面就是一段静态初始化器代码:

static{

      count=0;

}

static引导的一对大括号,括号中包含对静态成员的初始化代码,这就是静态初始化器,可以认为是比较特殊的方法,没有返回值类型,没有参数,没有方法名,因为它是在加载类的时候调用的。

注意:静态初始化器中只能对静态成员进行操作,不能对非静态成员进行操作。

下一次介绍一个简单的面向对象的例子。

李绪成 优快云 Blog: http://blog.youkuaiyun.com/javaeeteacher

 

python机器人编程——用pytorch实现六轴机械臂的正向和逆向数值解算,及python算法解析 前面对六轴(或多轴)机械臂进行了一些研究,特别是利用几何进行简化,实现逆解,来完成比较简单的搬用任务。然而,如果需要比较精确的操作任务,可能需要更加复杂的机械臂解算。其中比较复杂的是数值解算,这种解算往往涉及到比较复杂的机器人运动等原理知识,比较难以上手。但是,python的生态挺全面,已经有很多牛人实现了数值解法,但是去看他们的代码,还是觉得费劲。此外,随着深度神经网络的兴起,很多是用建立深度学习神经网络,去利用机械臂输入输出的大数据,训练机械臂的控制模型,这个上手也比较慢。 阅读详情

相关推荐

239号资源-simulink仿真:MATLAB/Simulink教程(PDF文档)-----已提供下载资源

电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python,机器学习,计算机视觉,深度学习,神经网络,数据挖掘领域.《《《《《《《《更多资源还请持续关注本专栏》》》》》》》《《《《《《《《更多资源还请持续关注本专栏》》》》》》》论文与完整源程序_电网论文源程序的博客-优快云博客。电网论文源程序-优快云博客。

LIANG674027206的博客 1076

Java学习 第八章 static成员

Java中的static解析

ningbaidexia的博客 608

海康威视工业相机网络配置实战:从MVS软件操作到IP地址规划

本文详细介绍了海康威视工业相机的网络配置实战,从MVS软件操作到IP地址规划。重点讲解了IP设置的重要性、Windows系统下的网络配置步骤、避免IP冲突的技巧,以及MVS软件中的相机IP配置方法。帮助用户快速掌握工业相机的网络连接技术,确保稳定高效的图像采集。

weixin_30296405的博客 487

Java——静态成员

/ 静态变量// 实例变量常用组合来定义常量。定义全局常量,如数学常数、配置信息等。在Java中,main方法是程序的入口点。它是一个特殊的方法,Java虚拟机(JVM)在运行程序时会首先调用它。这是 main 方法的定义格式,但是,它的定义格式为什么是这样的呢?public: 访问修饰符,表示该方法可以被任何地方调用。因为JVM需要调用main方法,因此必须是public。static: 静态修饰符,意味着该方法属于类而不是类的实例。JVM无需创建类的对象即可调用main方法。void。

Stewie Lee的博客 3367

从业10年的AI应用架构师:企业AI平台运营的4个核心经验,值得收藏

去年年底,我在某大型制造企业做AI咨询时,遇到了这样的场景:这不是个例。我接触过的10家企业中,有7家的AI平台都陷入了“技术自嗨”的陷阱——技术团队追求模型精度、功能完备性,却忽略了业务到底需要什么。如果你也遇到过类似问题:比如“模型准确率很高,但业务不买账”“AI项目上线后没人用”“投入产出比极低”,那么这篇文章的4个经验,可能会帮你避开这些坑。很多企业认为,AI平台就是“买一套工具+部署几个模型”。但实际上,企业AI平台的本质是“技术与业务的连接生态”:根据Gartner的报告,80%的企业AI项目失

AI 原生应用开发的博客 709

自动驾驶开发者必看:nuscenes数据集23类物体标注全解析(附避坑指南)

本文深入解析nuscenes数据集的23类物体标注系统,为自动驾驶开发者提供全面的标注规范解读和实战避坑指南。涵盖多模态数据组织、类别细分规则、属性系统应用技巧以及标注质量验证方法,帮助开发者高效利用这一标杆数据集提升模型性能。

weixin_29041767的博客 259

Java类的static成员以及代码块(详细版)

在Java的类中一般定义有成员属性,以及成员方法两种,但实际上两种可以算为一类,但还可以定义另外一种,就是被static修饰的变量和方法,被static修饰的变量称之为静态变量,也可以叫类变量;被static修饰的方法被称之为静态方法,也可以叫类方法。被static修饰的成员,最大的特性就是其不属于对象,不依靠对象,这也就意味着被static修饰的成员在没有实例化对象的情况下就可以使用,被static修饰的成员其属于类,是所有对象所共享的,可以直接使用类名访问并调用。

L326214的博客 2024

10xGenomics官方可视化工具——Loupe Browser

Loupe Browser是⼀款10xGenomics开发的交互式桌⾯应⽤程序,⽤于探索10x单细胞数据,可以用来找出感兴趣的细胞、找出显著差异表达的基因、鉴定细胞类型、探索细胞亚类和数据共享。

weixin_47195452的博客 3369

Static成员(Java)

成员变量、成员方法、static修饰成员变量、static修饰成员方法、代码块

weixin_59326152的博客 1146

Windows Server 2012 R2虚拟机安装全攻略:从镜像选择到网络配置一步到位

本文提供Windows Server 2012 R2虚拟机安装全攻略,涵盖从镜像选择到网络配置的完整流程。详细讲解在Oracle VM VirtualBox中的安装步骤、TCP/IP网络设置、系统优化及常见问题解决方案,帮助用户快速搭建可立即投入使用的服务器环境。特别适合IT初学者和系统管理员学习传统服务器应用的部署与配置。

weixin_28363123的博客 541

C++经典面试题100例及答案

答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。答:这样可以提高编译效率,因为分开的话只需要编译一次生成对应的.obj文件后,再次应用该类的地方,这个类就不会被再次编译,从而大大的提高了编译效率。答:这种函数会自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。答:常对象是指在任何场合都不能对其成员的值进行修改的对象。答:所谓的回调函数,就是预先在系统的对函数进行注册,让系统知道这个函数的存在,以后,当某个事件发生时,再调用这个函数对事件进行响应。

usstmiracle的博客 3万+

【Java基础】static成员

static是Java中的一个关键字,表示静态的。在Java中,被static修饰的成员叫做静态成员。静态成员 不属于某个具体的对象,而是属于 类,因此也可以称之为 类成员。

m0_67872788的博客 1732

YOLOv12改进策略【卷积层】| SPD-Conv 针对小目标和低分辨率图像的检测任务

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。

Limiiiing的博客 1779

Java之静态成员

前言        在Java中声明类的成员变量和方法时,可以使用static关键字把成员声明为静态成员。静态变量也叫类变量,非静态变量也叫实例变量;静态方法也叫类方法,非静态方法也叫实例方法。静态成员最主要的特点是它不属于任何一个类的对象,它不保存在任意一个对象的内存空间中,而是保存在类的公共区域中,所以任何一个对象都可以直接访问该类的静态成员,都能获得相同的数据值,修改时,也在类的公共...

卑鄙的我 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JAVA开发:实例成员与静态成员

特性实例成员静态成员声明关键字无使用static访问方式通过对象实例通过类名或对象实例生命周期随对象创建/销毁随类加载/卸载内存位置堆内存方法区共享性每个对象独有一份所有对象共享一份静态成员属于类本身,而实例成员属于类的各个对象实例。在 Java 中,实例成员和静态成员是两类完全不同的成员(变量或方法),它们的核心区别在于所属对象不同内存分配不同和访问方式不同。1. 本质区别特性实例成员静态成员所属对象属于类的实例(对象)属于类本身内存分配。

qq_39460057的博客 1663

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Effective Java 类和接口 第22条:优先考虑静态成员类

嵌套类(nested class)是指被定义在另一个类的内部的类。嵌套类存在的目的应该只是为他的外围类(enclosing class)提供服务。如果嵌套类将来可能会用于其他的某个环境中,他就应该是顶层类(top-level class)。嵌套类有四种:静态成员类(static member class)、非静态成员类(nonstatic member class)、匿名类(anonymous c...

yancyang的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java中enum的静态成员的初始化

http://rednaxelafx.iteye.com/blog/460981 Java中enum的静态成员的初始化 博客分类:  Java JavaCC++C#SUN  Java语言规范第三版8.9规定了enum里的构造器、初始化器和初始化块中不得引用该enum中非编译时常量的静态成员域。  引用 It is a compile-time erro

天上满是飞机 1万+

Java静态成员初始化问题

Java中的静态成员初始化的顺序、时间总是存在着一些迷惑。今天用以下代码验证了一下,感觉好多问题豁然贯通。

pdcxs007的专栏 2081

Effective Java笔记:静态成员类优于非静态成员类

这一点在大规模系统中尤为重要,尤其是当类的引用关系复杂时,非静态成员类容易在不经意间导致外部类实例无法被垃圾回收。如果成员类并不需要访问外部类的非静态成员(属性或方法),将其设计为非静态类,会引入不必要的耦合。尽管静态成员类通常是更优的设计选择,但有时我们仍然会使用非静态成员类。静态成员类的实例化速度更快,因为它不需要与外部类实例挂钩,且不需要额外存储外部类实例的引用。当内部类必须访问外部类的某些状态(实例变量或非静态方法)时,非静态成员类是合理的选择。静态成员类的使用方式更简单,不需要关联外部类实例。

eclipseC的博客 869

《Effective Java》解读第24条:静态成员类优于非静态成员类

本文介绍了Java中四种嵌套类的特性及适用场景。静态成员类是最常用的形式,无需绑定外围实例,适合Builder模式等场景;非静态成员类(内部类)隐式持有外围实例引用,适合迭代器等需要访问外围实例成员的场景;匿名类用于一次性实现接口或抽象类,Java 8后可用Lambda替代;局部类则定义在方法内部,使用最少。建议优先使用静态成员类,除非需要访问外围实例才使用非静态成员类,以减少不必要的内存消耗。合理选择嵌套类类型有助于优化代码结构和性能。

Cosmoshhhyyy的博客 908

java开发——静态成员类和非静态成员类如何选择?

区别: 是否有static修饰内部class 原则: 优先考虑使用静态成员类   相比于非静态成员类,静态成员类的优势有: 1、内嵌类的实例可以独立于外围类的实例而存在。 2、内嵌类和外围类的实例之间没有关联,减少时间和空间的开销。 3、当外围类实例符合垃圾回收时,可以被回收掉。如果使用的是非静态成员类则不行。   什么情况下使用非静态成员类呢? 如果内嵌类的实例需要用到外围...

river66的博客 1082

Java 静态成员变量

public class Student01 { public String name; public int age; public String sex; public Student01(String name, int age, String sex) { this.name = name; this.age = age; this.sex = sex; } public static void m.

m0_63101235的博客 2753

不应该通过类实例访问静态成员_Java基础篇——类和对象

Java是面向对象的程序设计语言,那什么是面向对象程序设计呢?面向对象程序设计就是通过对象来进行程序设计。那什么又是对象呢?我们必须要先了解一下类的概念。什么是类类是一个抽象的概念集合,表示对事物的描述,是具备某些共同特征的实体的集合,它是一种抽象的数据类型,是对一类“事物”的属性和行为的描述。例如,每个人都有共同的属性(姓名,性别,年龄,身高,体重,爱好……),也有共同的行为(吃饭,睡觉,说话…...

weixin_39781326的博客 2143

静态成员方法与静态成员变量【Java版】

静态成员方法与静态成员变量【java版】 一、类的定义 package com.statickeyword; public class staff { private staticstringcountry="china"; private int id; private string name; static voidsetcountryandprint(string _count

javazhuanzai的专栏 374

java学习总结(16.06.07)类的静态成员和非静态成员

java里,类的成员可分为静态成员和费静态成员(实例成员),静态成员和非静态成员,从定义上来说就是有没有static修饰符修饰的区别。有static修饰的成员就是静态成员。如 public static void fun1();//静态方法fun1 public void fun2();//非静态方法fun2 public static int a//静态变量a public int b;//非

qq_32099621的博客 2086

JAVA中静态成员变量的用法

在Java中声明类的成员变量和方法时,可以使用static关键字把成员声明为静态成员。静态变量也叫类变量,非静态变量也叫实例变量;classes这个变量同样如此,所以此时创建的相同的班级的每个学生对象的classes成员都会占用堆区的空间,此时就会。当我们创建一个学生类的对象时,比如我们需要定义每个学生的个人信息,其中包括班级,1.被static修饰的成员方法内部并不能访问非静态成员或成员方法。,因为本质上静态成员变量不在对象中,而是在方法区。2.但是非静态成员方法内可以访问静态成员方法。

weixin_73906153的博客 856
上一篇: Java基础:第三十一讲 常量成员
下一篇: Java基础:第三十三讲 父类与继承
老李-大连
博客等级 码龄20年 3206粉丝 308原创
评论 16
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值