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…

如何解决 PyQt5 中使用 QtNetwork后使用pyinstaller 打包后网络请求失败的问题

在使用 PyQt5 开发应用程序时,我遇到一个问题:使用 QtNetwork 进行网络通信,在通过 PyInstaller 打包后,应用程序无法正常进行网络请求。经过一些研究和尝试,我找到了解决方案,并记录如下: 问题…

力扣209-长度最小的子数组-滑动窗口思想

题目 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 示例 1: 输入&am…

TCP单包数据大于1460字节会被拆包的问题

关于TCP单包数据大于1460字节会被拆包的问题 1、问题背景: 最近在用STM32W5500做项目,需要STM32通过TCP协议发送数据到上位机并显示。当数据量小的时候上位机显示正常,一旦数据量大过大上位机就会出现数据丢失的情况,甚至数据直接…

LeetCode392:判断子序列

题目链接&#xff1a;392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; 代码如下&#xff1a; class Solution { public:bool isSubsequence(string s, string t) {int len1 s.size();int len2 t.size();int result 0;vector<vector<int> > dp(len1 …

通过滑动控制 图片3d(多张视频序列帧图片) 展示

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>控制图片变化</title> <style>img {…

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

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

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

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

k8s_Pod健康检查

Kubernetes 3种探针介绍 LivenessProbe&#xff08;存活探针&#xff09; LivenessProbe 用于检查容器是否仍然活着。如果探针检测到容器已经失去响应&#xff0c;Kubernetes 将重启该容器。这通常用来修复由于内部状态错误或死锁引起的程序失效问题。 作用&#xff1a;检测容器…

常见的音视频格式介绍

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

校园表白墙源码修复版

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

基于机器学习的个性化电影推荐系统【源码+安装+讲解+售后+文档】

【1】系统介绍 研究背景 随着互联网技术的迅速发展&#xff0c;数字娱乐内容特别是电影和电视剧的数量急剧增加。用户在享受丰富内容的同时&#xff0c;也面临着选择困难的问题&#xff0c;即“信息过载”。传统的搜索和分类方法已经无法满足用户日益增长的个性化需求。与此同…

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

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

一位Go开发者的深度访谈:从进阶到实战,《Let’s Go Further!》如何开拓Go语言新世界

读者&#xff1a;我最近在学习Go&#xff0c;发现构建API和Web应用方面还是有很多挑战&#xff0c;尤其是需要兼顾代码架构、性能和扩展性。您作为一位Go语言技术专家&#xff0c;怎么看《Let’s Go Further!》这本书呢&#xff1f; 专家&#xff1a;这本书确实很有意思。《Le…

【npm的软硬原理】

npm link用来在本地项目和本地npm模块之间建立连接&#xff0c;可以在本地进行模块测试 具体用法&#xff1a; 1. 项目和模块在同一个目录下&#xff0c;可以使用相对路径 npm link …/module 2. 项目和模块不在同一个目录下 cd到模块目录&#xff0c;npm link&#xff0c…

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

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

【Android】MVP架构

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

设计模式4 适配器 (adapter)

一句话&#xff0c;适配器按照客户的需求, 适配当前已有的接口。 目标接口&#xff1a;reqeust() public interface Target {void request(); //this is client needed interface }已有接口&#xff1a;specificRequest package com.example.adapter;import android.uti…

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

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