HelloWorld
1 创建一个以java
为后缀名的文件
编写代码
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
其中,psvm
是下述代码的缩写:
public static void main(String[] args)
sout
是下述代码的缩写:
System.out.println();
2 然后在终端运行Hello.java
文件,进行Java源代码到Java字节码文件的编译过程:
javac Hello.java
这个过程包括词法分析、语法分析、语义分析和最终的字节码生成。
如果编译成功,将会生成与每个类对应的.class
文件,这些文件包含了Java程序的字节码表示。
3 最后在终端运行生成的Hello程序:
java Hello
当运行java Hello
时,实际上在启动Java虚拟机(JVM),并告诉它要运行名为Hello
的Java程序。
具体来说,java
命令用于启动Java应用程序。当你提供类名(不包括.class
扩展名)作为参数时,Java虚拟机会尝试加载这个类,并执行它的main
方法。在这种情况下,假设Hello
是一个包含main
方法的类,JVM将加载这个类并执行main
方法。
注意,Hello.java
文件里的类名要和文件名称保持一致(都是Hello)。
Java程序的运行机制
编译型程序在运行前需要将源代码一次性翻译成机器语言(C、C++),而解释型程序在运行时逐行或逐段地翻译并执行源代码(Python)。
Java通常被描述为一种同时具备编译型和解释型特性的语言。
这是因为Java源代码首先被编译成中间代码(字节码 .class
文件)——编译型
但是,.class
文件并不能直接运行在操作系统上,需要在Java虚拟机(JVM)上解释为二进制代码执行——解释型
Java程序的运行机制
-
编写程序:首先,程序员使用文本编辑器编写Java源代码文件,通常以
.java
为扩展名。 -
编译:使用
javac
命令对Java源代码进行编译,将其转换为字节码文件(.class
文件),这个阶段会进行词法分析、语法分析、语义分析和最终的字节码生成。 -
解释与执行:Java程序的字节码文件被Java虚拟机(JVM)解释执行。JVM将字节码文件加载到内存中,逐行或逐段地解释执行,并在特定平台上运行程序。
这个过程使得Java具有跨平台的特性,因为字节码文件可以在任何安装了Java虚拟机的平台上运行。
当然,这并不是Java程序运行机制的全部,还有类加载、垃圾回收等诸多细节,但总的来说,这三个阶段构成了Java程序的运行机制。
注释
Java的三种注释:
- 单行注释
- 多行注释
- 文档注释
标识符
- 组成:标识符可以由字母、数字、下划线(_)和美元符号($)组成。
- 首字符:标识符的首字符必须是字母、下划线(_)或美元符号($)。
- 大小写敏感:Java是大小写敏感的语言,因此大写字母和小写字母被视为不同的字符。
- 长度:标识符的长度没有限制,但只有前面的字符会被编译器处理,后面的字符会被忽略。
- 关键字:不能使用Java的关键字作为标识符。例如,
int
、class
等都是Java的关键字,不能用作标识符。
合法示例:myVariable
、MAX_VALUE
、_count
、$value
都是合法的标识符。
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。
3个特殊直接量:true、false、null。
2个保留字:goto、const。
数据类型
在计算机编程中,"强类型"和"弱类型"是描述编程语言类型系统的术语。
强类型语言:
在强类型语言中,变量必须严格符合其声明的类型,不允许隐式类型转换。这意味着在使用变量之前,必须明确地定义其类型,并且在不同类型之间的转换通常需要显式的转换操作。强类型语言可以更早地发现一些潜在的类型错误,从而提高了程序的安全性和可靠性。Java和C#是典型的强类型语言。
弱类型语言:
在弱类型语言中,变量可以被隐式地转换为其他类型,甚至在不同类型之间进行混合运算,而不需要显式的类型转换。这种灵活性可能会导致一些意外的行为,因为编译器或解释器会尝试隐式地转换变量的类型以适应上下文。弱类型语言通常更灵活,但也更容易出现类型相关的错误。JavaScript和PHP是典型的弱类型语言。
Java数据类型分类
- 基本类型(primitive type)
- 数值类型
- 整数类型 byte(1个字节)、short(2个字节)、int(4个字节)、long(8个字节)
- 浮点类型 float(4个字节)、double(8个字节)
- 字符类型 char(2个字节)
- boolean类型
- 数值类型
- 引用类型
- 类
- 接口
- 数组
整数拓展:
不同进制表示
浮点数拓展:
这里判断的是类型,因此返回false
。
因此最好完全避免使用浮点数进行比较!最好完全避免使用浮点数进行比较!最好完全避免使用浮点数进行比较!
银行业务可以使用BigDecimal
数学工具类。
字符拓展:
所有字符的本质还是数字
Unicode编码占2个字节,0-65536,用十六进制表示。
字符串:
对于s1
和s2
,由于它们都使用字符串字面值创建,因此它们指向的是相同的字符串对象,所以s1 == s2
的结果是true
。
而对于s3
和s4
,虽然它们的内容相同,但是使用new String()
创建的对象会在堆内存中每次都创建一个新的对象,所以s3 == s4
的结果是false
。
第一种方式使用字符串字面值创建字符串对象,它会利用Java的字符串池来重用字符串对象,从而节省内存并提高性能,因此推荐第一种方式,而第二种方式会创建一个新的字符串对象,即使字符串池中已经存在相同内容的字符串。
类型转换
Java是强类型语言,因此不同类型的数据需要转换至同一类型再进行运算。
- 强制转换
(类型)变量名
转换等级是从高等级转换为低等级
需要注意的是,强制类型转换可能会导致数据丢失或溢出(精度问题和内存溢出),因此在进行强制类型转换时应格外小心。
int a = 1000;
byte b = (byte) a;
System.out.println(b);
- 自动转换 转换等级是从低等级转换为高等级
在操作比较大的数的时候,注意溢出问题。
JDK7新特性:数字之间可以使用下划线进行分割。
变量
Java是一种强类型语言,每个变量都必须先声明其类型
type varName [= value];
可以使用逗号隔开声明多个同类型的变量。
变量作用域
- 类变量
需要使用static
声明,可以在类中使用。 - 实例变量
从属于对象,如果不自行初始化,默认值为0 0.0 false null
在使用new
实例化一个对象之后才能调用(实例方法也是需要通过对象来调用)。 - 局部变量
必须声明和初始化
常量
final name = value;
final double PI = 3.14;
常量名通常使用大写字母。
变量命名规范
- 使用有意义的名称
- 类成员变量:驼峰命名法,例如
monthSalary
- 局部变量:小写字母和驼峰原则
- 常量:大写字母和下划线,例如
MAX_VALUE
- 类名:首字母大写和驼峰原则,例如
DemoRun()
运算符
算数运算符
+ - * / % ++ --
赋值运算符
= += -= *= /=
关系运算符
> < >= <= == != instanceof
逻辑运算符
&& || !
位运算符
& | ^(异或) ~ <<(*2) >>(/2) >>>
条件运算符
? :
优先级
- 一元运算符(例如取反运算符
-
、逻辑非!
) - 乘法和除法运算符(
*
、/
、%
) - 加法和减法运算符(
+
、-
) - 移位运算符(
<<
、>>
、>>>
) - 关系运算符(
<
、<=
、>
、>=
、instanceof
) - 相等运算符(
==
、!=
) - 位与运算符
&
- 位异或运算符
^
- 位或运算符
|
- 逻辑与运算符
&&
- 逻辑或运算符
||
- 条件运算符
? :
- 赋值运算符(例如赋值
=
、复合赋值+=
、-=
等) - 逗号运算符
,
包机制
在Java中,包(Package)是用来组织类和接口的命名空间的机制。它们被用来避免命名冲突,并且可以在逻辑上组织类和接口。
包的声明
在Java源文件的开头,可以使用 package
声明来指定该文件中的类所属的包。
package com.example.myapp;
一般使用公司域名倒置作为包名。
包的作用
- 命名空间管理:包可以防止类名冲突,因为不同的包可以包含同名的类。
- 访问控制:可以使用包来限制对类的访问,通过使用访问修饰符(
public
、protected
、private
)。 - 组织管理:包可以帮助组织类和接口,使得项目更易于维护和管理。
包的导入
在Java中,使用 import
语句可以导入其他包中的类,以便在当前类中使用。
import java.util.ArrayList;
package
语句放在import
语句前面。
Java Doc
-
使用IDEA自动生成帮助文档
https://blog.csdn.net/Sunny_tx/article/details/129971282
-
终端命令生成
javadoc -encoding UTF-8 -charset UTF-8 Doc.java
补充材料:
JDK8帮助文档
阿里巴巴开发手册博客