JavaSE要点 1】Java基础

目录

一、编译和运行

二、JDK,JRE和JVM

三、Java中的基本类型

1. 基本类型的大小

四、JVM内存模型

1. 内存模型

五、JVM虚拟机的组成

1. 虚拟机的5个组成部分

2. 虚拟机栈

3. 栈帧

六、值传递和引用传递 

七、变量的默认值

八、String的不可变

九. 包装类和常量池(-128 - 127)

包装类和原生类的比较

a. 使用==进行比较(包装类的拆箱)

b. 使用equals()进行比较(原生类的装箱)

十、格式化输出 和 获取随机数

十一 、阿里编程规范

1. 软编码

2. 卫语句 

3. 命名法

十二、调试

1. debug

2. 启动bebug后要查看某个表达式的值


一、编译和运行

  • 编译:即通过javac命令将.java代码文件 由Java编译器(javac.exe)  编译成 .class字节码文件
  • 运行:则是把编译生成的.class字节码文件交给Java虚拟机(JVM)执行。
    字节码文件由 java虚拟机(JVM) 解释为当前平台能够运行的机器码文件。

所以不同操作系统需要安装不同的虚拟机。(Java最大的优势就在于跨平台。)

Java源码编译器(javac.exe) 通常是 Java开发工具包(JDK) 的一部分,它主要由 javac 命令行工具提供。

二、JDK,JRE和JVM

  • JVM:即Java虚拟机,是虚拟出来的一台计算机,将字节码翻译成当前平台的机器码给平台执行;
  • JRE:运行JAVA程序的最小环境,JRE等于JVM加Java的基础类库;(如果你只是想运行一个Java程序的机器码,而不需要编译Java代码,那么JRE就足够了。)
  • JDK:开发JAVA程序的最小环境,JDK等于JRE加开发工具(编译javac.exe、运行java.exe等)。

JRE = 运行Java应用程序的JVM +库。

JDK = JRE +开发Java应用程序的工具(javac和java)。

总结:开发java程序的最小环境是JDK,运行Java程序的最小环境是JRE,JDK包含JRE,JRE包含JVM。

JVM:Java Virtual Machine             -  java虚拟机

JRE:Java Runtime Environment   -   java运行环境

JDK:Java Development Kit           -   java开发工具


 三、Java中的基本类型

1. 基本类型的大小

这个大小是在jvm虚拟机中的大小,所以不管在哪个操作系统下,只要用的是同一个厂商的虚拟机,最后的大小都是一样的。


四、JVM内存模型

1. 内存模型

Java的内存结构主要有五个部分,包括:堆(Heap)、栈(Stack)、方法区(Method Area)、程序计数器(Program Counter Register)以及本地方法栈(Native Method Stack)。

2. jdk1.8后的内存模型 

  • 类及成员是蓝图存储在方法区,对象都存储在堆区。

  • 方法区在java8以前是放在JVM内存中的,由永久代实现,受JVM内存大小参数的限制,在java8中移除了永久代的内容,方法区由元空间(Meta Space)实现,并直接放到了本地内存中,不受JVM参数的限制(当然,如果物理内存被占满了,方法区也会报OOM),并且将原来放在方法区的字符串常量池和静态变量都转移到了Java堆中。

五、JVM虚拟机的组成

1. 虚拟机的5个组成部分

2. 虚拟机栈

main方法在虚拟机栈中运行。所有方法运行时都会在虚拟机栈中生成一个栈帧。


3. 栈帧

每个栈帧中都有一个局部变量表。

栈帧中有四个东西:

六、值传递和引用传递 

  • 自定义类型和数组是引用类型,存储的是地址;基本类型的变量,存储的数值。
  • 所以引用传递就是使用自定义类型或数组做形参,传的是地址。值传递就是用基本类型变量做形参,传的是数值。

以上只是为了方便记忆,以下是官方说法:

        在Java中,所有的参数传递,无论是引用类型还是基本类型,都是通过值传递的。这里的“值”对于基本类型来说就是具体的数值,而对于引用类型来说就是对象引用的地址值。

七、变量的默认值

局部变量没有默认值,因为它在栈中;成员变量和引用类型变量有默认值,因为它们在堆中。

所以局部变量不初始化不能使用,引用类型变量可以。

基本的类型默认值都为0,其中boolean的0是指false,char的0是指ASCII中的0 。


八、String的不可变

修改字符串不会真的改变String对象,而是改变引用变量引用的字符对象,一旦尝试改变字符串(+),引用变量就会指向新的String对象。

原理是:String类型的底层源码是一个用final修饰的char数组。

面试题】以下程序的输出

public class GoodAndGbc {String str = new String("good");char[] ch = { 'a', 'b', 'c' };public static void main(String[] args) {GoodAndGbc t = new GoodAndGbc();t.change(t.str, t.ch);System.out.print(t.str + " and ");System.out.println(t.ch);}public void change(String str, char ch[]) {str = "test ok";ch[0] = 'g';}}
// 输出:good and gbc

九. 包装类和常量池(-128 - 127)

a. 以下代码的结果是true还是false?

结果为true。

因为有常量池(-128~127)


b. 以下代码的结果是true还是false?

结果为false。


解释:

为什么第一张图的结果为true,第二张图的结果为false。

因为常量池的范围为-128 - 127,第一张图中的包装类赋值为10,在常量池的范围中,所以指向的就是常量池中的10,所以两个包装类指向的是同一个10,地址相同所以输出true。
第二张图中1234常量池中没有,所以要创建一个新对象,所以两个包装类指向不同的对象,故地址不相同所以输出true。

包装类和原生类的比较

a. 使用==进行比较(包装类的拆箱)

提示:包装类和原生类(基本类型)使用==进行比较时,包装类会转化为原生类。


以下代码的结果是true还是false?

结果为true。


以下代码的结果是true还是false?

结果还是true。


只要包装类和基本类型(无论是哪一种基本类型)进行“==”运算符的比较,包装类会先转化为原生类,再去和基本类型变量比较。这就叫包装类的自动拆箱。

b. 使用equals()进行比较(原生类的装箱)

以下代码的结果是true还是false?为什么?

结果为true。


以下代码的结果是true还是false?为什么?

结果为false。


首先要知道一点,如果equals()的参数是原生类,那么会先将原生类转为包装类,再和包装类进行比较。这叫原生类的装箱。

其次观察equals方法的源码:

        通过源码可知,只要传入的不是Integer类型(instanceof关键字用于判断当前引用指向对象的真实类型)就不会比较,直接返回false。有了上面的基础请看下面这题:


以下代码的结果是true还是false?为什么?

同理,即使是两个包装类比较,但类型不同也还是false。
equals的底层代码里,优先判断类型,类型不同直接false


十、格式化输出 和 获取随机数

 返回随机数的两种方法:

十一 、阿里编程规范

1. 软编码

        将要重复打印的语句用变量保存起来,方便以后修改。

2. 卫语句 

        在函数的开始处检查一个或多个前置条件,如果这些条件不满足,则函数会提前退出,通常是通过返回或抛出异常的方式。这样的设计可以使函数的主要逻辑部分更加清晰和简洁,避免在函数的深处进行条件检查。

3. 命名法

十二、调试

1. debug

不打断点,debug启动后会直接运行到结尾。


2. 启动bebug后要查看某个表达式的值:


------------------------END-------------------------

才疏学浅,谬误难免,欢迎各位批评指正。

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

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

相关文章

基于SSM的网上购物系统的设计与实现

技术介绍 本系统运用了JSP技术、SSM框架、B/S架构和myspl数据库 MySQL 介绍 MySQL是一种关系型的数据库管理系统,属于Oracle旗下的产品。MySQL的语言是非结构化的,使用的用户可以在数据上进行工作。这个数据库管理系统一经问世就受到了社会的广泛关注…

【WebGis开发 - Cesium】三维可视化项目教程---图层管理拓展图层顺序调整功能

目录 引言一、为什么要开发图层顺序调整功能二、开发思路整理1. 拖拽库方案选择2. cesium图层api查询 三、代码编写1. 编写拖拽组件代码2. 修改原有图层管理代码2.1 图层加载移除的调整2.2 图层顺序与拖拽列表的矛盾 3. 编写图层移动代码 四、总结 引言 本教程主要是围绕Cesium…

深入理解InnoDB底层原理:从数据结构到逻辑架构

💡 无论你是刚刚踏入编程世界的新人,还是希望进一步提升自己的资深开发者,在这里都能找到适合你的内容。我们共同探讨技术难题,一起进步,携手度过互联网行业的每一个挑战。 📣 如果你觉得我的文章对你有帮助,请不要吝啬你的点赞👍分享💕和评论哦! 让我们一起打造…

ctfshow(259->261)--反序列化漏洞--原生类与更多魔术方法

Web259 进入界面,回显如下: highlight_file(__FILE__);$vip unserialize($_GET[vip]); //vip can get flag one key $vip->getFlag();题干里还提示了网站有一个flag.php界面,源代码如下: $xff explode(,, $_SERVER[HTTP_X…

常见的音视频格式介绍

目录 aac格式介绍(ADTS)h264格式分析FLV和MP4格式介绍 aac格式介绍(ADTS) aac的格式有两种:ADIF不常用,ADTS是主流,所以这里主要讲解ADTS。简单来说,ADTS可以在任意帧解码&#xff…

校园表白墙源码修复版

此校园表白墙源码基于thinkphp,因为时代久远有不少bug,经本人修复已去除大部分bug,添加了美化元素。 https://pan.quark.cn/s/1f9b3564c84b https://pan.baidu.com/s/1bb9vu9VV2jJoo9-GF6W3xw?pwd7293 https://caiyun.139.com/m/i?2hoTc…

多款云存储平台存在安全漏洞,影响超2200万用户

据苏黎世联邦理工学院研究人员Jonas Hofmann和Kien Tuong Turong的发现,端到端加密(E2EE)云存储平台存在一系列安全问题,可能会使用户数据暴露给恶意行为者。在通过密码学分析后,研究人员揭示了Sync、pCloud、Icedrive…

三维管线管网建模工具MagicPipe3D V3.5.3

经纬管网建模系统MagicPipe3D,本地离线参数化构建地下管网三维模型(包括管道、接头、附属设施等),输出标准3DTiles、Obj模型等格式,支持Cesium、Unreal、Unity、Osg等引擎加载进行三维可视化、语义查询、专题分析&…

【Android】MVP架构

MVP架构简介 MVP(Model-View-Presenter)是一种常见的软件架构模式,尤其在Android应用开发中被广泛使用。它将应用程序分为三层:Model、View 和 Presenter,以实现职责分离,提高代码的可维护性和可测试性。 …

基于自适应VSG控制的光伏混合储能构网型逆变系统MATLAB仿真模型

模型简介 此模型源侧部分采用光伏发电系统与混合储能系统(蓄电池超级电容),并网逆变器采用虚拟同步发电机(VSG)控制,为系统提供惯量阻尼支撑。同时对VSG控制部分进行了改进,采用构造函数法对虚…

论文阅读(二十九):Multi-scale Interactive Network for Salient Object Detection

文章目录 Abstract1.Introduction2.Scale VariationProposed Method3.1Network Overview3.2Aggregate Interaction Module3.3 Self-Interaction Module3.4Consistency-Enhanced Loss 4.Experiments4.1Implementation Details4.2 Comparison with State-of-the-arts4.3Ablation …

【力扣】[Java版] 刷题笔记-21. 合并两个有序链表

题目: 21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 解题思路 从题目和示例可以看出,应该是要循环遍历链表进行比较,然后组成新的链表。 第一种:递归…

存储过程(SQL)

1.存储过程 存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 2.MySQL存储过程创建…

PostgreSQL的前世今生

PostgreSQL的起源可以追溯到1977年的加州大学伯克利分校(UC Berkeley)的Ingres项目。该项目由著名的数据库科学家Michael Stonebraker领导,他是2015年图灵奖的获得者。以下是PostgreSQL起源的详细概述: 一、早期发展 Ingres项目…

LabVIEW换流变换器智能巡检系统

基于LabVIEW的换流变换器智能巡检系统通过自动化检测和数据分析,提高换流变换器的运行效率和可靠性,降低人工维护成本。 项目背景: 换流变压器作为电力系统的重要组成部分,其性能的可靠性直接影响到整个电网的稳定运行。然而&…

完美解决phpstudy安装后mysql无法启动

phpstudy数据库无法启动有以下几个原因。 一、自己在电脑上安装了MySQL数据库,MySQL的服务名为MySQL,这会与phpstudy的数据库的服务名发生冲突,从而造成phpstudy中的数据库无法启动,这时我们只需要将自己安装的MySQL的服务名改掉就行。 但是&#xff0…

软件测试的重要一环:「性能测试」怎么做?

性能测试是软件测试中的重要一环,今天给大家介绍性能测试及如何使用RunnerGo完成性能测试任务。 性能测试是什么? 一句话概括:不断地通过不同场景的系统表现去探究系统设计与资源消耗之间的平衡,为开发人员提供消除瓶颈所需的诊…

Ajax:表单 模板引擎

Ajax&#xff1a;表单 & 模板引擎 form 表单form 属性 Ajax操控表单事件监听阻止默认行为收集表单数据 模板引擎art-template{{}}语法原文输出条件输出循环输出过滤器 原理 form 表单 在HTML中&#xff0c;可以通过<form>创建一个表单&#xff0c;收集用户信息。而采…

基于docker 部署redis

1、拉取镜像 docker pull redis:latest如果拉取失败可以尝试下配置镜像源&#xff0c;具体参考如下&#xff0c;目前暂可以使用 Docker切换镜像源-CSDN博客 2、创建配置文件 mkdir /usr/local/redis/conf vim redis.conf bind 0.0.0.0#protected-mode no port 6379 tcp-b…

Fast Simulation of Mass-Spring Systems in Rust 论文阅读

参考资料&#xff1a; Fast Simulation of Mass-Spring Systems in Rust 论文阅读&#xff1a;Fast Simulation of Mass-Spring Systems 【论文精读】讲解刘天添2013年的fast simulation of mass spring system(Projective Dynamics最早的论文) Projective Dynamics笔记(一…