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.rhkb.cn/news/322565.html

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

相关文章

引用数据类型 栈内存 堆内存

let m { a: 10, b: 20 }; let n m; n.a 15; console.log(m.a) // 15 原因:基本数据类型存储在栈内存中,引用数据类型存储在堆内存中 ,引用数据类型存储在堆内存中会在栈内存中创建一个指针,栈内存中的这个指针指向堆内存中的地…

Blender材质,纹理,UV

1.材质Material,用于描述物体的表面性质,包含以下基本属性 -基础色 -金属/非金属 -粗糙度 -透光度 -凹凸细节 添加材质步骤: 1)切换到材质预览模式 2)打开材质面板 3)添加一个材质,包括材…

Windows 10 中使用 Montreal-Forced-Aligner (MFA) 实现音频和文本强制对齐

文章目录 一、实现目标二、安装 Montreal-Forced-Aligner1、使用 Anaconda 虚拟环境2、修改默认下载路径3、安装 montreal-forced-aligner 及相关第三方包4、验证是否安装成功 三、下载声学模型和发音词典1、命令行方式下载2、手动方式下载 四、强制对齐1、准备音频及对应文本2…

[嵌入式系统-72]:RT-Thread-组件:单元测试框架utest

目录 utest 测试框架 ​编辑 测试用例定义 测试单元定义 utest 应用框图 2. utest API assert 宏 测试单元函数运行宏 测试用例导出宏 测试用例 LOG 输出接口 3. 配置使能 4. 应用范式 5. 测试用例运行要求 6. 运行测试用例 测试结果分析 7. 测试用例运行流程 …

14.集合、常见的数据结构

集合 概念 Java中的集合就是一个容器,用来存放Java对象。 集合在存放对象的时候,不同的容器,存放的方法实现是不一样的, Java中将这些不同实现的容器,往上抽取就形成了Java的集合体系。 Java集合中的根接口&#x…

MySQL数据库---增删查改汇总

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文着重整理MySQL数据库增删查改功能 主要是整理语法 争取做到要用什么语法 可以快速找到复制粘贴 增添语法 INSERT into tab(列名,列名,列名) values(内容,内容,内容); 插入一行数据 INSERT into tab(列名,…

邦注科技 模具保护器 CCD电子眼 专业工业视觉检测设备

模具保护器是一种用于保护模具的设备,可以在塑料压铸和冲床等加工过程中起到保护模具的作用。以下是关于模具保护器在保护塑料压铸和冲床模具方面的应用: 塑料压铸模具保护器: 防止碰撞:在塑料压铸过程中,模具可能会…

Android Studio报错:Constant expression required

【出现的问题】: 使用JDK17以上版本,switch语句报错:Constant expression required 【解决方法】: 在gradle.properties配置文件下添加代码: android.nonFinalResIdsfalse 如图: 接着再点击右上角的Sync…

数仓开发:DIM层数据处理

一、了解DIM层 这个就是数仓开发的分层架构 我们现在是在DIM层,从ods表中数据进行加工处理,导入到dwd层,但是记住我们依然是在DIM层,而非是上面的ODS和DWD层。 二、处理维度表数据 ①先确认hive的配置 -- 开启动态分区方案 -- …

Python深度学习基于Tensorflow(6)神经网络基础

文章目录 使用Tensorflow解决XOR问题激活函数正向传播和反向传播解决过拟合权重正则化Dropout正则化批量正则化 BatchNormal权重初始化残差连接 选择优化算法传统梯度更新算法动量算法NAG算法AdaGrad算法RMSProp算法Adam算法如何选择优化算法 使用tf.keras构建神经网络使用Sequ…

活动图与状态图:UML中流程图的精细化表达——专业解析系统动态性与状态变迁

流程图是一种通用的图形表示法,用以展示步骤、决策和循环等流程控制结构。它通常用于描述算法、程序执行流程或业务过程,关注于任务的顺序执行。流程图强调顺序、分支和循环,适用于详细说明具体的处理步骤,图形符号相对基础和通用…

Logfire-Python可观测平台快速上手

我最近在优化之前的FastAPI接入可观测性平台,正好分享一下Pydantic团队推出的logfire,希望对大家的Python工程化有帮助。 Github: https://github.com/pydantic/logfire 官网链接: Pydantic Logfire Documentation Logfire是Pydantic团队推出的可观测…

数据结构复习指导之二叉树的遍历

文章目录 二叉树 考纲内容 复习提示 1.二叉树的遍历 1.1先序遍历(PreOrder) 1.2中序遍历(InOrder) 1.3后序遍历(PostOrder) 1.4递归算法和非递归算法的转换 1.5层次遍历 1.6由遍历序列构造二叉树…

3.yolov5训练前的图片处理详解(python)

其实,yolov5模型可以分为深度网络、数据处理(图片处理)、损失函数、优化器选择、训练和预测及部分构成,相信大家对训练和预测的代码比较熟悉。前面两章我们根据代码和结构图了解了yolov5的深度网络,接下来看数据处理的…

力扣刷题--数组--第三天

今天再做两道二分查找的题目,关于二分查找的知识可看我前两篇博客。话不多说,直接开干! 题目1:69.x 的平方根 题目详情:   给你一个非负整数 x ,计算并返回 x 的 算术平方根 。由于返回类型是整数&#…

首席数据官CCRC-CDO如何构筑企业数据合规的坚固防线

在当今信息化快速发展的时代,数据已经成为企业最宝贵的资产之一。然而,随着数据规模的迅速增长,数据合规问题也日益凸显。首席数据官(CDO)作为企业中负责数据战略和管理的核心人物,构筑企业数据合规的坚固防…

吴恩达2022机器学习专项课程C2(高级学习算法)W1(神经网络):2.5 更复杂的神经网络

目录 示例填写第三层的层数1.问题2.答案 公式:计算任意层的激活值激活函数 示例 层数有4层,不包括输入层。 填写第三层的层数 1.问题 你能把第二个神经元的上标和下标填写出来吗? 2.答案 根据公式g(wxb),这里的x对应的是上…

Unity EventSystem入门

概述 相信在学习Unity中,一定有被UI事件困扰的时候把,当添加UICanvas的时候,Unity会为我们自动添加EventSystem,这个是为什么呢,Unity的UI事件是如何处理的呢,在使用各个UI组件的时候,一定有不…

Springboot+Vue项目-基于Java+MySQL的个人云盘管理系统(附源码+演示视频+LW)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…

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

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