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.class的CLASS文件。
这个CLASS文件是(二进制的)字节码文件,通过javac将Test.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[] args是main的参数,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上编译、运行 在没有集成开发环境下ÿ…...
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 是两种不同的大模型,它们在训练数据、应用场景和模型特性上有所区别。 在训练数据方面…...
【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攻击概览:…...
解决 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的功能是…...
华为机试—最大最小路
题目 对于给定的无向无根树,第 i 个节点上有一个权值 wi 。我们定义一条简单路径是好的,当且仅当:路径上的点的点权最小值小于等于 a ,路径上的点的点权最大值大于等于 b 。 保证给定的 a<b,你需要计算有多少条简…...
[Linux]从零开始的ARM Linux交叉编译与.so文件链接教程
一、前言 最近在项目需要将C版本的opencv集成到原本的代码中从而进行一些简单的图像处理。但是在这其中遇到了一些问题,首先就是原本的opencv我们需要在x86的架构上进行编译然后将其集成到我们的项目中,这里我们到底应该将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 安全需求机密性(Confidentiality)完整性(Integrity)真实性(Authenticity)不可否认性(Non-repudiation) 7.1.2 常见安全威胁窃…...
常青藤快速选择系统介绍
功能特点 支持多种属性和特性:可依据实体属性(如实体类型、图层、颜色、线宽等)以及实体特性(如直线长度、圆面积、文字内容等)进行筛选。多过滤条件与运算符号:支持多个过滤条件组合,基本涵盖实…...
【c语言】指针习题
练习一:使用指针打印数组内容 #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认知引擎:数据流动架构与时空感知计算的范式突破
引言:数据智能的第三范式 在数字化转型进入深水区的2025年,企业数据系统正面临三重悖论:数据规模指数级增长与实时决策需求之间的矛盾、多模态数据孤岛与业务连续性要求之间的冲突、静态存储范式与动态场景适配之间的鸿沟。KWDB(K…...
Sqoop常用指令
Sqoop(SQL-to-Hadoop)是一个开源工具,旨在将关系型数据库中的数据导入到Hadoop的HDFS中,或者从HDFS导出到关系型数据库中。以下是一些常用的Sqoop命令: 导入数据到HDFS 1. 基本导入 sqoop import \ --connect jdbc:mys…...
银行业务知识序言
银行业务知识体系全景解析 第一章 金融创新浪潮下的银行业务知识革命 1.1 数字化转型驱动金融业态重构 在区块链、人工智能、物联网等技术的叠加作用下,全球银行业正经历着"服务无形化、流程智能化、风控穿透化"的深刻变革。根据麦肯锡《2023全球银行业…...
