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

JAVA——初识JAVA

文章目录

  • 如何在cmd上编译、运行
  • 代码解析
  • String[] args中放的是什么
  • Java结构
  • 编译运行可能遇到的错误
  • Java中的注释
    • Java的三种注释
    • 编码不一致的问题
  • IDEA常用基础开发快捷键
    • 补齐快捷键
    • 注释快捷键
  • IDEA的基础调式方法
  • 标识符

如何在cmd上编译、运行

在没有集成开发环境下,该如何去运行一个java程序呢?

  • 先创建一个文本文档,将这个文件的后缀名改为java
    在这里插入图片描述
    类型就会变为java源文件
    在这里插入图片描述
  • 接着打开记事本开始写java代码(写完要保存)
    在这里插入图片描述
    此时这些代码就是一些普通的字母,我们该怎样把它们变成程序呢?
    既然要变成计算机能识别的程序,那么它必须得是二进制。所以必须通过编译生成二进制的内容,计算机才能识别它。
  • 该怎么变成电脑可以识别的二进制呢?
    • 在放Test.java文件的路径下输入cmd
      在这里插入图片描述
      变成这样:
      在这里插入图片描述
      输入cmd+回车
      在这里插入图片描述
      此时打开的窗口就已经在刚刚的路径下了:
      在这里插入图片描述
      此时用java的编译器进行编译,Java的编译器是javac。通过javac去编译我们写好的Test.java
      在这里插入图片描述
      回车过后虽然什么也没有输出,但多了一个名为Test.classCLASS文件。在这里插入图片描述
      这个CLASS文件是(二进制的)字节码文件,通过javacTest.java生成了Test.class的字节码文件(二进制)在这里插入图片描述
  • 既然已经编译生成好字节码(二进制)文件后,那么该怎么运行这个Test呢?
    通过java这个命令来运行在这里插入图片描述
    注意:javac后面+Test.java(有后缀的文件名);
    java后面+Test(文件名/类名,反正无后缀)
  • 运行后的结果:
    在这里插入图片描述
    当我们使用java命令的时候,会把生成好的二进制文件运行到JVM(java virtual machine)里面,也就是java虚拟机当中,最后会输出结果:hello world
    在这里插入图片描述
    这时候就会有人问,我没有安装java虚拟机(JVM)呀?
    其实我们已经安装了,因为我们装了jdk,在jdk里面就包含JVM.
    在这里插入图片描述
    JDK里有个叫JRE的东西,JRE里面又有JVM。所以,当我们把JDK安装好之后,实际上JVM也就装好了。
    JDK(Java Development Kit)——Java开发工具包,包含了JRE,同时还包含了编译器javac与自带的调试工具Jconsole、jstack等。
    JRE(Java Runtime Environment——Java运行时环境,包含了JVM,Java基础类库。
    JVM(java virtual machine)——Java虚拟机,运行Java代码。

代码解析

在这里插入图片描述

  • 代码中public class是固定写法(也可以不写public,区别后面再说)
  • 我们把第一行的Test叫做类名,类名有以下几个要求:
    • 1.必须要为大驼峰(eg:MaxNum):如果有一个单词,这个单词的首字母大写;如果有两个及以上的单词,每个单词的首字母大写。
    • 2.被public修饰的类名必须和文件名相同
      什么是类呢?
      class修饰Test那么Test就是一个类。这个类就要与文件名Test相同,所以这里是Test
  • 代码中public static void main{}叫做main方法,是程序的入口。在这里插入图片描述
    main方法的写法是固定的,写成public static void main{},与C语言学的main{}是一样的。
  • 代码中用括号包起来的String[] argsmain的参数,args是数组。
    在我们之前学的C语言中,数组不应该是int arr[]这样写的吗?为什么这里写成int[] arr
    我们通常是通过类型来定义变量的:类型+变量名,如int a;而C语言中数组的写法是类型中间夹个变量名,是不合适的。所以Java中String[] args这样写才是比较合理的,此时这个数组叫做字符串数组。
  • 代码中System.out.println类似于C语言中的打印,也就是printf,只不过这里的ln代表着换行。
  • 最后双引号引起来的“hello world”叫做字符串
  • 注意:左花括号一定是在当前行的!!!换行也不会报错,但建议括号对齐
    在这里插入图片描述

String[] args中放的是什么

String[] args里面放的到底是什么呢?
因为我们有C语言的基础,我们对代码进行一点改造:

  • 先给代码加个循环在这里插入图片描述
    Java中可以通过数组名args调用length,这样可以自动计算出数组的大小。
    所以args.length代表着当前数组的长度

  • 再通过System.out.println在循环中进行输出,输出的是args[i]
    在这里插入图片描述

  • 修改完代码后按ctrl+s保存,接着在放Test.java这个文件的路径下输出cmd打开命令界面
    在这里插入图片描述

  • 输入javac Test.java进行编译,输入java Test进行运行
    在这里插入图片描述
    我们发现这里什么也没有输出,可是我们在代码中写了输出了呀?
    这里就要告诉我们args数组里面存的到底是什么了。

  • 我们再敲一条命令:java Test gxb is a pretty girl。(此时在运行这个java程序的时候后面加了gxb is a pretty girl
    在这里插入图片描述
    发现:对运行时输入的内容进行了打印(输出的是运行时输入的内容)
    所以数组args存了运行java程序时所输入的参数
    在这里插入图片描述
    我们把args所存储的内容叫做运行时的命令行参数
    也就是说,当我们在运行java程序的时候,是可以给它输入一些值的,这些值会存储到args中,这就是String args这个参数的意义。


Java结构

通过上述代码,我们可以看到一个完整的Java程序结构,由如下三个部分组成:

  • 源文件(拓展名为.java):源文件带有类的定义。类用来表示程序的一个组件,小程序或许只会有一个类,类的内容必须包含在花括号里面。
  • 类:类中带有一个或多个方法,方法必须在类的内部声明。
  • 方法:在方法的花括号中编写方法应该执行的语句(方法就是C语言中的函数)。

注意:

  • 在一个源文件中只能有一个public修饰的类
    我们不能像这样再在这个源文件中写个类Test2
    在这里插入图片描述
    而且源文件名字必须与public修饰的类的名字相同。

  • 我们在写代码的时候一定要注意结构,Java代码的结构是这样的:
    最外层一定是类,在类当中才会有各种各样的方法,所以不能让方法游离于类外
    在这里插入图片描述
    如我们再写一个叫func的方法
    在这里插入图片描述
    这个func方法是游离于类Test之外的,我们保存后试试编译(所有修改后的代码都需要重新编译)这段代码:
    在这里插入图片描述
    所以方法一定不能游离于类外的


编译运行可能遇到的错误

  • 源文件名后缀不是.java
  • 类名与文件名不一致
  • main方法名字写成mian
  • 类没有使用public修饰
  • 方法中语句没有以分号结尾
  • 中文格式的分号
  • JDK环境没有配置好,操作系统不能识别javac或者java命令

Java中的注释

Java的三种注释

Java中的注释主要分为以下三种:

  • 单行注释://注释内容(用的最多)

  • 多行注释:/*注释内容*/(不推荐)

  • 文档注释:/**文档注释*/(常用于方法和类之上描述方法和类的作用)可以被javadoc工具解析,生成一套以网页文件形式体现的程序说明文档在这里插入图片描述
    Java文档注释如何生成的命令:javadoc -d myHello -author -version -encoding UTF-8 -charset UTF-8 Test.java

    • cmd中,使用javadoc工具从Java源码中抽离出注释
    • -d创建目录,myHello为目录名
    • -author显示作者
    • -version显示版本号
    • -encoding UTF-8 -charset UTF-8字符集修改为UTF-8

    在这里插入图片描述
    可以看到敲完命令后路径中多了一个叫myHello的目录
    在这里插入图片描述
    点开myHello目录,在这么多文件中找到index.html打开
    在这里插入图片描述
    打开之后就可以看到我们在代码中写的版本、作者,还有构造器、main方法等等
    在这里插入图片描述
    这就是生成的一套以网页文件形式体现的程序说明文档

注意:

  • 多行注释不能嵌套使用
  • 不论是单行还是多行注释,都不参与编译。即编译之后生成的.class文件中不包含注释信息

编码不一致的问题

我们写段代码,作用是在屏幕上打印haha
在这里插入图片描述
编译、运行程序
在这里插入图片描述
接着我们将三种注释分别插入在代码的不同位置中,再保存代码
在这里插入图片描述
我们试着编译这段代码
在这里插入图片描述
问题:我们只是加了一些注释,为什么就报错了呢?
我们再将代码改改:
在这里插入图片描述
此时我们将注释中的中文部分删掉,再编译代码看看
在这里插入图片描述
这时编译却没有报错,所以以上报错是中文问题。
那么为什么加了中文就报错呢?
我们看看报错信息
在这里插入图片描述
这是因为有编码的过程。在记事本上中文是按照UTF8的编码方式编码的。而javac在进行编译的时候,cmd是默认按照GBK的编码方式编码的。
报错的原因就是编码不一致
那么我们就规定编码方式,让编码方式一致:

  • 还原有中文的代码
    在这里插入图片描述
  • 编译这段代码
    在这里插入图片描述
  • 报错就需要用-encoding utf-8这条命令指定编码方式(指定javac编译的时候是以utf-8编码,那么就一致了)完整的命令为javac -encoding utf-8 Test.java
    在这里插入图片描述
    这样以来就可以运行成功

以上都是在cmd中运行Java程序,我们以后写代码是用一个集成开发环境,公司普遍用IntelliJ IDEA

IDEA常用基础开发快捷键

补齐快捷键

  • main方法的快捷键psvm+回车
    在这里插入图片描述
    补齐:
    在这里插入图片描述
  • 打印快捷键sout+回车
    在这里插入图片描述
    补齐:
    在这里插入图片描述
    如果要打印a的话,输入sout+回车,再写上a
    在这里插入图片描述
    也可以a.sout+回车
    在这里插入图片描述
    在这里插入图片描述
  • 循环快捷键fori+回车
    在这里插入图片描述
    补齐:
    在这里插入图片描述

注释快捷键

  • 块注释快捷键:先选中,再按ctr+shift+/
    在这里插入图片描述在这里插入图片描述
    取消块注释也是:先选中,再按ctr+shift+/
    在这里插入图片描述
  • 行注释原本就是//,也可以利用行注释的快捷键:先选中,再ctr+/
    取消行注释也是先选中,再ctr+/
  • 文档注释:写/**+回车在这里插入图片描述
    在这里插入图片描述
    写个/*+回车
    在这里插入图片描述
    在这里插入图片描述

IDEA的基础调式方法

我们先写上一段小代码
在这里插入图片描述
接下来演示基础调试:

  • 打断点。若我们想调试第18行,就在18行的前面点一下就好在这里插入图片描述
    在这里插入图片描述
    取消断点直接点那个小红点就好了

  • 找绿色甲壳虫。
    在这里插入图片描述
    点击进行调试,出现以下这个界面
    在这里插入图片描述
    蓝色阴影部分表示代码执行到了这里,但是这行代码还没执行完,所以我们只能看到args这一个参数,并没有a
    在这里插入图片描述

  • 如果想让它往下走该怎么办呢?
    我们先看这几个按钮:
    在这里插入图片描述
    第一个按钮:一步一步往下走,遇到函数一步执行完,不进入函数内部
    第二个按钮:一步一步往下走,遇到函数可以进入函数内部
    第三个按钮:以我们目前要学习的知识来说,与第二个按钮作用是一样的
    第四个按钮:跳出。若在一个函数内部用这个按钮,则函数后面的代码不再执行,直接跳出函数。

  • 暂停调试就点这个红色的小方块 在这里插入图片描述再将断点取消就好了。


标识符

在上述程序中,Test称为类名、main称为方法名、a称为变量名,也可以将它们称为标识符
标识符就是在程序中由用户给类名,方法名或者变量所取的名字

硬性规则:
标识符由字母、数字、下划线和$(美元符号)组成,但标识符不能以数字开头,也不能是关键字,且严格区分大小写。

通过观察上述程序可以发现,public,class,static等颜色会发生变化,我们将这些具有特殊含义的标识符称为关键字。
关键字是由Java语言提前定义好的,有特殊含义的标识符,或保留字。
注意:main可以用来定义变量名等,但是不建议

软性建议:

  • 类名:每个单词的首字母大写(大驼峰)
  • 方法名:首字母小写,后面每个单词的首字符大写(小驼峰)
  • 变量名:与方法名规则相同
int maxNum=10;//小驼峰

一个大型的工程,是由多名工程师协同开发的,如果每个人都按照自己的方式随意取名,比如:person、
PERSON、Person、_person,将会使程序非常混乱。如果大家在取名时能够遵守一定的约束(即规范),那多人写
除的代码仿佛一个人写的。

相关文章:

JAVA——初识JAVA

文章目录 如何在cmd上编译、运行代码解析String[] args中放的是什么Java结构编译运行可能遇到的错误Java中的注释Java的三种注释编码不一致的问题 IDEA常用基础开发快捷键补齐快捷键注释快捷键 IDEA的基础调式方法标识符 如何在cmd上编译、运行 在没有集成开发环境下&#xff…...

Shell脚本的学习

编写脚本文件 定义以开头:#!/bin/bash #!用来声明脚本由什么shell解释,否则使用默认shel 第一步:编写脚本文件 #!/bin/bash #注释 echo "这是输出" 第二步:加上执行权限:chmod x 脚本文件名.sh 第三步&…...

专题十四:动态路由——OSPF

一、OSPF简介 开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol),采用DIjkstra算法,协议号是89。用于自治系统(A…...

聊聊Spring AI的Multimodality

序 本文主要研究一下Spring AI的Multimodality 示例 chatModel示例 var imageResource new ClassPathResource("/multimodal.test.png");var userMessage new UserMessage("Explain what do you see in this picture?", // contentnew Media(MimeTy…...

区块链点燃游戏行业新未来——技术变革与实践指南

区块链点燃游戏行业新未来——技术变革与实践指南 在数字时代,游戏行业无疑是创新的热土。从简单像素风的街机游戏到沉浸式的虚拟现实,我们见证了技术如何一步步塑造游戏的样貌。然而,在传统游戏模式中,玩家权益往往无法得到保障…...

Cocos Creator Shader入门实战(八):Shader实现圆形、椭圆、菱形等头像

引擎:3.8.5 您好,我是鹤九日! 回顾 Shader的学习是一条漫长的道路。 理论知识的枯燥无味,让很多人选择了放弃。然而不得不说:任何新知识、新领域的学习,本身面临的都是问题! 互联网和AI给了我…...

大模型SFT用chat版还是base版 SFT后灾难性遗忘怎么办

大模型SFT用chat版还是base版 进行 SFT 时,基座模型选用 Chat 还是 Base 模型? 选 Base 还是 Chat 模型,首先先熟悉 Base 和 Chat 是两种不同的大模型,它们在训练数据、应用场景和模型特性上有所区别。 在训练数据方面&#xf…...

【AI论文】VCR-Bench:视频链式思考推理的综合评估框架

摘要:思想链(CoT)推理的进步显著增强了大型语言模型(LLMs)和大型视觉语言模型(LVLMs)的能力。 然而,目前仍然缺乏一个严格的视频CoT推理评估框架。 目前的视频基准测试无法充分评估推…...

数据中台、BI业务访谈(二):组织架构梳理的坑

这是数据中台、BI业务访谈系列的第二篇文章,在上一篇文章中,我重点介绍了在给企业的业务部门、高层管理做业务访谈之前我们要做好行业、业务知识的功课。做好这些功课之后,就到了实际的访谈环节了。 业务访谈关键点 那么在具体业务访谈的时…...

【零基础实战】Ubuntu搭建DVWA漏洞靶场全流程详解(附渗透测试示例)

【零基础实战】Ubuntu搭建DVWA漏洞靶场全流程详解(附渗透测试示例) (声明:实际操作请遵守网络安全法,仅在授权环境进行测试,仅供个人研究) 一、DVWA靶场简介 DVWA(Damn Vulnerable Web Application)是专为网络安全学习者设计的漏洞演练平台,包含SQL注入、XSS、文件…...

库学习04——numpy

一、基本属性 二、 创建数组 (一)arange a np.arange(10,20,2) # [10,12,14,16,18] 只有一个参数n的话,默认是从0到n-1的一维数组。 (二)自定义reshape a np.arange(12).reshape((3,4)) [[ 0 1 2 3][ 4 5 …...

Win10系统安装WSL2-Ubuntu, 并使用VScode开始工作

本教程基于博主当前需要使用 WSL2(Windows Subsystem for Linux 2) 而编写,将自己使用的经过分享给大家。有什么意见建议敬请大家批评指正。此过程需要打开 Microsoft Store 话不多说,立即开始~ 文章目录 1. 检查系统版本2. 启动 WSL 功能3. 安装Ubuntu4…...

SLAM(七)-卡尔曼滤波

SLAM(七)-卡尔曼滤波 一、卡尔曼滤波(KF)二、扩展卡尔曼滤波(EKF)三、误差状态卡尔曼滤波(ESKF) 参考《概率机器人》、《Principles of GNSS,lnertial and Multisensor lntegrated Navigation Systems (Second Edition)》 一、卡尔曼滤波(KF)…...

如何解决DDoS攻击问题 ?—专业解决方案深度分析

本文深入解析DDoS攻击面临的挑战与解决策略,提供了一系列防御技术和实践建议,帮助企业加强其网络安全架构,有效防御DDoS攻击。从攻击的识别、防范措施到应急响应,为网络安全工作者提供了详细的操作指引。 DDoS攻击概览&#xff1a…...

解决 Ubuntu 上 Docker 安装与网络问题:从禁用 IPv6 到配置代理

解决 Ubuntu 上 Docker 安装与网络问题的实践笔记 在 Ubuntu(Noble 版本)上安装 Docker 时,我遇到了两个常见的网络问题:apt-get update 失败和无法拉取 Docker 镜像。通过逐步排查和配置,最终成功运行 docker run he…...

Windows for Redis 后台服务运行

下载 redis 安装包 地址:https://github.com/tporadowski/redis/releases 解压zip压缩包,执行 redis-server.exe 即可以窗口模式运行(窗口关闭则服务关闭) 运行窗口可以看到,端口是 6379 我这里使用 nvaicat 客服端测…...

AMGCL库的Backends及使用示例

AMGCL库的Backends及使用示例 AMGCL是一个用于解决大型稀疏线性方程组的C库,它提供了多种后端(backends)实现,允许用户根据不同的硬件和性能需求选择合适的计算后端。 AMGCL支持的主要Backends 内置Backends: builtin - 默认的纯C实现block - 支持块状…...

【前端】【css】flex布局详解

Flex 布局(Flexible Box Layout,弹性盒子布局)是 CSS3 中的一种布局模式,用于在容器中更高效地分配空间并对齐内容,即使它们的大小是动态未知的。它非常适用于响应式设计。 一、Flex 布局的基本概念 1. 启用 Flex 布局…...

Java面试黄金宝典43

1. 零拷贝技术 零拷贝(Zero - copy)技术是一种高效的数据传输技术,它旨在减少数据在用户空间和内核空间之间的拷贝次数,以此提升系统的数据传输性能。在传统数据传输过程中,数据往往需要多次在用户空间和内核空间之间拷贝,这会消耗大量的 CPU 资源,而零拷贝技术能避免这…...

C语言超详细指针知识(二)

在上一篇有关指针的博客中,我们介绍了指针的基础知识,如:内存与地址,解引用操作符,野指针等,今天我们将更加深入的学习指针的其他知识。 1.指针的使用和传址调用 1.1strlen的模拟实现 库函数strlen的功能是…...

华为机试—最大最小路

题目 对于给定的无向无根树&#xff0c;第 i 个节点上有一个权值 wi​ 。我们定义一条简单路径是好的&#xff0c;当且仅当&#xff1a;路径上的点的点权最小值小于等于 a &#xff0c;路径上的点的点权最大值大于等于 b 。 保证给定的 a<b&#xff0c;你需要计算有多少条简…...

[Linux]从零开始的ARM Linux交叉编译与.so文件链接教程

一、前言 最近在项目需要将C版本的opencv集成到原本的代码中从而进行一些简单的图像处理。但是在这其中遇到了一些问题&#xff0c;首先就是原本的opencv我们需要在x86的架构上进行编译然后将其集成到我们的项目中&#xff0c;这里我们到底应该将opencv编译为x86架构的还是编译…...

【模板】缩点

洛谷p3387 思路: 算法:tarjan算法 根据题意,我们只要找到一个路径,使得最终权重最大即可,首先,根据题目可知,如果一个点在一个环上,那么我们就将这整个环都选上,题目上允许我们能够重复走,因此,我们可以将环缩成点,将环所称点后,就可以转换成树,从没有父节点的结点开始,我们向…...

Rag实现流程

Rag实现流程 目录 Rag实现流程1. 加载问答链代码解释`chain_type="stuff"` 的含义其他 `chain_type` 参数选项及特点1. `map_reduce`2. `refine`3. `map_rerank`示例代码展示不同 `chain_type` 的使用其他参数类型2. 提出问题3. 检索相关文档代码解释其他参数类型4. …...

计算机网络- 传输层安全性

传输层安全性 7. 传输层安全性7.1 传输层安全基础7.1.1 安全需求机密性&#xff08;Confidentiality&#xff09;完整性&#xff08;Integrity&#xff09;真实性&#xff08;Authenticity&#xff09;不可否认性&#xff08;Non-repudiation&#xff09; 7.1.2 常见安全威胁窃…...

常青藤快速选择系统介绍

功能特点 支持多种属性和特性&#xff1a;可依据实体属性&#xff08;如实体类型、图层、颜色、线宽等&#xff09;以及实体特性&#xff08;如直线长度、圆面积、文字内容等&#xff09;进行筛选。多过滤条件与运算符号&#xff1a;支持多个过滤条件组合&#xff0c;基本涵盖实…...

【c语言】指针习题

练习一&#xff1a;使用指针打印数组内容 #include <stdio.h> void print(int* p, int sz) {int i 0;for (i 0; i < sz; i) {printf("%d ", *p);//printf("%d ", *(p i));} } int main() {int arr[] { 1,2,3,4,5,6,7,8,9,10 };int sz sizeof…...

KWDB创作者计划—KWDB认知引擎:数据流动架构与时空感知计算的范式突破

引言&#xff1a;数据智能的第三范式 在数字化转型进入深水区的2025年&#xff0c;企业数据系统正面临三重悖论&#xff1a;数据规模指数级增长与实时决策需求之间的矛盾、多模态数据孤岛与业务连续性要求之间的冲突、静态存储范式与动态场景适配之间的鸿沟。KWDB&#xff08;K…...

Sqoop常用指令

Sqoop&#xff08;SQL-to-Hadoop&#xff09;是一个开源工具&#xff0c;旨在将关系型数据库中的数据导入到Hadoop的HDFS中&#xff0c;或者从HDFS导出到关系型数据库中。以下是一些常用的Sqoop命令&#xff1a; 导入数据到HDFS 1. 基本导入 sqoop import \ --connect jdbc:mys…...

银行业务知识序言

银行业务知识体系全景解析 第一章 金融创新浪潮下的银行业务知识革命 1.1 数字化转型驱动金融业态重构 在区块链、人工智能、物联网等技术的叠加作用下&#xff0c;全球银行业正经历着"服务无形化、流程智能化、风控穿透化"的深刻变革。根据麦肯锡《2023全球银行业…...