【Java】Java核心要点总结 66

news2024/9/24 5:24:21

文章目录

  • 1. 成员变量 和 局部变量 的区别
  • 2 . 静态方法 和 实例方法 区别
  • 3. 基本数据类型 和 包装类 的区别
  • 4. 局部变量一定存储在栈中吗?
  • 5. 包装类型的缓存机制



在这里插入图片描述

1. 成员变量 和 局部变量 的区别

● 语法形式 :从语法形式上看,成员变量是属于类的,而局部变量是在代码块或方法中定义的变量或是方法的参数;成员变量可以被 public,private,static 等修饰符所修饰,而局部变量不能被访问控制修饰符及 static 所修饰;但是,成员变量和局部变量都能被 final 所修饰。
● 存储方式 :从变量在内存中的存储方式来看,如果成员变量是使用 static 修饰的,那么这个成员变量是属于类的,如果没有使用 static 修饰,这个成员变量是属于实例的。而对象存在于堆内存,局部变量则存在于栈内存。
● 生存时间 :从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动生成,随着方法的调用结束而消亡。
● 默认值 :从变量是否有默认值来看,成员变量如果没有被赋初始值,则会自动以类型的默认值而赋值(一种情况例外:被 final 修饰的成员变量也必须显式地赋值),而局部变量则不会自动赋值


2 . 静态方法 和 实例方法 区别

1、调用方式
在外部调用静态方法时,可以使用 类名.方法名 的方式,也可以使用 对象.方法名 的方式,而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象 。
不过,需要注意的是一般不建议使用 对象.方法名 的方式来调用静态方法。这种方式非常容易造成混淆,静态方法不属于类的某个对象而是属于这个类。
因此,一般建议使用 类名.方法名 的方式来调用静态方法。

2、访问类成员是否存在限制
静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),不允许访问实例成员(即实例成员变量和实例方法),而实例方法不存在这个限制。


3. 基本数据类型 和 包装类 的区别

● 成员变量包装类型不赋值就是 null ,而基本类型有默认值且不是 null。
● 包装类型可用于泛型,而基本类型不可以。
● 基本数据类型的局部变量存放在 Java 虚拟机栈中的局部变量表中,基本数据类型的成员变量(未被 static 修饰 )存放在 Java 虚拟机的堆中。包装类型属于对象类型,我们知道几乎所有对象实例都存在于堆中。
● 相比于对象类型, 基本数据类型占用的空间非常小。


4. 局部变量一定存储在栈中吗?

一般情况下,局部变量(local variable)是存放在调用栈(call stack)上的,也就是存放在栈帧中。每当有一个新函数调用时,就会为该函数创建一个新的栈帧,该函数内所定义的局部变量就存储在该栈帧中。

但是,某些编译器可能会对没有被使用的局部变量进行优化,将其直接剔除掉,而不将其存入栈中。另外,在某些情况下,编译器也可能会将某些局部变量存放在寄存器中,以提高程序的执行效率。因此,总体来说,虽然大多数情况下局部变量是存放在栈中的,但并不绝对。


5. 包装类型的缓存机制

Java中的包装类型(Wrapper Class)是为了将基本数据类型转换成对象而设计的。每种基本数据类型都有对应的包装类:Integer、Float、Double、Long、Boolean、Byte、Short、Character。

在 Java 1.5 及以后的版本中,Java通过使用缓存机制来提高包装类型的性能。具体操作如下:

对于 byte、short、integer 这三种类型的包装类,会预先创建 -128~127 这些范围内的所有数值的包装类对象,并保存在一个叫做“cache”的数组中。

对于 Boolean 类型,JVM预先创建了 TRUE 和 FALSE 两个对象,并保存在 Boolean.cache 数组中。

对于 Char 类型,Java则保存了从 ‘\u0000’ 到 ‘\u007F’ 字符的包装类对象,因为大部分字符都被使用得很少,没有必要进行全部缓存。

对于 Float、Double 等其他类型的包装类,由于它们的值域比较大,缓存区间也比较大,所以 JVM 没有为其提供默认的缓存实现。

在这里插入图片描述

当自动装箱时,如果需要创建的包装类型已经存在于缓存数组中,就直接返回该缓存数组中的对象;否则,再去创建一个新的对象。

这种缓存机制可以避免 Java 中因自动装箱和拆箱过程中频繁创建对象带来的性能损失,提高 Java 程序的执行效率。



在这里插入图片描述

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

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

相关文章

基于opencv与mediapipe的民族舞舞蹈动作识别

需要项目的请关注、私信 基于opencv与mediapipe的民族舞舞蹈动作识别 1、原理介绍1.1 Opencv1.2 Mediapipe 2、实验步骤2.1 导入工具包2.2 中文输入2.4 建立姿态位置信息库2.5 位置信息获取2.6 姿态识别 3 实验结果与评价 1、原理介绍 1.1 Opencv Opencv(Open So…

Android Studio实现知乎日报App

项目目录 一、项目概述二、开发环境三、运行演示 一、项目概述 本系统基于 MVP RxJava Retrofit进行设计和开发,通过 Retrofit 实现了无网缓存,基于 MVP 模式对 Activity 和 Fragment 封装了两个基类,同样适用于非 MVP 的实现。运用 Recyc…

termux中apache+php的安装

如果 ssl.so.3 not found 需要 apk update 更新一下 然后,pkg install php 完成php 8.2安装 使用命令开启 存储 权限 termux-setup-storage apt install phpmyadmin apt install php-apache apache2 配置文件位于 cd $PREFIX/etc/apache2/ cd /data/data/com.te…

【干货】Android系统定制基础篇:第四部分-Android二次构建

背景 有时我们需要使用同一套Android源码编译生成各种差异化产品固件,比如:A产品、B产品、C产品,各产品之间大部分功能是相同的,仅个别功能定义上有差别。 方法一 Android默认的做法是在源码 device 目录下增加A、B、C产品&…

三个领域的微调模型;Meta推出新的生成式AI模型Voicebox

🦉 AI新闻 🚀 Meta推出新的生成式AI模型Voicebox,可执行音频编辑、采样、风格化等语音生成任务 摘要:Meta继推出ImageBind之后,于今天再次推出了全新的生成式AI模型Voicebox。该模型帮助创作者执行音频编辑、采样和风…

2023年6月最新|大屏可视化配置

大屏可视化配置 运行环境:VScode 一、可视化适配 大屏下显示一般都是16:9尺寸 1920*1080 ,做适配也就是在这个比例的基础上进行的 方案一:打开VSCode终端,下载flexible 1、选中要运行的文件,右键–>【在集成终…

使用Apache ShardingSphere简答实现水平分表

1 简介 Apache ShardingSphere 是一款分布式的数据库生态系统, 可以将任意数据库转换为分布式数据库,并通过数据分片、弹性伸缩、加密等能力对原有数据库进行增强。 官方网站 https://shardingsphere.apache.org/document/current/cn/overview/2 创建…

【算法题刷题笔记】华为OD机试 - 农场施肥

样例一: 5 7 5 7 9 15 10>> 9样例二: 3 1 2 3 4>> -1解题思路 题目大概意思: 给你N个数, 还有一个数M, 让你求K, 进行M次减K操作, 令这N个数都小于等于0。 思路: 利用…

frp配置多端口内网穿透?frp多端口怎么配置?

FRP内网穿透应用场景:本地Web服务外网访问、本地开发微信、本地联调支付宝\微信支付、TCP/UDP端口转发 在本机开发好的网站想让客户测试不在需要上传到服务器上面,使用FRP内外网穿透轻松解决;微信开发也不需要在上传到服务器,使用…

拒绝服务攻击

目录 一、初始DOS攻击与防御 1.1 DOS攻击概念 1.2 DOS攻击原因 1.2.1 内因 1.2.2 外因 1.3 DOS攻击原理 1.4 DOS攻击方法 二、DOS常见攻击技术 2.1 SYN Flood 2.1.1 基本思想 2.1.2 方法 2.1.3 防御措施 2.2 ICMP Flood 2.2.1 Smurf Flood 2.2.2 Ping of Death …

【微信小程序开发】第 10 课 - WXML 模版语法 - 数据绑定

欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。 目录 1、缘起 2、数据绑定 2.1、绑定的基本规则 2.2、Mustache 语法的格式 2.2.1动态绑定内容 2.2.2动态绑定属性 2.2.3三元运…

Qqis中采用栅格工具生成XYZ瓦片(目录)简介

目录 前言 一、Qgis的相关功能 1、数据准备 2、将两个xyz图源添加到图层 二、Qgis栅格工具生成 1、生成xyz图块工具在哪里 2、生成xyz图块怎么用 3、下载结果 4、Leaflet加载离线瓦块 总结 前言 在上一篇博客中,介绍了一种在Qgis中基于QMetaTiles插件进行xyz瓦…

Linux---环境变量、$符号、自行设置环境变量

1. 环境变量 环境变量是操作系统(Windows、Linux、Mac)在运行的时候,记录的一些关键性信息,用以辅 助系统运行。 在Linux系统中执行:env命令即可查看当前系统中记录的环境变量 环境变量是一种Key-Value型结构&…

chatgpt赋能python:Python如何选取CSV某几列数据

Python如何选取CSV某几列数据 在数据处理过程中,CSV是一种非常常见的数据文件类型。CSV文件中的数据由逗号分隔的值(Comma-Separated Values)组成。处理CSV数据的任务之一是从CSV文件中选择特定的列数据,以进行数据分析或处理。在…

shell脚本基础

目录 一、概述 二、shell (一)shell命令解释环境 (二)类型 (三)查看系统中支持的shell:cat /etc/shells (四)查看系统默认shell: echo $SHELL 三、变量 (一&…

HTMLCSS Day04 CSS盒模型

文章目录 1.盒子组成盒子属性( Box properties)marginborderpaddingwidth & height盒子一般指的是块元素,盒子是我们布局的重要机制。一个盒子应该由外边距、边框、内边距、内容组成。 - width & height- 边框属性1.什么是边框?2.边…

TiDB Contributor 资料汇总

作者: Billmay表妹 原文来源: https://tidb.net/blog/cf95cdb7 开源社区建设 TiDB 社区是由 TiDB 生态中的开发者、用户、合作伙伴一起建立的分享、学习平台。TiDB 线上社区汇聚了 29149 位 TiDB 资深用户(注册用户数)&#x…

将一个一维数组前段和后端的0元素去除的numpy.trim_zeros()方法

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 除去一维数组第一个非零元素之前的零 除去一维数组最后一个非零元素之后的零 numpy.trim_zeros() 选择题 关于以下代码说法错误的一项是? import numpy as np a np.array([0,0,1,0,2,0,0])…

前端Vue分享菜单按钮弹框、微博分享、QQ分享、微信好友、朋友圈

前端Vue分享菜单按钮弹框、微博分享、QQ分享、微信好友、朋友圈 &#xff0c; 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id13085 效果图如下&#xff1a; #### 使用方法 使用方法 <!-- 分享 ref: 设置一个唯一ref contentHeight&#xff…

记一次fastjson事件应急响应

为方便您的阅读&#xff0c;可点击下方蓝色字体&#xff0c;进行跳转↓↓↓ 01 事件背景介绍02 事件分析过程03 事件分析结果04 安全加固建议 01 事件背景介绍 某内部应急演练中&#xff0c;安全部门收到通知&#xff0c;称公司内部资产被入侵&#xff0c;且可能已经开始内网横…