Day2 | Java基础 | 2 数据类型

Day1 | Java基础 | 2 数据类型

  • 基础版
    • static
      • static的用法
        • static修饰内部类
        • static修饰方法
        • static修饰变量
        • static修饰代码块
      • 深入分析
      • static小结
  • 问题回答版
    • 参数传递
      • 形参和实参的区别是什么?
      • Java是值传递还是引用传递?
      • 值传递和引用传递的区别是什么?
    • final关键词
      • final作用是什么?
      • final、finally、finalize有什么不同?
    • static关键词
      • static作用是什么?
      • static和final区别是什么?

基础版

static

参考链接

static的用法

static修饰内部类

静态内部类的使用示例:

public class StaticTest {//static关键字修饰内部类public static class InnerClass{InnerClass(){System.out.println("============= 静态内部类=============");}public void InnerMethod() {System.out.println("============= 静态内部方法=============");}}public static void main(String[] args) {//直接通过StaticTest类名访问静态内部类InnerClassInnerClass inner=new StaticTest.InnerClass();//静态内部类可以和普通类一样使用inner.InnerMethod();}
}
/*  输出是* ============= 静态内部类=============* ============= 静态内部方法=============*/

如果没有用static修饰InterClass,则只能new 一个外部类实例。再通过外部实例创建内部类

static修饰方法

同上,可以直接通过类名调用:

public class StaticMethod {public static void test() {System.out.println("============= 静态方法=============");};public static void main(String[] args) {//方式一:直接通过类名StaticMethod.test();//方式二:StaticMethod fdd=new StaticMethod();fdd.test();}
}
static修饰变量
  • 静态变量:被static修饰的成员变量叫做,也叫类变量,说明这个变量是属于类的,而不是属于对象。
  • 实例变量:没有被static修饰的成员变量,说明这个变量是属于某个具体的对象。

同样可以直接通过类名调用静态变量:

public class StaticVar {private static String name="java的架构师技术栈"public static void main(String[] args) {//直接通过类名StaticVar.name;}
}
static修饰代码块

静态代码块在类第一次被载入时执行。类初始化的顺序:

  • 父类静态变量
  • 父类静态代码块 static{}
  • 子类静态变量
  • 子类静态代码块
  • 父类普通变量
  • 父类普通代码块
  • 父类构造函数
  • 子类普通变量
  • 子类普通代码块
  • 子类构造函数

深入分析

在这里插入图片描述
堆区

  • 存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
  • 不存放基本类型和对象引用,只存放对象本身。
  • JVM只有一个堆区heap被所有线程共享。

方法区

  • 也叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
  • 方法区中包含的都是在整个程序中永远唯一的元素,如class、static变量。

栈区

  • 每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都放在堆区中。
  • 每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
  • 栈分为三个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

一个例子:

public class Person {//静态变量static String firstName;String lastName;public void showName(){System.out.println(firstName+lastName);}//静态方法public static void viewName(){System.out.println(firstName);}public static void main(String[] args) {Person p =new Person();Person.firstName = "张";p.lastName="三";p.showName();Person p2 =new Person();Person.firstName="李";p2.lastName="四";p2.showName();}
}
//输出。张三、李四

在这里插入图片描述

  • 从方法区调用方法。
  • 堆内存中的成员变量lastname随着对象的产生而产生,随对象的消失而消失。
  • 静态变量是所有线程共享的,所以不会消失。因此,静态变量可以直接根据类名去访问。

static小结

特点

  • static修饰的成员被所有的对象共享。
  • static由于对象存在,因为static的成员随着类的加载就已经存在。
  • static修饰的成员多了一种调用方式,可以直接被类名调用。
  • static修饰的数据是共享数据,对象中存储的是特有数据

成员变量与静态变量的区别

区别成员变量静态变量
生命周期随着对象的创建而存在,随着对象的回收而释放随着的加载而存在,随着类的消失而消失
调用方式只能被对象调用可以被对象调用,也可以用类名调用(推荐)
别名实例变量类变量
存储位置堆内存的对象中,所以也叫对象的特有数据方法区(共享数据区)的静态区,所以也叫对象的共享数据

使用的注意事项

  • 静态方法只能访问静态成员。(非静态可以访问静态,也可以访问非静态)
  • 静态方法中不能使用this或super关键字。
  • 主函数是静态的。

问题回答版


参数传递

形参和实参的区别是什么?

  • 形参:形式参数,Parameters,定义方法时使用的参数。用来接受调用者传递的参数。作用域在方法内部。
  • 实参:实际参数,Arguments,调用时传递给方法的参数。实参在传递给别的方法前需要被预先赋值(必须有确定的值)。

Java是值传递还是引用传递?

值传递。

  • 当参数是基本数据类型,传递的就是基本类型的字面量值的拷贝,会创建副本。比如原始类型(int、long、char等)、包装类型(Integer、Long、String等),实参和形参都是存储在不同的栈帧内,修改形参的栈帧数据,不会影响实参的数据。
  • 当参数是引用类型数据,传递的就是实参所引用的对象在堆中地址值的拷贝,同样也会创建副本。形参和实参指向同一个地址的时候,修改形参地址的内容,会影响到实参。当形参和实参指向不同的地址的时候,修改形参地址的内容,并不会影响到实参。

值传递和引用传递的区别是什么?

  • 值传递:调用方法时,将实际参数拷贝一份传递给方法。在方法中修改形式参数时,不会影响到实际参数。
  • 引用传递:也称地址传递。调用方法时,将实际参数的地址传递给方法。在方法中对形式参数的修改,会影响到实际参数。

final关键词

final作用是什么?

用于修饰类、方法、变量。

final 修饰意义
不能继承扩展
变量不能修改(避免意外赋值导致的编程错误)
方法不能重写

final、finally、finalize有什么不同?

  • finally:Java保证重点代码一定要被执行的一种机制。可以使用 try-finally 或try-catch-finally进行类似关闭JDBC连接、保证unlock锁等动作。

需要关闭的连接等资源,更推荐使用 Java 7 中添加的 try-with-resources 语句,因为通常 Java 平台能够更好地处理异常情况,编码量也要少很多。

  • finalize:是基础类java.lang.Object的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize机制现在已经不推荐使用,并且在JDK9开始被标记为deprecated。因为无法保证finalize什么时候执行,执行的是否符合预期。使用不当会影响性能,导致程序死锁、挂起等。

下面代码会输出什么?
try {
// do something
System.exit(1);
} finally{
System.out.println(“Print from finally”);
}
上面 finally 里面的代码可不会被执行,这是一个特例。

static关键词

static作用是什么?

方便在没有创建对象的情况下进行调用。直接根据类名就可以去访问。

Java中static一般用来修饰成员变量、函数或内部类。普通类不允许声明为静态类。

static和final区别是什么?

参考链接

区别staticfinal
能否修饰类、方法、成员变量可以可以
能否修饰构造器不可以不可以
能否修饰代码块可以不可以
能否修饰局部变量不可以可以
修饰方法时能否被重写不可以不可以

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

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

相关文章

架空光缆用什么型号

架空光缆是什么意思 , 架空光缆用什么型号的 GYTC8A , 架空光缆型号是啥 8字形光缆 产品描述 Description GYTC8A光缆的结构是将250m光纤套入高模量材料制成的松套管中,松套管内填充防水化合物。缆芯的中心是一根金属加强芯,松套管(和填充绳 )围绕中心…

【汇总】虚拟机网络不通(Xshell无法连接虚拟机)排查方法

搜索关键字关键字关键字:虚拟机虚拟机虚拟机连接失败、虚拟机无法连接、Xshell连接失败、ping baidu.com失败、静态IP设置 Kali、CentOS、远程连接 描述:物理机无法连接虚拟机;虚拟机无法访问百度,虚拟机无法访问baidu.com 虚拟机…

Java数组的使用

前言 这里我使用的是IDEA编译器进行演示 数组的创建与初始化 创建格式: T[] 数组名 new T[N] T表示数组存放的数据类型,N表示数组的大小。 T[] 表示数组的类型。 这里要注意和C语言不同的是C语言使用类似int arr[10]这样的结构进行创建数组&#xff0c…

电脑文件x3daudio1 7.dll怎么修复?快速修复x3daudio1 7.dll的方法

你试过电脑文件x3daudio1 7.dll丢失么?如果你有遇到这种情况,那么可能你的某些程序就会启动不了,毕竟这个文件是用来处理音频功能的,那么我们要怎么去修复?下面我们一起来详细的了解电脑文件x3daudio1 7.dll这个文件吧…

今日总结2024/5/8

今日熟悉了贪心的上升下降子序列长度的优化解法以及和dfs的结合 以及LCS朴素写法 Acwing 287.导弹防御系统 为了对抗附近恶意国家的威胁,R𝑅 国更新了他们的导弹防御系统。 一套防御系统的导弹拦截高度要么一直 严格单调 上升要么一直 严格单调 下降…

作为新型锂离子电池正极材料 磷酸锰铁锂(LMFP)行业发展空间有望扩展

作为新型锂离子电池正极材料 磷酸锰铁锂(LMFP)行业发展空间有望扩展 磷酸锰铁锂(LMFP)指在磷酸铁锂基础上添加锰元素而制成的新型磷酸盐类锂离子电池正极材料。磷酸锰铁锂含有橄榄石型结构,生产成本低、能量密度高、绿…

中国GDP空间分布数据集、中国人口空间分布数据集、GDP密度分布、人口密度分布数据、夜间灯光分布数据、土地利用数据、道路网分布数据、乡镇边界分布

引言 GDP(国内生产总值)是指一个国家或地区所有常驻单位在一定时期内生产的所有最终产品和劳务的市场价值。GDP是表征宏观经济发展状况的基础性指标。GDP是社会经济发展、区域规划和资源环境保护的重要指标之一,通常以行政区为基本统计单元。…

echarts 处理数据

假如 我数据是这样式的 一个数组里边包含两个对象 var data [{ "gender": "female", "height": 161.2, "weight": 51.6 }, { "gender": "female", "height": 167.5, "weight": 59 }] 想转换…

uniapp使用vconsole调试 兼容App

前言:引入vconsole发现uniapp打出来的包里,看不到vconsole,uniapp开发的h5需要使用vconsole真机调试,如果直接在main.ts引入,打包后整个项目会页面空白,经实验在单个页面引入可解决,以下是解决方…

HTML学习|初识表单post和get提交、文本框和单选框、按钮、多选框和下拉框、文本域和文件域、搜索框滑块和简单验证、表单的应用、表单初级验证

初识表单post和get提交 form标签是表单,method控制表单提交方式,get方式,表单填写的参数能够在跳转的url地址中看到,post方式是看不到的,action是向何处跳转表单数据 input标签,且typetext,是…

基于“PLUS模型+”生态系统服务多情景模拟预测实践技术应用

工业革命以来,社会生产力迅速提高,人类活动频繁,此外人口与日俱增对土地的需求与改造更加强烈,人-地关系日益紧张。此外,土地资源的不合理开发利用更是造成了水土流失、植被退化、水资源短缺、区域气候变化、生物多样性…

OceanBase 分布式数据库【信创/国产化】- OceanBase 配置项和系统变量概述

本心、输入输出、结果 文章目录 OceanBase 分布式数据库【信创/国产化】- OceanBase 配置项和系统变量概述前言OceanBase 数据更新架构OceanBase 配置项和系统变量概述配置项配置项分类配置项查询系统变量系统变量分类系统变量查询配置项与系统变量的区分OceanBase 分布式数据库…

命令行工具部署达梦数据库 DMDPC(BP 多副本架构)

解达梦数据库DPC集群的主要使用场景: DMDPC 关注和解决的是大数据、计算与存储分离、高可用、支持全部的 SQL 标准、拥有完整的事务处理能力和集群规模能够动态伸缩的业务场景: 大量的复杂查询操作要求优化器能够生成优良的执行计划,并且执…

【git】发生冲突后回滚提交

gerrit 冲突, 无法合并到主干 那么先回滚 参考这里的 reset 操作: 回滚 到上一个提交 $ git reset --soft HEAD~1 # 數字表示移動到 HEAD後面第幾個刚提交的会撤回, stash 刚刚提交的 然后去pull 最新的 修改冲突: 最后再…

MATLAB数值计算工具箱介绍

MATLAB是一个强大的数学计算平台,它提供了广泛的数值计算工具箱,这些工具箱覆盖了从基础的线性代数到复杂的数值分析和优化问题。以下是MATLAB中一些关键工具箱的详细介绍: 1. 线性代数工具箱(Linear Algebra Toolbox&#xff09…

Shell编程之条件语句和case语句

一.基本条件测试 (一)条件的格式 Shell根据命令执行后的返回值(即 $? 的值)来判断命令有无执行成功,当返回值为 0 时表示命令执行成功,返回值为非 0 时表示命令执行失败(1-255均表示失败&…

学习R语言第六天

文章目录 绘制图形的方式计算字符的数量的方式提取字符变量的方式根据名称查询前缀的方式转化大小写的方式大写小写的获取数据长度的方式生成一个序列的方式从1开始到10,每次增加2从1到3 重复2次将函数到数据框中的方式生成数据rnorm 生成30行数据,nrow是6列数据计算…

STM32、GD32驱动PCA9685控制舵机源码分享

一、PCA9685介绍 PCA9685是一种16通道PWM(脉宽调制)控制器芯片,由NXP Semiconductors公司生产。它具有高速I2C总线接口,可以通过I2C总线与微控制器或其他设备进行通信。PCA9685广泛应用于各种需要精确控制多路PWM信号的应用&…

npm install 卡在reify:rxjs: timing reifyNode的解决办法

今天要逆向跑一个electron,但是npm install一直卡在 reify:element-plus: timing reifyNode:node_modules/lodash Completed in 6664ms这里一动不动,一番研究之后发现可能跟用的镜像有关系,我原本是官方镜像,总感觉第三方镜像有一…

伪装目标检测论文阅读之Dual-SAM(CVPR-2024)

论文:link code:code Fantastic Animals and Where to Find Them:Segment Any Marine Animal with Dual SAM 摘要 作为水下智能的重要支柱,海洋动物分割(MAS)涉及对海洋环境中的动物进行分割。以往的方法在提取长范围上下文特征方面表现不佳…