文章目录
- java语言概述
- JDK与JRE
- 编写执行过程
- 第一份java代码解读
- 编写
- 编译
- 运行
- 其他
- 注释
- 三种注释方法
- java API文档
- 关键字
- 标识符
- 数据类型
- 基本数据类型
- 自动类型提升规则
- 引用数据类型
- string
- 概述
- String与基本数据类型的变量间的运算
- 运算符
- 键盘录入
- 运行控制语句
- 数组
- 定义与静态初始化
- 数组元素访问
- 动态初始化
- 内存
java语言概述
Java语言是一种跨平台的面向对象编程语言,由Sun Microsystems(后被Oracle收购)于1995年推出。它是一种高性能、健壮、安全、简单易学的编程语言,被广泛用于开发各种类型的应用程序,从桌面应用到企业级服务器应用,再到移动应用和嵌入式系统。
以下是Java语言的主要特点和概述:
- 面向对象:Java是一种纯粹的面向对象编程语言,支持类、对象、封装、继承、多态等面向对象的特性。
- 跨平台性:Java程序可以在不同的操作系统上运行,因为它的编译器将源代码编译成中间代码(字节码),然后在Java虚拟机(JVM)上执行。JVM负责将字节码解释成特定平台的机器码,从而实现跨平台性。
- 健壮性:Java具有严格的数据类型检查、异常处理机制、内存管理和垃圾回收功能,使得程序更加健壮、稳定和可靠。
- 安全性:Java提供了安全性机制,如类加载机制、字节码校验、安全管理器等,可以防止恶意代码对系统造成损害。
JDK与JRE
JDK (Java Development Kit):是Java程序开发工具包,包含JRE和开发人员使用的工具。
JRE(Java Runtime Environment) :是Java程序的运行时环境,包含JVM和运行时所需要的核心类库。
JDK = JRE + 开发工具集(例如 Javac 编译工具等)
JRE = JVM + Java SE 标准类库
编写执行过程
编写:将java代码编写在.java
结尾的源文件中
编译:.java
结尾的源文件进行编译操作。java 原文件名.java
运行:针对编译后的字节码文件,进行解释运行。java 字节码文件名
第一份java代码解读
class HelloChina{
public static void main(String[] args){
System.out.println("HelloChina!!你好呀");
}
}
编写
-
class
关键字,表示“类”,后面跟着类名 -
Java 程序的入口是 main 方法,
public static void main(String[] args)
是Java程序的入口点.写法二:
public static void main(String args[])
-
System.out.println()
用于打印信息到控制台。println
换行print
不换行,相当于最后面加不加\n
-
严格区分大小写
编译
- 编译后生成1个或多个字节码文件,每一个字节码对应一个java类,并且字节码文件与类名相同。
运行
java HelloChina
编译时类名要区分大小写。
其他
- 一个源文件可以有多个类,但最多只有一个类可以使用
public
声明,且要求声明为public
的类的类名源文件名相同
注释
三种注释方法
- 单行注释
//注释文字
-
多行注释
不能嵌套使用
/*
注释文字 1
注释文字 2
注释文字 3
*/
-
文档注释 (Java 特有)
文档注释以 /** 开始,以 */ 结束,通常出现在类、方法、字段等的声明前面,用于生成代码文档,这种注释可以被工具提取并生成 API 文档
文档注释的格式通常包含一些特定的标签,如 @param 用于描述方法参数,@return 用于描述返回值,@throws 用于描述可能抛出的异常等等,这些标签有助于生成清晰的API文档,以便其他开发者能够更好地理解和使用你的代码。
/**
@author 指定 java 程序的作者
@version 指定源文件的版本
*/
在命令行中使用 Javadoc 工具来生成 API 文档。可以通过 JDK 中的 javadoc
命令来执行。通常的格式为:
javadoc [options] [packagenames] [sourcefiles] [@files]
[options]
:Javadoc 的选项,例如-d
指定生成文档的目录,-author
包含作者信息等。[packagenames]
:需要生成文档的包名。[sourcefiles]
:需要生成文档的源文件。[@files]
:包含了其他选项的文本文件。
例如:
javadoc -d doc -author -version MyPackage
这个命令会生成 MyPackage 包中所有类的文档,包括作者信息和版本号,并将文档保存在 doc 目录中。
可以通过浏览器打开 index.html
文件来查看整个文档。
注意:Java 文档注释应该位于类、方法或字段的声明之前。
java API文档
Java API文档是Java编程语言的官方文档,提供了关于Java标准库中各个类、接口、方法的详细信息和使用说明。
Overview (Java SE 17 & JDK 17) (oracle.com)
关键字
Java关键字是一组被Java编程语言保留并用于特定目的的单词。这些关键字具有特殊含义,不能用作标识符(如类名、方法名、变量名等)。
-
48个关键字:abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、int、interface、instanceof、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while。
-
2个保留字:goto、const。
-
3个特殊直接量:true、false、null。
Java的关键字(keyword)有51+2个保留字=53个关键字
- 关键字全是小写字母
标识符
在 Java 中,标识符(Identifier)是用来标识各种编程元素的名称,包括变量、方法、类、接口、包等。Java 的标识符需要遵循以下规则:
- 字符集:标识符可以包含字母(大小写均可)、数字和下划线
_
,但必须以字母、美元符号$
或下划线_
开头。 - 大小写敏感:标识符是区分大小写的,也就是说
myVariable
和MyVariable
是不同的标识符。 - 长度限制:标识符的长度理论上是没有限制的,但实际上应根据编程规范和代码可读性来合理命名,通常建议不要过长。
- 保留字:标识符不能与 Java 的保留字相同,Java 的保留字是被编程语言保留用于特定用途的关键字,例如
if
、else
、while
等。 - 规范命名:标识符应该采用驼峰命名法(Camel Case)或者下划线分隔法(Snake Case)来命名,以提高可读性。驼峰命名法是指除了第一个单词之外,后续单词的首字母大写,例如
myVariableName
;下划线分隔法是指单词之间用下划线_
分隔,例如my_variable_name
。 - 包名约定:包名应该使用小写字母,多个单词之间使用点
.
分隔,例如com.example.package
。 - 类名,接口名:应该使用大写字母开头的大驼峰命名法,例如
MyClass
。 - 变量名,方法名:第二个单词开始每个单词大写的小驼峰命名法。
- 常量名约定:常量名应该使用全部大写字母,并用下划线
_
分隔单词,例如MAX_VALUE
。
数据类型
基本数据类型
- 整型:byte \ short \ int \ long
- 声明
long
类型变量是,需要提供后缀,需要使用后缀L
或者l
。
long myLongVariable = 10000000000L;
- 浮点型: float \ double
- 声明
float
类型的变量时,需要使用后缀F
或者f
。例如:
float myFloatVariable = 3.14F;
- 字符型:char
char
类型表示一个16位的Unicode
字符,它占用2个字节的存储空间。
-
直接’',里面只能一个字符
-
将Unicode编码值赋给
char
类型的变量。在Java中,可以使用\u
前缀来表示Unicode编码值。例如:char myChar = '\u0041'; // 这里的\u0041表示十六进制编码值为41的字符,即'A'
这样,
myChar
变量将被赋值为大写字母’A’。 -
使用转义字符来表示。一些常见的转义字符包括:
\t
: 制表符(Tab)\n
: 换行符(Newline)\r
: 回车符(Carriage return)\'
: 单引号\"
: 双引号\\
: 反斜杠
例如,要表示换行符,可以使用
\n
:char newlineChar = '\n';
-
使用具体字符对应ASCII码值
- 布尔型:boolean
- 在Java中不能使用数字1或0来代替布尔值,与C语言不同。
- 在Java中,布尔类型(
boolean
)的占用空间大小并没有明确定义。
自动类型提升规则
规则:将取值范围小(或容量小)的类型自动提升为取值范围大(或容量大)的类型 。
- 当把存储范围小的值(常量值、变量的值、表达式计算的结果值)赋值给存储范围大的变量时
- 当存储范围小的数据类型与存储范围大的数据类型变量一起混合运算时,会按照其中最大的类型运算
- 当 byte,short,char 数据类型的变量进行算术运算时,按照 int 类型处理。
引用数据类型
- 类(Class)
- 接口(Interface)
- 数组(Array)
string
概述
-
是一种引用数据类型
-
使用“”进行赋值
String myString = "Hello, World!";
-
String声明的字符串可以包含0到多个字符
String与基本数据类型的变量间的运算
- 任意八种基本数据类型的数据与 String 类型只能进行连接“+”运算,且结果一定也是 String 类型
- String 类型不能通过强制类型()转换,转为其他的类型
运算符
与C语言相似,java多了一个>>>
,无符号右移
在C语言中,>>
运算符是算术右移。算术右移是针对有符号整数的右移操作,它会保留符号位,并在左侧用符号位填充空缺位。
在java中,>>
与C一致,对比一下java中>>
与>>>
-
>>
(有符号右移):使用
>>
运算符时,对于正数,它的操作结果与无符号右移>>>
相同。对于负数,则会在左侧用1填充空缺位,>>
右移后会保持负数的符号。 -
>>>
(无符号右移):使用
>>>
运算符时,无论是正数还是负数,都会在左侧用0填充空缺位。>>>
右移操作不保留符号位,因此结果总是正数。
举例:
x = -8
1111 1111 1111 1111 1111 1111 1111 1000
x >>> 1
结果为 0111 1111 1111 1111 1111 1111 1111 1100
,即 2147483644
。
右移后会在左侧用0填充空缺位,结果总是正数
其他注意:
-
结果与被模数符号相同
举例:
5 % -2 = 1
-5 % 2 =-1
-5 % -2 = -1
-
“+”号的两种用法
第一种:对于*+两边都是数值的话,+*就是加法的意思
第二种:对于*+两边至少有一边是字符串的话,+*就是拼接的意思
-
逻辑运算符
-
位运算
键盘录入
Scanner
是Java中的一个类,位于java.util
包中。它主要用于从各种输入源(如键盘、文件等)中获取用户输入的数据。Scanner
类提供了多种方法,可以方便地读取不同类型的数据,例如整数、浮点数、字符串等。
使用scanner获取不同类型的步骤
1. 导包:找到这个类`import java.unti.Scanner`
2. 创建对象:创建一个Scanner类的实例
3. 接收数据:调用Scanner类中的方法,获取指定类型的变量
import java.util.Scanner;
class ScannerDemo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("输入一个数字:");
int i = sc.nextInt();
System.out.println(i);
}
}
运行控制语句
if-else
,Switch
,while
,for
,do-while
基本用法与C语言一致
不同点:
1. **数据类型限制:** 在C语言中,`switch`语句的条件表达式只能是整数类型(`int`、`char`等),而在Java中,条件表达式可以是整数、枚举、字符串等类型。
2. **浮点数支持:** 在C语言中,`switch`语句不支持浮点数类型的条件表达式,而在Java中,`switch`语句可以使用`float`和`double`类型的表达式。
3. **`switch`语句表达式:** 在Java 12及以后的版本中,`switch`语句引入了表达式形式,使得代码更加简洁和灵活。而在C语言中,`switch`语句只能作为语句使用,不能作为表达式。
4. **`switch`语句的`case`标签:** 在Java中,`switch`语句的`case`标签可以使用枚举、字符串和表达式,而在C语言中,`case`标签只能是常量。
对于第三点,简化代码:
语句只有一行,可以省略大括号
import java.util.Scanner;
class SwitchDemo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("输入一个数字:");
int num = sc.nextInt();
switch (num) {
case 1 -> System.out.println("这是1");
case 2 -> System.out.println("这是2");
default -> System.out.println("啥都不是");
}
}
}
import java.util.Scanner;
class SwitchDemo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("输入一个数字:");
int num = sc.nextInt();
switch (num) {
case 1 -> System.out.println("这是1");
case 2 -> System.out.println("这是2");
default -> System.out.println("啥都不是");
}
}
}
数组
数组是一种容器
在Java中,数组是一种用来存储相同类型数据的数据结构。数组可以存储基本数据类型(如整数、浮点数等)或者引用类型(如对象)。
定义与静态初始化
以下是关于Java数组的一些重要特点和用法:
-
声明数组:在Java中声明数组需要指定数组的类型和数组名,语法如下:
// 声明一个整型数组 int[] numbers; // 声明一个字符串数组 String[] names;
-
初始化数组:
完整格式:
数据类型 [ ] 数组名 = new 数据类型 [ ] {元素1, 元素2...};
int[] numbers = new int[] {10, 20, 30, 40, 50};
简化格式:
数据类型 [ ] 数组名 ={元素1, 元素2...};
int[] numbers = {10, 20, 30, 40, 50};
在Java中,直接输出数组名得到数组的引用(地址)
int[] numbers = {1, 2, 3, 4, 5};
System.out.println(numbers); // 输出数组引用
[
:表示这是一个数组。I
:表示数组中元素的数据类型。在这里,I
代表整型(int
)数组。Java 中的其他数据类型对应的标识符有:[B
(字节数组)、[S
(短整型数组)、[J
(长整型数组)、[F
(浮点型数组)、[D
(双精度浮点型数组)、[C
(字符数组)、[Z
(布尔型数组)等。@
:表示分隔符,用于分隔类型标识符和哈希码。5acf9800
:表示数组对象的哈希码,即数组在内存中的地址值的十六进制表示。
数组元素访问
System.out.println("第一个元素:" + numbers[0]);
与C语言一致
动态初始化
数据类型 [ ] 数组名 = new 数据类型 [数组长度] ;
数组默认初始化数值:
- 对于基本数据类型的数组:
byte
,short
,int
,long
: 默认初始化为0。float
,double
: 默认初始化为0.0。char
: 默认初始化为\u0000
,即空字符。boolean
: 默认初始化为false
。
- 对于引用数据类型的数组(如对象数组):
- 默认初始化为
null
,即表示没有指向任何对象。
- 默认初始化为
内存
堆主要用于存储对象和数组,而栈主要用于存储方法调用和局部变量。
对于数组来说:
- 只要是new出来的一定在堆里开辟了一个小空间
- new了多次,就有多个小空间
两个数组指向同一个空间的情况:
array1
和 array2
实际上指向相同的数组对象。因此,当我们通过 array1
修改数组的第一个元素为10时,实际上也修改了数组对象,所以 array2
中的第一个元素也会变为10。
public class Main {
public static void main(String[] args) {
int[] array1 = {1, 2, 3, 4, 5};
int[] array2 = array1; // array2指向array1所指向的数组
// 修改array1的第一个元素
array1[0] = 10;
// 输出array2的第一个元素
System.out.println("array2[0] = " + array2[0]); // 输出为10
}
}
如有错误烦请指正。
感谢您的阅读