当前位置: 首页 > news >正文

Java学习记录day6

书接上回

类与对象

static关键字

static的作用:

  1. 修饰一个属性:声明为static的变量实质上就是一个全局变量,其生命周期为从类被加载开始一直到程序结束;
  2. 修饰方法:无须本类的对象也可以调用该方法;
  3. 修饰一个类:该类必须是内部类(后说);
    静态类与变量通过类名直接调用:类名.静态变量/静态方法。注意,非静态方法中可以调用静态的变量和方法,而静态方法中只能调用静态的变量和方法,不能调用非静态的变量和方法。
public class Test{public static void main(String[] args) {House h;//声明一个类的变量h = new House();//创建实例对象h.kind = "别墅";h.Print();//非静态方法的调用需要有h这个对象House.Smile();//静态类直接调用System.out.println(House.Count);//变量的调用也一样}
}
public class House{String kind = "未知";static int Count = 3;public void Ptint(){System.out.println(kind + Count +"栋");}public static void Smile(){System.out.println("哈哈,被骗了");}
}

静态方法限制:

  1. 仅能调用其他static方法;
  2. 只能访问static数据;
  3. 不能以任何方式引用this和super;
    因为static的限制,所以我们再定义他的时候最好确定之后他是否是所有对象共同的属性或方法在将其定义为静态。

值传递与引用传递

有一道非常经典的面试题目:


public class Test {public static void main(String[] args) {Integer a = 1;Integer b = 2;System.out.println("a 和 b 的原始的值:"+a+" "+b);swap(a,b);System.out.println("a 和 b 的现在的值:"+a+" "+b);}private static void swap(Integer a, Integer b) {// 交换a与b的值}

实现变量的交换非常简单,前面已经学习过了三种交换方法,直接带入最简单的:

 	private static void swap(Integer a, Integer b) {// 交换a与b的值int c;c = a;a = b;b = c;}

完成后最后的结果却是错的,这是因为程序中只交换了形参的值,而实参却没有丝毫变化。
形参 :就是形式参数,用于定义方法的时候使用的参数,是用来接收调用者传递的参数的。 形参只有在方法被调用的时候,虚拟机才会分配内存单元,在方法调用结束之后便会释放所分配的内存单元。 因此,形参只在方法内部有效,所以针对引用对象的改动也无法影响到方法外。
实参 :就是实际参数,用于调用时传递给方法的参数。实参在传递给别的方法之前是要被预先赋值的。 在本例中 swap 方法中的a, b 就是形参,传递给 swap 方法的 a,b 就是实参。
值传递:只能把实参传递给形参,而不能把形参的值反向作用到实参上。在函数调用过程中,形参的值发生改变,而实参的值不会发生改变。
在上题中,实际内存情况:
在这里插入图片描述
引用传递:是将实参引用的地址传递给了形参,所以任何发生在形参上的改变也会发生在实参变量上。
在第一个程序中h.kind = "别墅";这就是引用传递:
在这里插入图片描述

内存结构

在这里插入图片描述
.class:java程序编译后产生的编译文件;
类加载器:加载.class文件 ;
方法区:各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据;
栈内存: 在栈内存中保存的是堆内存空间的访问地址,或者说栈中的变量指向堆内存中的变量(Java中的指针);
堆内存:堆内存用来存放由new创建的对象实例和数组;
本地方法栈:存储本地方法,比如c语言栈。
程序计数器:可以看做是当前线程所执行的字节码的行号指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都要依赖这个计数器来完成。

代码块

用大括号裹起来的代码:

  1. 普通代码块:在方法中的写的代码块;
  2. 构造块:在类中定义的代码块,在创造对象时被调用,优于构造方法;
  3. 静态代码块:在类中是使用static声明的代码块,在第一次被调用(创建对象)时被调用,只会执行一次,优于构造块;
  4. 同步代码块:多线行程中介绍;
public class Test{public static void main(String[] args) {House h1 = new House();House h2 = new House();House h = null;}
}
public class House{public House(){System.out.println("构造方法/n--------------");}{System.out.println("构造块House/n---------");}public static void Smile(){{String info = "普通代码块smile/n-----------";System.out.println(info);			}}static {String info = "静态代码块smile/n-----------";}
}

相关文章:

Java学习记录day6

书接上回 类与对象 static关键字 static的作用: 修饰一个属性:声明为static的变量实质上就是一个全局变量,其生命周期为从类被加载开始一直到程序结束;修饰方法:无须本类的对象也可以调用该方法;修饰一个类&#x…...

ubuntu 使用 adb 工具卸载鸿蒙系统预装软件

准备工作 打开 USB 调试 进入 “设置->关于手机” 连续点击版本号, 直到有提示开启了"开发人员选项" 进入 “设置->系统和更新->开发人员选项”, 打开 USB 调式, 顺便可以把"自动系统更新"关了 下载 adb 工具 官方地址: https://developer.an…...

Jmeter in Linux - 在Linux系统使用Jmeter的坑

Jmeter in Linux - 在Linux系统使用Jmeter的坑Jmeter in Linux系列目录:o.a.j.JMeter: Error in NonGUIDriver起因错误分析:解决方案:解析日志没有展示请求和响应信息起因解决方案:注意Jmeter in Linux系列目录: 【如…...

什么是特权访问管理(PAM)

特权访问管理 (PAM) 是指一组 IT 安全管理原则,可帮助企业隔离和管理特权访问、管理特权帐户和凭据、控制谁可以获得对哪些端点的管理访问权限级别,并监视用户对该访问权限执行的操作。 什么是特权访问 特权访问是一种 IT 系统访…...

LeetCode题目笔记——1.两数之和

文章目录题目描述题目难度——简单方法一:暴力代码/Python方法二:哈希表代码/Python代码/C总结题目描述 这道题可以说是力扣的入坑题了,很经典,好像还是面试的经典题。 给定一个整数数组 nums 和一个整数目标值 target&#xff0c…...

CSDN版的详细MarkDown的使用教程

MarkDown的使用欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释…...

Nextcloud通过不被信任的域名访问解决方法 Nextcloud 您正在访问来自不信任域名的服务器

windows电脑在网页端输入“http://192.168.xxx.xxx:8080/login”访问远程ubuntu18.04服务器,访问其docker镜像的Nextcloud,提示“”Nextcloud通过不被信任的域名访问解决方法 Nextcloud 您正在访问来自不信任域名的服务器“”,如下图&#xf…...

Set集合的特点,HashSet去重的几个重要问题

Set集合的特点:无下标,无序(新增顺序和遍历顺序不一致,新增顺序不影响遍历顺序,而且有一个固定顺序),去重(不允许重复记录)public class TestOne {public static void main(String[] args) {// Set集合的特点&#xff…...

云计算|OpenStack|社区版OpenStack安装部署文档(十一--- 如何获取镜像---Rocky版)

前言: 前面我们使用虚拟机搭建了一个openstack集群,也就是在VM虚拟机的基础上模拟了一个简单的基于openstack社区版Rocky的私有云,但,不管任何部署安装工作,最后其实都是需要有实际的应用的,也就是常说的实…...

UmiJS学习

UmiJS4学习笔记起步官网学习:https://umijs.org/开发环境Umi.js 需要使用 Node.js来进行开发,因此请先确保电脑已经安装了 Node.js 且版本在 14 以上。安装pnpm:npm install pnpm -g创建项目Umi 官方提供了一个脚手架 ,可以轻松快…...

Leetcode:322. 零钱兑换(C++)

目录 问题描述: 实现代码与解析: 动态规划(完全背包): 原理思路: 问题描述: 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金…...

C经典小游戏之扫雷

编译环境:VS022 目录 1.算法思路 2.代码模块 2.1 game.h 2.2 game.cpp 2.3 test.cpp 3.重点分析 4.金句省身 1.算法思路 主要采用二维数组进行实现,设置两个二维数组,一个打印结果,即为游戏界面显示的效果,一个用…...

第十节 使用设备树插件实现RGB 灯驱动

Linux4.4 以后引入了动态设备树(Dynamic DeviceTree),我们这里翻译为“设备树插件”。设备树插件可以理解为主设备树的“补丁”它动态的加载到系统中,并被内核识别。例如我们要在系统中增加RGB 驱动,那么我们可以针对R…...

【LeetCode】公交路线 [H](宽度优先遍历)

815. 公交路线 - 力扣(LeetCode) 一、题目 给你一个数组 routes ,表示一系列公交线路,其中每个 routes[i] 表示一条公交线路,第 i 辆公交车将会在上面循环行驶。 例如,路线 routes[0] [1, 5, 7] 表示第 …...

报表生成器 FastReport .Net 用户指南 2023(十):Band的属性

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案,使用FastReport .NET可以创建独立于应用程序的.NET报表,同时FastReport .Net支持中文、英语等14种语言,可以让你的产品保证真正的国际性。 FastReport.NET官方版…...

DAMA数据管理知识体系指南之文档和内容管理

第10章 文档和内容管理 10.1 简介 文档和内容管理是对存储在关系数据库以外的信息的采集、存储、访问以及使用的控制活动。文档和内容管理的侧重点在完整性和访问控制上。因此,它与关系数据库的数据操作管理大致相同。由于多数非结构化数据与存储在结构化文件中的…...

C++入门:数据结构

C/C 数组允许定义可存储相同类型数据项的变量,但是结构是 C 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性&#x…...

C语言实现烟花表白,内含源码!!

虽然现在看烟花有一定难度,但代码式烟花可以随时随地看! 烟花的代码很多,实际上是可以用 Python、HTML5 等语言写烟花,但今天主要想和大家分享用C语言写的烟花代码,非常细致和实用。 同学们一定要亲自敲一遍&#xf…...

虚拟机安装CentOS 7(带界面)

目录 一、虚拟机安装CentOS 7(带界面) 1、打开下好的VMware,点击创建虚拟机 2、下一步 3、点击下一步 4、选择Linux,ContOS7,点击下一步 5、修改虚拟机名称和路径 6、下一步 7、点击自定义硬件 8、设置虚拟机大…...

Java测试——selenium具体操作

selenium的前置准备工作可以参考我之前的博客:Java测试——selenium的安装与使用教程 这篇博客讲解一下selenium的常见操作 先创建driver ChromeDriver driver new ChromeDriver();输入网址 driver.get("https://www.baidu.com");常见操作 查找元素…...

利用Taotoken模型广场为内容生成应用挑选合适模型

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用Taotoken模型广场为内容生成应用挑选合适模型 对于开发内容生成类应用的团队而言,选择合适的模型是项目成功的关键…...

Cheat Engine 简单使用教程(新手版)

很多人第一次打开 Cheat Engine,都会被界面吓到。 其实真没那么复杂。 如果你只是想修改一下单机游戏里的金币、血量或者资源,掌握下面这几个步骤基本就够用了。 一、先打开游戏,再启动 Cheat Engine 这一点很多新人容易搞反。 正确顺序是…...

深度探索JD-GUI:Java字节码逆向工程与代码解析实战剖析

深度探索JD-GUI:Java字节码逆向工程与代码解析实战剖析 【免费下载链接】jd-gui A standalone Java Decompiler GUI 项目地址: https://gitcode.com/gh_mirrors/jd/jd-gui 在Java开发与逆向工程领域,Java反编译、字节码分析、代码逆向已成为开发者…...

Primr:开源AI研究代理,35分钟自动生成公司深度战略分析报告

1. 项目概述:Primr,一个将公司网站转化为深度战略分析的AI研究代理 如果你做过公司研究、市场分析或者投资尽调,你肯定知道那有多痛苦。打开浏览器,输入公司网址,在“关于我们”、“产品”、“新闻”和“博客”之间来…...

静态前端项目实战:从营销页到现代化门户的架构与实现

1. 项目概述:一个纯粹的静态前端项目最近在GitHub上看到了一个名为“Vibe Code”的项目,它的README写得非常漂亮,充满了各种炫酷的特性介绍,比如支持Claude Code、OpenAI Codex等AI编程助手,还有深色/亮色主题切换、多…...

使用Taotoken后API调用延迟稳定在可接受范围且账单清晰可见

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken后API调用延迟稳定在可接受范围且账单清晰可见 1. 引言 对于需要集成大模型能力的开发者而言,除了模型效…...

收藏!AI时代程序员是消失还是逆袭?小白程序员必看大模型逆袭指南

收藏!AI时代程序员是消失还是逆袭?小白程序员必看大模型逆袭指南 文章探讨了AI对程序员行业的影响,指出AI抢走了程序员一半的饭碗,但也为另一半人打开了高阶职场的大门。初级岗位因AI工具普及而面临失业风险,但高级技术…...

vLLM Semantic Router:基于信号驱动的LLM智能路由架构与生产实践

1. 项目概述:为什么我们需要一个“智能”的LLM路由器?在当前的LLM应用开发中,我们正面临一个甜蜜的烦恼:模型太多了。从闭源的GPT-4、Claude,到开源的Llama、Qwen、DeepSeek,再到各种针对特定任务微调的小模…...

【Midjourney Tempera风格终极指南】:20年AI绘画专家亲授3大参数黄金配比与5类易踩翻车点

更多请点击: https://intelliparadigm.com 第一章:Tempera风格的本质解构与历史溯源 Tempera(蛋彩画)作为一种古老而精密的绘画媒介,其技术逻辑与现代前端渲染范式存在深层隐喻关联——尤其在“分层合成”“介质绑定”…...

短视频矩阵运营方法论——不同平台多账号协同的底层逻辑与避坑指南

短视频矩阵运营已成为品牌获取规模化流量的核心手段,但多账号协同背后的平台算法逻辑、账号关联风险、内容差异化策略等复杂问题,常常导致运营者踩入“雷区”。本文基于抖音、微信视频号、小红书三大主流平台官方规则与公开算法解读,系统梳理…...