Java基础知识点

93 阅读8分钟

Java

1. Java简介

1.1 概述

Java 语言是美国 Sun 公司(Stanford University Network)在 1995 年推出的计算机语言。

Java 之父:詹姆斯·高斯林(James Gosling)。

1.2 Java 语言的三个版本

  • Java SE:: Java 语言的(标准版),用于桌面应用的开发,是其他两个版本的基础
  • Java ME:Java 语言的(小型版),用于嵌入式消费类电子设备
  • Java EE:Java 语言的(企业版),用于 Web 方向的网站开发。

1.3 Java 程序开发的三个步骤

  • 编写代码
  • 编译代码
  • 运行代码

1.4 Java语言发展史

image-20230424181824720

1.5 记事本开发helloworld

  • 新建文本文档文件,修改名称为HelloWorld.java
  • 用记事本打开HelloWorld.java文件,输写程序内容

image-20230424182820614

  • 打开命令提示符窗口,进入到HelloWorld.java所在的目录,输入指令编译和执行.
# 编译
javac HelloWorld.java
# 运行
java HelloWorld

2. 基础语法

2.1 流程控制

2.1.1 顺序结构

2.1.2 循环结构

特征:

  • 初始化语句
  • 条件判断语句
  • 循环体语句
  • 条件控制语句
2.1.2.1 for循环(明确循环次数)

格式

for (初始化语句;条件判断语句;条件控制语句) {
    //循环体语句;
}
2.1.2.2 while循环(循环次数不明确)

格式

//初始化语句;
while (条件判断语句) {    
    //循环体语句;
    //条件控制语句;
}
2.1.2.3 do...while循环(先执行一次)

格式

初始化语句;
do {
循环体语句;
条件控制语句;
}while(条件判断语句);

2.1.3 跳转控制语句

2.1.3.1 continue

用在循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次的执行

2.1.3.2 break

用在循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环

2.1.4 分支结构

2.1.4.1 if语句

格式

if (关系表达式) {
    //语句体;  
}
if (关系表达式) {
    //语句体1; 
} else {
    //语句体2; 
}
if (判断条件1) {
    //语句体1; 
} else if (判断条件2) {
    //语句体2; 
} 
…
else {
    //语句体n+1;
}
2.1.4.2 switch语句

格式

switch(表达式) {
case1//语句体1;
        break;
case2//语句体2;
        break;
        …
default//语句体n+1;
        [break;]
}

注意事项

表达式:(将要匹配的值) 取值为byte、short、int、char,JDK5以后可以是枚举,JDK7以后可以是String。

case:后面跟的是要和表达式进行比较的值 (被匹配的值)。

break:表示中断,结束的意思,用来结束switch语句。

default:表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。

2.2 运算符

2.2.1 算数运算符

  • /
  • %
  • ++ :自增(前置、后置)
  • --:自减(前置、后置)

2.2.2 赋值运算符

  • =
  • +=
  • -=
  • *=
  • /=
  • %=

注意事项:

扩展的赋值运算符隐含了强制类型转换

2.2.3 关系运算符(比较运算符)

  • ==
  • !=
  • >
  • >=
  • <
  • <=

注意事项:

关系运算符的结果都是boolean类型,要么是true,要么是false。

千万不要把“==”误写成“=”。

2.2.4 逻辑运算符

  • &
  • |
  • !
  • ^:异或
  • && :短路与,左边为假,右边不执行
  • || :短路或,左边为真,右边不执行

2.2.5 三元运算符

格式

关系表达式 ? 表达式1 : 表达式2;

计算规则

首先计算关系表达式的值

如果值为true表达式1的值就是运算结果

如果值为false表达式2的值就是运算结果

2.3 数组

数组(array)是一种容器,用来存储同种数据类型的多个值。

2.3.1 一维数组

格式

格式一:数据类型 [ ] 变量名

范例:int[ ] array

格式二:数据类型 变量名[ ]

范例:int array[ ]

动态初始化

初始化时只指定数组长度,由系统为数组分配初始值

格式:数据类型 [ ] 变量名 = new 数据类型[数组长度];

范例: int [ ] arr = new int[3];

静态初始化

初始化时,就可以指定数组要存储的元素,系统还会自动计算出该数组长度

格式:数据类型 [ ] 变量名 = new 数据类型[ ] { 数据1 , 数据2 , 数据3 , ……} ;

范例: int [ ] arr = new int[ ] { 1 , 2 , 3 } ;

简化格式:数据类型 [ ] 变量名 = { 数据1 , 数据2 , 数据3 , ……} ;

范例: int [ ] arr = { 1 , 2 , 3 } ;

注意

打印数组变量名,出现的是数组在内存中的地址值

数组元素访问

数组内存地址的访问方式

格式:数组名

数组内部保存的数据的访问方式

格式:数组名[索引]

索引:从0开始

2.3.2 二维数组

格式

格式1:数据类型 [ ] [ ] 变量名;

格式2:数据类型 变量名[ ] [ ];

格式3:数据类型[ ] 变量名[ ];

动态初始化

数据类型 [ ] [ ] 变量名 = new 数据类型[ m ] [ n ];

静态初始化

数据类型 [ ] [ ] 变量名 = new 数据类型[ ] [ ] { {元素1,元素2}, {元素1, 元素2} };

数据类型 [ ] [ ] 变量名 = { {元素1,元素2}, {元素1, 元素2} };

2.3.3 数组常见操作

遍历

int[] arr = {……};
for(int i=0; i<arr.length; x++) {  
    arr[i]   //对arr[i]进行操作
}

获取数组元素数量

格式:数组名.length

获取最值

数组元素求和

查找

2.4 方法

一段具有独立功能的代码块,不调用就不执行

可以提高代码的复用性

2.4.1 方法定义

格式

public [static] [final] 返回值 方法名 (参数1.参数2,...参数n ) {
    //方法体
}

形参和实参

形参:全称形式参数,是指方法定义中的参数

实参:全称实际参数,方法调用中的参数

注意事项

  • 方法不能嵌套定义
  • 方法的返回值类型为void,表示该方法没有返回值,没有返回值的方法可以省略return语句不写
  • 如果要编写return,后面不能跟具体的数据。
  • return语句下面,不能编写代码,因为永远执行不到,属于无效的代码

2.4.2 方法调用

方法名(实参1,...实参n);

方法必须先定义后调用,否则程序将报错

方法调用过程

方法没有被调用的时候,都在方法区中的字节码文件(.class)中存储

方法被调用的时候,需要进入到栈内存中运行

2.5 进制

二进制,八进制,十进制,十六进制

计算机数据在底层运算的时候,都是以二进制形式

十进制:Java中,数值默认都是10进制,不需要加任何修饰。

二进制:数值前面以0b开头,b大小写都可以。

八进制:数值前面以0开头。

十六进制:数值前面以0x开头,x大小写都可以。

2.5.1 位运算符

image-20230424231407397

一个数,被另外一个数,异或两次,该数本身不变。

9. 常见问题

9.1 Java 跨平台原理

平台:指的是操作系统。

  • Windows
  • Mac
  • Linux

跨平台:Java 程序可以在任意操作系统上运行。

原理:在不同操作系统上安装不同版本的jvm,jvm将Java字节码文件翻译成对应的机器码文件并运行

注意事项:JVM 虚拟机本身不允许跨平台,允许跨平台的是 Java 程序

9.2 JDK、JRE、JVM

9.2.1 JDK

Java Develop Kit是Java语言的软件开发工具包,内部包含了代码的编译工具运行工具

9.2.2 JRE

Java Runtime Environment 缩写,指Java运行环境,包含 JVM 虚拟机Java 核心类库

9.2.3 JVM

java虚拟机,代码需要运行在 JVM 当中。

9.2.4 JDK、JRE、JVM作用

  1. 编写代码的过程中,需要使用 JRE 中 Java 已经写好的代码。
  2. 编译代码的过程中,需要使用 JDK 中的翻译工具。
  3. 运行代码的过程中,需要使用 JDK 中的运行工具。
  4. 代码需要运行在 JVM 当中

9.2.5 JDK、JRE、JVM之间关系

image-20230424181658412

9.3 JDK 的下载

通过官方网站获取 JDK

www.oracle.com

注意:针对不同操作系统,下载对应的 JDK

9.3.1 配置 Path 环境变量

  • 新增系统变量JAVA_HOME
  • 在path中添加 %JAVA_HOME%\bin
  • 打开命令行,输入javac检查结果

9.4 JDK安装目录

image-20230424182354369

9.5 Notepad软件安装

  • 按照提示一步步来
  • 设置 --- 首选项 --- 默认语言设置为Java --- 编码设置为ANSI

9.6 ASCII码表

ASCII (American Standard Code for Information Interchange):美国信息交换标准代码

是计算机中字节到字符的一套对应关系。

  • ‘a’--- 97
  • ‘A’--- 65
  • ‘0’--- 48

9.7 基本数据类型提升

数据类型从高到低

double - float - long - int - (byte、char、short)

9.8 Java中内存分配

栈内存:方法运行时,进入的内存,局部变量都存放于这块内存当中

堆内存:new出来的内容都会进入堆内存,并且会存在地址值

方法区:字节码文件(.class文件)加载时进入的内存

本地方法栈:调用操作系统相关资源

寄存器:交给CPU去使用

9.9 各数据类型默认值

image-20230424221534562

9.10 数组操作的两个常见小问题

9.10.1 索引越界

访问了数组中不存在的索引,造成索引越界问题

9.10.2 空指针异常

访问的数组已经不再指向堆内存的数据,造成空指针异常

image-20230424221751017

9.11 方法重载

9.11.1 概述

同一个类中,定义了多个同名的方法,但每个方法具有不同的参数类型参数个数顺序不同(不建议),这些同名的方法,就构成了重载关系

注意:识别方法之间是否是重载关系,只看方法名和参数,跟返回值无关。