Java学习笔记(第一周)
Java 介绍
1995 Java正式命名、1996 Java1.0 正式发布
1999 Java1.2 正式确认了Java语言的发展方向(J2SE, J2EE, J2ME)
2004 Java1.5 正式发布,将发展方向进行更名 (JavaSE, JavaEE, JavaME)
2009 ~ 2010 Oracle 收购了Sun公司,从此Java进入 Oracle 时代
2014 Java8 诞生、Java命名从 1.X 更名为 X
从Java9开始,Oracle公司放弃了传统了版本发布方式,进而采用每间隔半年发布一个大版本
2021 Java17 正式发布,史称 最快的 JDK
Java 发展方向
- J2SE (Java标准平台): 包含了 Java语言需要的基础
- J2EE (Java企业级开发平台): 为企业提供一站式解决方案(WEB开发)
- J2ME (Java移动端): 常用来做 C/S架构 项目开发
JVM , JDK , JRE 名词解释
- JVM : vm指的是虚拟机,jvm(Java虚拟机),运行Java程序的载体
- JDK : Java开发工具包 (为Java开发提供的API)
- JRE : Java运行环境 (为 Java程序的运行提供可靠的运行环境)
Java语言的特点
- 简单性: java语言在学习上比C++更加简单、摒弃了C++中多继承、指针等复杂特性
- 面向对象: java是完全面向对象的语言、以类作为最小的单位,非常注重设计
- 跨平台: java是一门一致性非常强的语言,只需要编译一次、代码可以在任何平台运行,因为 JVM 屏蔽了底层操作系统的差异
- 编译性:java源代码(人编写的可识别代码)编写后、需要进行一次编译、将源代码编译成字节码而非机器码,运行速度非常快
- 安全性:java的程序是运行在JVM中的,所以可以在很大程度上防治恶意代码的入侵,很多企业都会优选Java作为开发语言
- 动态性:Java是一个动态的语言,它的类信息会在JVM加载的时候进行初始化
Java安装
java的编写需要 JDK, java的运行需要 JRE环境, java程序需要在 JVM中运行,所以在操作系统中需要安装Java
安装包的下载
Oracle官网
下载地址: https://download.java.net/openjdk/jdk17/ri/openjdk-17+35_windows-x64_bin.zip
下载的安装包中,只有一个jdk, 那么 jdk 中自身包含 jre
在 jdk 解压到D:\Program Files\Java
配置环境变量
环境变量是为了让操作系统识别某一个程序而进行的配置
- JAVA_HOME : 配置 JDK 的安装路径,主要是为了后期学习的Java程序提供服务,例如tomcat, maven等
- PATH : 配置 Java的 常见命令所在的路径, 目的是为了在命令提示符下可以找到对应的命令
- CLASSPATH : 配置 Java的类路径(字节码文件),为了执行Java程序的时候找到字节码文件, 通常用
.
表示当前位置
JAVA_HOME : D:\Program Files\Java\jdk-17
PATH : %JAVA_HOME%\bin
CLASSPATH : .
%JAVA_HOME%代表引用JAVA_HOME 环境变量的值
计算机(右键) -> 属性 -> 高级系统设置 -> 环境变量
验证是否安装成功
打开命令提示符(WIN + R -> cmd)
输入 javac -version
输入 java -version
Java的第一个应用程序
- javac : 可以对java源代码进行编译、生成字节码文件, 以 .class结尾
- java : 可以运行 java应用程序
- javadoc : 可以生成 java文档
java 入门应用程序
java的最小单位是类, 一个类用 class 关键字 来修饰, class 后面跟 类的名字
{ … } 在 java中表示代码块,用来定义范围, 在 java语言中,推荐{
写在 类的后面,}
写在一个单独的行中,且和{
所在行的行首字符对齐
源代码的文件名后缀 必须是 .java
通过 javac 命令可以 编译 源代码,生成 字节码文件,后缀是.class
一个 class 修饰的类 ,生成一个 对应的字节码文件
一个 class类 如果想要被执行,则类中必须提供一个主方法
主方法的写法是固定的,不能修改, 在编写主方法的时候,要有缩进,按下一个tab
程序可以通过 System.out.println() 语句来输出内容,语句只能出现在方法中, 且语句必须以 ; 结尾
class Hello {
public static void main(String[] args) {
System.out.println("hello world!") ;
}
}
一个源文件中,如果包含 public 修饰的类,那么源文件的文件名必须和 public 修饰的类的名字保持完全相同
一个源文件中 最多 只能有 一个主类
推荐一个源文件中书写一个类、且该类是 public 修饰的类
标识符的命名规范
- 在java应用程序中,标识符通常包含 包名, 类名, 方法名, 变量名
- 标识符 由 字母、数字、下划线、$ 组成,但不能以 数字开头
- 标识符 不能使用 java 关键字
- 包名 推荐使用 全部小写、多个单词也不例外
- 类名 推荐使用 大驼峰命名法 (每一个单词的首字母均大写)
- 方法名/变量名 推荐使用 小驼峰命名法 (首字母小写、其他每个单词的首字母大写)
- 标识符在命名的时候,最好做到
望文知意
1,2是java的语法,3,4,5开发人员的习惯
注释
对代码进行解释、说明、让代码可读性更强
//
单行注释:对一行代码进行解释说明,通常会写在需要被注释的代码上方,或者右后方/* ... */
多行注释: 可以同时对多行内容添加注释,一般写在被注释的代码上方/** ... */
文档注释: 通常可以对 类、方法、属性进行解释说明,用来生成API文档
多行/文档注释不能嵌套多行/文档注释
编译代码
- javac [options] 源文件
-encoding : 设置源码的编码方式
-d : 设置字节码存储的位置
以 utf-8 编码对源文件进行编译
javac -encoding utf-8 Hello.java
运行代码
从指定的类路径下查找对应的类
java --class-path <path> 类
生成 java 文档
javadoc -encoding utf-8 -d .\doc Hello.java
Java中的数据类型
- 基本数据类型
- 引用数据类型
基本数据类型
Java提供了原始的8种数据类型,用来快速处理数据
分别是 byte , short , int , long , float, double, char , boolean
也可以简单的分为 数字类型、 字符类型、 布尔类型
数字类型分为 整数 和 小数
整数包含四种数据类型 byte , short , int , long
byte在存储数据的时候,占用1个字节、1B = 8位(bit)
short在存储数据的时候,占用2个字节 16bit
int在存储数据的时候,占用 4个字节 32bit
long 在存储数据的时候,占用 8个字节 64bit
在计算机中,二进制在表示数字的时候,最高位是符号位 0代表正数,1代表负数
正数的补码和原码相同、负数的补码等于原码取反 + 1
小数包含两种数据类型 float(单精度) , double (双精度)
float 占用 4个字节 、 double 占用 8个字节
char 代表 字符类型 、占用 2个字节, 取值范围 0 ~ 65535
boolean 代表 真、假, 只有两个值 true (真), false (假)
boolean是非常常用的数据类型,一般用来做判断使用
byte的最大值用二进制表示是: 0111 1111 = 2 ^ 7 - 1 = 127
byte的最小值用二进制表示是:1000 0000 = -128
byte 取值范围是 -128 ~ 127
short 的取值范围是 -2^15 ~ 2^15 - 1
int的取值范围是 -2^31 ~ 2^31 - 1
long的取值范围是 -2^63 ~ 2^63 - 1
2 ----> 10
3 ----> 11
4 ----> 100
5 ----> 101
6 ----> 110
7 ----> 111 ---> 2^0 + 2^1 + 2^2 ---> 2^3 - 1 = 7
8 ----> 1000
二进制转十进制的算法是 : 1000 ---> 0 * 2^0 + 0 * 2^1 + 0 * 2^2 + 1 * 2^3 = 8
1000 0000 ---> 取反 ---> 0111 1111 ---> 加1 ---> 1000 0000 ---> -2^7 = -128
变量
变量名是Java中的标识符、遵循标识符的命名规范,采用小驼峰命名法
是计算机中用来存储数据的标识
变量的声明方式语法 : 数据类型 变量名 ;
给变量赋值 : 变量 = 值 ;
局部变量
在方法中声明的变量就是 局部变量
- 局部变量 必须 赋初值后才能使用
- 局部变量 在 相同作用范围下 不能 重复声明
- 局部变量的作用范围是指 从 变量声明开始到离他最近的代码块结束有效
赋值
在 Java中,使用
=
进行赋值运算,先计算=
右边的内容,在将计算的结果赋值给变量
- 整数的字面量默认类型是 int
- 小数的字面量默认类型是 double
类型转换
- 自动类型转换
字面量赋值给一个变量的时候,如果字面量的值在变量类型的取值范围内,会自动转换类型
从低类型到高类型 会自动类型转换
- 强制类型转换
从高类型到低类型、需要强制类型转换
强制类型转换语法: (type)val
整数表示法
- 0B1010 二进制表示法
- 0134 八进制表示法
- 0X12 16进制表示法
- 12 10进制表示法
小数
float 在定义字面量值得时候,主要添加 F/f
字符表示法
char a = 'a'
char a = 97
char a = '\u0061'
Java常见的运算符
- 算术运算符
- 赋值运算符
- 一元运算符
- 关系运算符
- 逻辑运算符
- 位运算符
- 位移运算符
- 三元运算
算术运算符
+(加) 、 -(减) 、 *(乘) 、 /(除)、%(求余)
算术运算规则
两个数字 做 算术运算的时候,满足以下规则
如果两个数中有 double 类型,结果一定是 double 类型
如果两个数中有 float 类型,结果一定是 float 类型
如果两个数中有 long 类型, 结果一定是 long 类型
其他情况 均为 int
赋值运算符
= (赋值)、 += 、 -=、 *= 、 /= 、%=
赋值运算符(除=) 不会提升变量的数据类型
一元运算符
a++ a--
++a --a
a++ 或者 ++a 都可以即作为 语句,也可以作为表达式来使用
a++ : 先计算 a++ 表达式的值,表达式的值等于a的值, 再对a自增1
++a : 先对 a 自增1, 在计算 ++a 表达式的值, 表达式的值等于a的值
int a = 5 ;
int b = (a--) + (--a) + (a--)
关系运算符
> , >= , < , <= , == , !=
关系运算符是一个表达式、返回的结果是 boolean 类型
关系运算符常用来做条件判断
6 > a > 3 (语法错误的), a > 3, a < 6
逻辑运算符
&& (逻辑与) , || (逻辑或) , !(逻辑非)
& (逻辑与) , | (逻辑或)
逻辑运算符是一个表达式、返回的结果是 boolean 类型
逻辑运算符常用来做条件判断
a > 3 && a < 6 (正确写法)
&&
和||
会产生短路现象,&
和|
不会产生短路
&&
:一假即假, 当第一个表达式为假的时候,那么第二个表达式不参与运算
||
: 一真即真, 当第一个表达式为真的时候,那么第二个表达式不参与运算
通常推荐使用&&
和||
位运算符
位运算只能应用于整数类型
主要是通过二进制进行运算的
位运算的运算速度是最高效的
& (位与) , | (位或) , ~ (位非) , ^ (异或)
在位运算中,我们可以简单的把 1 理解为 true , 0 理解为 假
&
: 相同位 如果有 0 ,结果为 0 ,否则 为 1
|
: 相同位 如果有 1 ,结果为 1 ,否则 为 0
^
: 相同位 不同结果为 1 , 否则 为 0
~
: 按位取反,原来是 1 变为 0 ,原来是 0 变为 1
位移运算符
位移运算只能应用于整数类型
主要是通过二进制进行运算的
位移运算的运算速度是最高效的
<< (左移) , >> (右移), >>> (无符号右移)
5
0000 0000 0000 0000 0000 0000 0000 0101
-4
1111 1111 1111 1111 1111 1111 1111 1100
左移: 一个数的二进制向左边移动指定位数、在低位补 0
右移:一个数的二进制向右边移动指定位数、在高位正数补 0,负数补 1
无符号右移: 一个数的二进制向右边移动指定位数、在高位补 0