关键字static-----java学习笔记

static关键字

在类中声明的实例方法,在类的外面必须先创建对象,才能调用。但有些方法的调用者和当前类的对象无关,这样的方法通常被声明为类方法,由于不需要创建对象就可以调用类方法,从而简化了方法的调用。

这里的类变量、类方法,只需要用static修饰即可。也被成为静态变量、静态方法。

static关键字的使用

  • static通常译为静态的

  • static使用范围

    static通常用来修饰:属性、方法、代码块、内部类。

class Chinese{String name;int age;static String nation; //民族public Chinese(String name,int age){this.name = name;this.age = age;}@Overridepublic String toString() {return "Chinese{" +"name='" + name + '\'' +", age=" + age +'}';}
}
public class StaticTest{public static void main(String []args){Chinese c1 = new Chinese("张三",40);Chinese c2 = new Chinese("李四",30);c1.nation = "China";System.out.println(c1);System.out.println(c2);System.out.println(c1.nation); System.out.println(c2.nation); }
}
//c1.nation : China
//c2.nation : China
//只赋值c1的nation,所有Chinese类的nation属性都是China
//或通过任意途径赋值,其所有Chinese类中nation都会受到改变

静态变量(类变量)与实例变量

  • 变量个数

静态变量:在内存空间中只有一份,被类的多个对象所共享

实例变量:类的每一个实例(或对象)都保存着一份实例变量

  • 内存位置

静态变量:JDK6及以前,存放在方法区中。JDK7及以后,存放在堆空间。

实例变量:存放在堆空间的实例变量。

  • 加载时机

静态变量:随着类加载而加载。

实例变量:随着对象的创建而加载。

  • 调用者:

静态变量:可以被类直接使用,也可以使用对象调用。

实例变量:只能使用对象调用。

  • 判断是否可以调用
类变量实例变量
YESNO
对象YESYES
  • 消亡时机

静态变量:随着类得到卸载而消亡。

实例变量:随着对象的消亡而消亡。

实例变量静态变量
变量个数每一个对象都存在只存在一个
内存位置堆空间中JDK6前(方法区)、JDK7后(堆空间)
加载时机对象创建时类的创建时
调用对象每一个对象都可以调用类和每一个对象
消亡时机随着对象的消亡随着类的消亡

static修饰方法

随着类的加载而加载

可以通过类.静态方法的方式调用静态方法

public class ChineseTest{public static void main(String []args){Chinese.show();//没有创建实体对象,但也可以直接通过类来调用}
}
class Chinese{String name;int age;public static void show(){System.out.println("CHN");}
}

是否可以在静态方法中,调用静态属性、静态方法、或非静态的方法、属性?

在类的非静态方法中,可以调用当前类中的静态结构或非静态结构(属性、方法)

  • static修饰的方法中,不能使用thissuper

实际开发

Q:开发中,什么时候需要将属性声明为静态?

  • 判断当前类的多个实例是否能共享此成员变量,且此成员变量的值是相同的
  • 开发中,常将一些常量声明为静态的。例如,Math中的PI

Q:开发中,什么时候需要将方法声明为静态的?

  • 方法内操作的变量如果都是静态变量,则此方法建议声明为静态方法
  • 开发中,常常将工具类中的方法,声明为静态方法。例如,Arrays类、Math类

易错点

public class StaticNullTest {public static void main(String[] args) {Order o1 = null;System.out.println(o1.count);o1.hello();}
}
class Order{public static int count = 1;public static void hello(){System.out.println("hello");}
}
//输出:
// 1
// hello
//count属性和hello()方法都是静态的,不依靠指针调用

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

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

相关文章

解决在cmd里下载的库,但IDLE还是显示不存在的问题

原因一: 环境变量配置 首先,你需要确认你安装库的时候使用的Python环境是否和IDLE使用的Python环境是同一个。如果cmd中你使用的是系统路径下的Python,而IDLE使用的是另一个路径下的Python,那么你在cmd中下载的库,IDL…

存在重复元素 II[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个整数数组nums和一个整数k&#xff0c;判断数组中是否存在两个不同的索引i和j&#xff0c;满足nums[i] nums[j]且abs(i - j) < k。如果存在&#xff0c;返回true&#xff1b;否则&#xff0c;返回false。 示例 1&#…

OpenAI撤回有争议的决定:终止永久性非贬损协议

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

[windows系统安装/重装系统][step-4][番外篇-2]N卡驱动重装 |解决:开机几小时后电脑卡顿 | 后台自动运行了上千个Rundll32进程问题

现象 开机几小时后&#xff0c;电脑变卡&#xff0c;打开后台管理器都卡&#xff0c;后台管理去转圈圈一小会儿后看到后台进程上千个&#xff0c;好多个Rundll32进程 重启下运行会稍快 重启后运行快&#xff0c;后台管理器反应也快 打开后台管理器不卡&#xff08;几小时后打…

【文末附gpt升级方案】数据虚拟化技术:起源、发展及市场趋势

数据虚拟化技术&#xff1a;起源、发展及市场趋势 随着信息技术的飞速发展&#xff0c;数据已成为当今时代最宝贵的资源之一。然而&#xff0c;如何高效、安全地管理和利用这些数据&#xff0c;成为了企业和科研机构面临的重要挑战。在这一背景下&#xff0c;数据虚拟化技术应…

力扣刷题---2215. 找出两数组的不同【简单】

题目描述 给你两个下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;请你返回一个长度为 2 的列表 answer &#xff0c;其中&#xff1a; answer[0] 是 nums1 中所有 不 存在于 nums2 中的 不同 整数组成的列表。 answer[1] 是 nums2 中所有 不 存在于 nums1 中的 不同 整…

谈谈你对 SPA 的理解?

1 理解基本概念 SPA&#xff08;single-page application&#xff09;单页应用&#xff0c;默认情况下我们编写 Vue、React 都只有一个html 页面&#xff0c;并且提供一个挂载点&#xff0c;最终打包后会再此页面中引入对应的资源。&#xff08;页面的渲染全部是由 JS 动态进行…

营销短信XML接口对接发送示例

在现代社会中&#xff0c;通信技术日新月异&#xff0c;其中&#xff0c;短信作为一种快速、简便的通信方式&#xff0c;仍然在日常生活中占据着重要的地位。为了满足各种应用场景的需求&#xff0c;短信接口应运而生&#xff0c;成为了实现高能有效通信的关键。 短信接口是一种…

L01_JVM 高频知识图谱

这些知识点你都掌握了吗&#xff1f;大家可以对着问题看下自己掌握程度如何&#xff1f;对于没掌握的知识点&#xff0c;大家自行网上搜索&#xff0c;都会有对应答案&#xff0c;本文不做知识点详细说明&#xff0c;只做简要文字或图示引导。 类的生命周期 类加载器 JVM 的内存…

KVM热迁移虚拟机+KSM内存页合并

KVM高级功能部署 文章目录 KVM高级功能部署资源列表基础环境一、静态迁移1.1.在源宿主机上准备虚拟机1.1.1、调试VNC1.1.2、创建虚拟机test011.1.3、console登录test01虚拟机1.1.4、标记虚拟机test01当前IP地址 2.1、提取磁盘和配置文件2.2.1、查看虚拟机test01当前状态2.2.2、…

Gradle的settings.gradle.kts你真的理解吗?

你还在用.gradle文件吗&#xff1f;例如build.gradle、settings.gradle&#xff0c;那么你就out了。现在我们有必要了解一下kts脚本了。在Android项目中&#xff0c;默认有3个文件可以替换成kts脚本&#xff0c;即project的build.gradle、app模块的build.gradle和project的sett…

DDR5—新手入门学习(一)【1-5】

目录 1、DDR背景 &#xff08;1&#xff09;SDR SDRAM时代 &#xff1a; &#xff08;2&#xff09;DDR SDRAM的创新 &#xff1a; &#xff08;3&#xff09;DDR技术的演进 &#xff1a; &#xff08;4&#xff09;需求推动&#xff1a; 2、了解内存 &#xff08;1&…

go学习笔记-从圣经中抄录的接口值的思考

接口值 接口值&#xff0c;由两个部分组成&#xff0c;一个具体的类型和那个类型的值 下面4个语句中&#xff0c;变量w得到了3个不同的值。&#xff08; 开始和最后的值是相同的&#xff09; var w io.Writer w os.Stdout w new(bytes.Buffer) w nil var w io.Writer var…

Python中的数据类型与函数之美

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、Python中的数据类型初探 代码案例&#xff1a; 二、Python内置函数的魅力 代码案例&a…

我用 Midjourney 的这种风格治愈了强迫症

在 Midjourney 能够实现的各种布局之中&#xff0c;有两种风格因其简洁、有序而独居魅力&#xff0c;它们就是平铺 (Flat Lay) 和 Knolling (Knolling 就是 Knolling, 无法翻译&#x1f923;)。要在现实生活中实现这样的美学效果并不容易&#xff0c;你需要精心挑选各种小物件&…

pgsql 主从流复制安装及测试

目录 pgsql 主从流复制安装及测试 安装前准备安装pgsqlpgsql主131服务器操作pgsql主132服务器操作验证pgsql复制模式简介 pgsql 主从流复制安装及测试 pgsql 提供了多种复制模式&#xff0c;可以参考文章最后简介部分 安装前准备 我这准备了两台centos7.8的机器 &#xff0c;安…

Mac JDK和SDK环境变量配置

一、Java JDK配置 1.下载并安装Java jdk1.8及以上&#xff0c;这个可以在网上自行搜索下载&#xff0c;这里不在详细描述 2.如果不知道JAVA_HOME的安装路径&#xff0c;可以输入命令查看&#xff1a;/usr/libexec/java_home -V &#xff0c;如图 3.在终端输入命令&#xff1…

算法之堆排序

堆排序是一种基于比较的排序算法&#xff0c;通过构建二叉堆&#xff08;Binary Heap&#xff09;&#xff0c;可以利用堆的性质进行高效的排序。二叉堆是一个完全二叉树&#xff0c;可以有最大堆和最小堆两种形式。在最大堆中&#xff0c;父节点的值总是大于或等于其子节点的值…

UIKit之猜图器Demo

需求 实现猜图器Demo 功能分解&#xff1a; 1>下一题切换功能 2>点击图片后能放大并背景变暗&#xff08;本质是透明度的变化&#xff09;。再次点击则缩小&#xff0c;删除暗色背景。 3> 答案区按钮点击则文字消失&#xff0c;选择区对应文字恢复。 4> 选择区…