JavaSE基础


JavaSE基础

f0f30996658f45427a3c7ee6d36c24e6

JavaSE基础1 Java环境配置1.1 安装JDK1.2 配置环境变量2 基础语法2.1 Helloworld编写2.2 IDEA使用2.3 基本知识2.4 注释,标识符,关键字2.5 数据类型2.6 类型转换2.7 常量2.8 变量2.9 运算符2.10 扫描器3 流程控制3.1 条件语句3.2 循环语句3.3 流程控制综合4 数组4.1 数组创建4.2 二维数组4.3 Arrays类4.4 稀疏数组4.5 冒泡排序5 String类5.1 创建字符串5.2 String 方法6 方法6.1 方法创建6.2 方法重载6.3 命令行传参6.4 可变参数6.5 递归7 对象与类7.1 对象和类7.2 构造器7.3 创建对象7.4 访问对象属性与方法7.5 封装7.6 继承7.7 多态7.8 抽象类7.9 接口8 异常处理8.1 异常概述8.2 捕获异常8.3 抛出异常8.4 自定义异常

JavaSE基础

1 Java环境配置

1.1 安装JDK

推荐安装JDK1.8(JDK8)广泛使用

打开cmd,输入以下命令,查看是否安装成功

java -version

1.2 配置环境变量

配置环境变量路径:此电脑→属性→高级系统设置→环境变量

Untitled

1.配置JAVA_HOME

配置为JDK的安装路径

323232331

2.配置Path

1121323131

2 基础语法

2.1 Helloworld编写

使用Notepad++编写代码

xxxxxxxxxx
512345

在当前目录下使用CMD对代码进行编译,命令如下:

xxxxxxxxxx
11

编译完成,生成Hello.class,使用CMD运行,命令如下:

xxxxxxxxxx
11

2.2 IDEA使用

打开IDEA创建项目

idea1

选择New Project新建项目

idea2

创建好的项目文件

  • public static void main 联想输入psvm
  • System.out.prinfln 联想输入sout

快速补全代码

idea3

xxxxxxxxxx
812345678

2.3 基本知识

接着之前写的Helloworld,解释其中字串的含义:

xxxxxxxxxx
512345

1213133132

  • 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hellohello 是不同的。
  • 类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass 。
  • 方法名:所有的方法名都应该以小写字母开头。如果方法名含有若干单词,则后面的每个单词首字母大写。
  • 源文件名:源文件名必须和类名相同。当保存文件的时候,你应该使用类名作为文件名保存(切记 Java 是大小写敏感的),文件名的后缀为 .java。(如果文件名和类名不相同则会导致编译错误)。
  • 主方法入口:所有的 Java 程序由 public static void main(String[] args) 方法开始执行。

2.4 注释,标识符,关键字

1)注释

xxxxxxxxxx
111234567891011

2)Java 关键字

下面列出了 Java 关键字。这些保留字不能用于常量、变量、和任何标识符的名称。

关键字类别说明
private访问控制私有
public访问控制公有
protected访问控制保护
default访问控制默认
abstract类,方法,变量修饰符声明抽象
class类,方法,变量修饰符
extends类,方法,变量修饰符继承

3)Java修饰符

像其他语言一样,Java可以使用修饰符来修饰类中方法和属性。主要有两类修饰符:

  • 访问控制修饰符 : default, public , protected, private
  • 非访问控制修饰符 : final, abstract, static, synchronized

2.5 数据类型

java基本的数据类型如下:

名称大小
byte1byte
short2byte
int4byte
long8byte
float4byte
double8byte
boolean1or4byte
char2byte

2.6 类型转换

数据类型转换必须满足如下规则:

    1. 不能对boolean类型进行类型转换。
    1. 不能把对象类型转换成不相关类的对象。
    1. 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。
    1. 转换过程中可能导致溢出或损失精度,例如:
    xxxxxxxxxx
    212

    因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。

    1. 浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:
    xxxxxxxxxx
    212

2.7 常量

常量定义:常量在程序运行时是不能被修改的。

在 Java 中使用 final 关键字来修饰常量,声明方式和变量类似:

xxxxxxxxxx
11

字面常量:虽然常量名也可以用小写,但为了便于识别,通常使用大写字母表示常量。

字面量可以赋给任何内置类型的变量。例如:

xxxxxxxxxx
212

进制表示:byte、int、long、和short都可以用十进制、16进制以及8进制的方式来表示。

当使用字面量的时候,前缀 0 表示 8 进制,而前缀 0x 代表 16 进制, 例如:

xxxxxxxxxx
3123

字符串常量:和其他语言一样,Java的字符串常量也是包含在两个引号之间的字符序列。下面是字符串型字面量的例子:

xxxxxxxxxx
3123

Unicode字符:字符串常量和字符常量都可以包含任何Unicode字符。例如:

xxxxxxxxxx
212

2.8 变量

变量声明

在Java语言中,所有的变量在使用前必须声明。声明变量的基本格式如下:

xxxxxxxxxx
71234567

变量类型(作用域)

Java语言支持的变量类型有:

  • 类变量:独立于方法之外的变量,用 static 修饰。
  • 实例变量:独立于方法之外的变量,不过没有 static 修饰。
  • 局部变量:类的方法中的变量。
xxxxxxxxxx
71234567

局部变量

  • 局部变量声明在方法、构造方法或者语句块中
  • 局部变量在方法、构造方法、或者语句块被执行的时候创建,当它们执行完成后,变量将会被销毁
  • 访问修饰符不能用于局部变量;
  • 局部变量只在声明它的方法、构造方法或者语句块中可见
  • 局部变量是在栈上分配的。
  • 局部变量没有默认值,所以局部变量被声明后,必须经过初始化,才可以使用。

实例变量

  • 实例变量声明在一个类中,但在方法、构造方法和语句块之外
  • 当一个对象被实例化之后,每个实例变量的值就跟着确定
  • 实例变量在对象创建的时候创建,在对象被销毁的时候销毁,通过new创建的分配在堆区;
  • 实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息;
  • 实例变量可以声明在使用或者使用
  • 访问修饰符可以修饰实例变量(public,private);
  • 实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见;
  • 实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定;
  • 实例变量可以直接通过变量名访问。但在静态方法以及其他类中,就应该使用完全限定名:ObejectReference.VariableName。

类变量

  • 类变量也称为静态变量,在类中以 static 关键字声明,但必须在方法之外。
  • 无论一个类创建了少个对象,类只拥有类变量的一份拷贝
  • 静态变量除了被声明为常量外很少使用,静态变量是指声明为 public/private,final 和 static 类型的变量。静态变量初始化后不可改变。
  • 静态变量储存在静态存储区。经常被声明为常量,很少单独使用 static 声明变量。
  • 静态变量在第一次被访问时创建,在程序结束时销毁 (类加载)
  • 实例变量具有相似可见性。但为了对类的使用者可见,大多数静态变量声明为 public 类型。
  • 默认值和实例变量相似。数值型变量默认值是 0,布尔型默认值是 false,引用类型默认值是 null。变量的值可以在声明的时候指定,也可以在构造方法中指定。此外,静态变量还可以在静态语句块中初始化。
  • 静态变量可以通过:ClassName.VariableName的方式访问。
  • 类变量被声明为 public static final 类型时,类变量名称一般建议使用大写字母。如果静态变量不是 public 和 final 类型,其命名方式与实例变量以及局部变量的命名方式一致。

2.9 运算符

算数运算符

y1

关系运算符

y2

位运算符

y3

逻辑运算符

y4

赋值运算符

y5

条件运算符(?:)

xxxxxxxxxx
1312345678910111213
  • Value of b is : 30

    Value of b is : 20

2.10 扫描器

扫描器使用:

xxxxxxxxxx
171234567891011121314151617
xxxxxxxxxx
41234

3 流程控制

3.1 条件语句

if语句

语法

if 语句的语法如下:

xxxxxxxxxx
41234

if...else语句

if 语句后面可以跟 else 语句,当 if 语句的布尔表达式值为 false 时,else 语句块会被执行。

语法

if…else 的用法如下:

xxxxxxxxxx
512345

switch case 语句

switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。

语法

switch case 语句语法格式如下:

xxxxxxxxxx
111234567891011
  • case中的变量类型可以是: byte、short、int 、 char、String 类型
  • 当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句

3.2 循环语句

while 循环

while是最基本的循环,它的结构为:

xxxxxxxxxx
3123

do…while 循环

do…while 循环至少会执行一次

xxxxxxxxxx
3123

for循环

xxxxxxxxxx
3123

for 循环(go range关键字)

xxxxxxxxxx
41234

例子:

xxxxxxxxxx
1612345678910111213141516
xxxxxxxxxx
212

break 关键字

break 跳出最里层的循环,并且继续执行该循环下面的语句

语法

break 的用法很简单,就是循环结构中的一条语句:

xxxxxxxxxx
11

continue 关键字

让程序立刻跳转到下一次循环的迭代

语法

continue 就是循环体中一条简单的语句:

xxxxxxxxxx
11

3.3 流程控制综合

1. 打印九九乘法表

xxxxxxxxxx
111234567891011
xxxxxxxxxx
9123456789

2. 打印被5整除的数 每行三个

xxxxxxxxxx
1612345678910111213141516

3. 打印三角形

xxxxxxxxxx
1312345678910111213
xxxxxxxxxx
512345

4 数组

4.1 数组创建

xxxxxxxxxx
171234567891011121314151617

4.2 二维数组

xxxxxxxxxx
71234567

4.3 Arrays类

java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。

具有以下功能:

  • 给数组赋值:通过 fill 方法。
  • 对数组排序:通过 sort 方法,按升序。
  • 比较数组:通过 equals 方法比较数组中元素值是否相等。
  • 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。
xxxxxxxxxx
1012345678910

4.4 稀疏数组

xxxxxxxxxx
75123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

4.5 冒泡排序

xxxxxxxxxx
2212345678910111213141516171819202122

5 String类

5.1 创建字符串

xxxxxxxxxx
71234567

5.2 String 方法

字符串长度

xxxxxxxxxx
11

连接字符串

xxxxxxxxxx
11

image-20211201173731186

6 方法

6.1 方法创建

xxxxxxxxxx
111234567891011

6.2 方法重载

定义同名方法,不同参数进行方法重载

xxxxxxxxxx
2212345678910111213141516171819202122

6.3 命令行传参

xxxxxxxxxx
6123456

6.4 可变参数

xxxxxxxxxx
141234567891011121314

6.5 递归

xxxxxxxxxx
1312345678910111213

7 对象与类

7.1 对象和类

基本概念

  • 多态
  • 继承
  • 封装
  • 抽象
  • 对象
  • 实例
  • 方法
  • 重载

一个类可以包含以下类型变量:

  • 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
  • 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
  • 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。

7.2 构造器

构造器(构造方法)分为有参构造,无参构造,不声明构造方法会默认带无参构造,但是创建了有参构造之后就不会自动生成无参构造了,需要手动声明无参构造才能使用

xxxxxxxxxx
1912345678910111213141516171819

7.3 创建对象

对象是根据类创建的。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:

  • 声明:声明一个对象,包括对象名称和对象类型。
  • 实例化:使用关键字 new 来创建一个对象。
  • 初始化:使用 new 创建对象时,会调用构造方法初始化对象。

下面是一个创建对象的例子:

xxxxxxxxxx
6123456

7.4 访问对象属性与方法

直接访问对象的属性和方法,方法和属性需要是public或者default属性

xxxxxxxxxx
6123456

7.5 封装

使用private控制符修饰类属性,通过共有方法来获取私有属性

xxxxxxxxxx
261234567891011121314151617181920212223242526
xxxxxxxxxx
212

7.6 继承

extends关键字

xxxxxxxxxx
512345

继承类型

需要注意的是 Java 不支持多继承,但支持多重继承。java-extends-2020-12-08

继承的特性

  • 子类拥有父类非 private的属性、方法
  • 子类可以拥有自己的属性和方法,即子类可以对父类进行扩展
  • 子类可以用自己的方式实现父类的方法(重写)
  • 提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)

super 与 this 关键字

  • super关键字:我们可以通过super关键字来实现对父类成员的访问,用来引用当前对象的父类。
  • this关键字:指向自己的引用。

final关键字

  • final 关键字声明类可以把类定义为不能继承的

继承测试

Person类:

xxxxxxxxxx
3112345678910111213141516171819202122232425262728293031

student类 继承 Person

xxxxxxxxxx
18123456789101112131415161718

main:

xxxxxxxxxx
141234567891011121314

7.7 多态

多态就是用父类的引用指向子类的对象,子类重写父类的方法

例1:

xxxxxxxxxx
21123456789101112131415161718192021
xxxxxxxxxx
212

例2:

xxxxxxxxxx
3112345678910111213141516171819202122232425262728293031
xxxxxxxxxx
512345

7.8 抽象类

abstract关键字

声明了abstract的方法只能声明,实现只能在子类中重写实现

abstract方法只能在abstract抽象类中定义

xxxxxxxxxx
1312345678910111213

7.9 接口

接口可以实现双继承,模板中的方法只能声明,不能实现

接口创建

xxxxxxxxxx
1012345678910

implements关键字

implements关键字用来实现接口

xxxxxxxxxx
27123456789101112131415161718192021222324252627

8 异常处理

8.1 异常概述

三种类型的异常:

  • 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。
  • 运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。
  • 错误: 错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。

Exception 类的层次

exception-hierarchy

8.2 捕获异常

try catch

  • IDEA:Crtl+Alt+T快速创建代码块

使用 try 和 catch 关键字可以捕获异常。try/catch 代码块放在异常可能发生的地方。

try/catch代码块中的代码称为保护代码,使用 try/catch 的语法如下:

xxxxxxxxxx
71234567

多重捕获块

一个 try 代码块后面跟随多个 catch 代码块的情况就叫多重捕获。

把小异类型常在前大异常类型在后

xxxxxxxxxx
9123456789

finally关键字

finally 代码块中的代码总会被执行,在 finally 代码块中,可以运行清理类型等收尾善后性质的语句

xxxxxxxxxx
1612345678910111213141516

8.3 抛出异常

throws/throw 关键字

throw 关键字:主动抛出异常

xxxxxxxxxx
9123456789

抛出的异常需要被捕获或者用throws关键字抛出此方法,在方法外部捕获异常

一个方法可以抛出多种异常

xxxxxxxxxx
123456789101112131415

8.4 自定义异常

通过继承Exception类来自定义异常,自定义的异常可以写自己的方法,重写toString方法打印异常信息,定义构造方法来记录异常的信息

MyException:

x
123456789101112131415

main & test:

xxxxxxxxxx
12345678910111213141516171819202122

结果:

xxxxxxxxxx
11234

打印堆栈信息就会调用重写的toString方法,打印错误信息