JavaSE:SE整体知识总结

目录

1、引言

2、数据类型和变量

2.1 基本数据类型

2.2 引用数据类型

2.3 类型转换

2.3.1 自动类型转换(隐式)

2.3.2 强制类型转换(显式)

3、运算符

3.1 算术运算符

3.2 关系运算符

3.3 逻辑运算符

3.4 位运算符

3.4 移位运算符

3.5 条件运算符

3.6 运算符的优先级

4、程序逻辑控制

4.1 顺序结构

4.2 分支结构

4.3 循环结构

4.4 输入输出

4.4.1 输出:

4.4.2 输入:

5、方法

5.1 实参和形参的关系

5.2 方法重载

6、数组

6.1 数组的初始化

6.1.1 动态初始化

6.1.2 静态态初始化

6.2 引用类型

6.3 null

7、类和对象

7.1 类

7.2 对象

7.3 this引用

7.4 构造方法

7.5 默认初始化

8、封装

8.1 封装扩展之包

8.2 static成员

8.3 代码块

8.3.1 实例代码块

8.3.2 静态代码块

8.3.3 执行顺序

8.4 内部类

9、继承

9.1 extends

9.2 父类成员的访问

9.2.1 super关键字

9.3 final关键字

9.4 Object类

10、多态

10.1 重写

10.1.1 重写和重载的区别

10.2 向上转型

10.3 向下转型

11、抽象类和接口

11.1 抽象类

11.2 接口

11.2.1 接口间的继承

11.2.2 Clonable接口、浅拷贝与深拷贝

11.2.3 Comparable与Comparator接口

11.3 抽象类和接口的区别

12、String类

12.1 字符串的构造

12.2 字符串的不可变性

12.3 String类的常用方法

12.4 字符串的修改

13、异常

13.1 异常的分类

13.2 运行时异常(非受查异常)

13.3 编译时异常(受查异常)

13.4 处理异常

13.4.1 throw

13.4.2 throws

13.4.3 try-catch

13.4.4 finally

13.5 自定义异常

END


1、引言

一个多月的学习,已经掌握了SE语法部分的知识,这篇博客就来做一下总结。

2、数据类型和变量

Java中的数据类型分为基本数据类型和引用数据类型。

2.1 基本数据类型

基本数据类型共有四类八种:

四类:整形、浮点型、布尔类型、字符型

八种:

注意:

1. 不论是在16位系统还是32位系统,int都占用4个字节,long都占8个字节

2. 整形和浮点型都是带有符号的

3. 整型默认为int型,浮点型默认为double

4. . Java虚拟机规范中,并没有明确规定boolean占几个字节

2.2 引用数据类型

字符串、数组、类、接口等都是引用数据类型

2.3 类型转换

2.3.1 自动类型转换(隐式)

自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。特点:数据范围小的转为数 据范围大的时会自动进行。

2.3.2 强制类型转换(显式)

强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。特点:数据范围大的到数据范围小的。

3、运算符

3.1 算术运算符

1. 基本四则运算符:加减乘除模(+ - * / %)

2. 增量运算符 +=  -=  *=  %=

3. 自增/自减运算符 ++  --

3.2 关系运算符

关系运算符主要有六个: ==  !=  <  >  <=  >=,其计算结果是 true 或者 false 。

3.3 逻辑运算符

逻辑运算符主要有三个: &&(逻辑与)  ||(逻辑或)  !(逻辑非) ,运算结果都是 boolean类型。

注意:&& 和 || 遵守短路求值的规则

3.4 位运算符

位运算符主要有四个:

&(按位与),

|(按位或),

~(按位取反),

^(按位异或) ,

除 ~ 是一元运算符外,其余都是二元运算符

3.4 移位运算符

1. 左移 <<: 最左侧位不要了, 最右侧补 0

2. 右移 >>: 最右侧位不要了, 最左侧补符号位(正数补0, 负数补1)

3. 无符号右移 >>>: 最右侧位不要了, 最左侧补 0

3.5 条件运算符

Java 中唯一的一个 三目运算符, 是条件判断语句的简化写法:

表达式1 ? 表达式2 : 表达式3

3.6 运算符的优先级

注意:运算符之间是有优先级的, 具体的规则我们不必记忆。 在可能存在歧义的代码中加上括号即可。

4、程序逻辑控制

本章详细内容可见:JavaSE:程序逻辑控制-CSDN博客

4.1 顺序结构

顺序结构 即 按照代码书写的顺序一行一行执行。

4.2 分支结构

if 语句(if-else、if-else if、if-else if-else)、switch 语句

4.3 循环结构

while 循环、for 循环、do while 循环

break(打破循环)、continue(跳出本次循环)

4.4 输入输出

4.4.1 输出:

1. println 输出的内容自带 \n,  print 不带 \n

2. printf 的格式化输出方式和 C 语言的 printf 是基本一致的

4.4.2 输入:

使用 Scanner 读取字符串/整数/浮点数

注意事项: 当循环输入多个数据的时候, 使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + z, Linux / Mac 上使用 ctrl + d)

5、方法

方法类似于C语言中的函数。

注意事项:

1. 方法名字:采用小驼峰命名

2. 定义在类中

3. 方法不能嵌套定义

4. Java中,无方法声明一说

5.1 实参和形参的关系

1. 形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值

2. 在Java中,实参的值永远都是拷贝到形参中,形参和实参本质是两个实体

5.2 方法重载

在Java中,如果多个方法的名字相同,参数列表不同,则称该几种方法被重载了。

注意:

1. 方法名必须相同

2. 参数列表必须不同(参数的个数不同、参数的类型不同、类型的次序必须不同)

3. 与返回值类型是否相同无关

6、数组

数组是一个引用数据类型。

6.1 数组的初始化

6.1.1 动态初始化

在创建数组时,直接指定数组中元素的个数

6.1.2 静态态初始化

在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定

注意:

如果没有对数组进行初始化,数组中元素有其默认零值:

6.2 引用类型

基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值;而引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址

数组是引用类型,其内部保存的内容可以简单理解成是数组在堆空间中的首地址

6.3 null

null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置

7、类和对象

本章详细内容可见:JavaSE:类和对象-CSDN博客

Java是一门面向对象的语言,在面向对象的世界里,一切皆为对象。

7.1 类

类是用来对一个实体(对象)来进行描述的。

ps:类名注意采用大驼峰定义

7.2 对象

用类类型创建对象的过程,称为类的实例化,采用new关键字,配合类名来实例化对象。

1. new 关键字用于创建一个对象的实例

2. 使用 . 来访问对象中的属性和方法

3.  同一个类可以创建多个实例对象

7.3 this引用

this引用的是调用成员方法的对象。(即哪个对象调用就是哪个对象的引用类型)

7.4 构造方法

名字必须与类名相同在创建对象时,由编译器自动调用,并且在整个对象的生命周期内只调用一次。

构造方法的作用就是对对象中的成员进行初始化。

注意:

1. 如果用户没有显式定义,编译器会生成一份默认的构造方法,生成的默认构造方法一定是无参的

2. 构造方法中,可以通过this调用其他构造方法(this(...)必须是构造方法中第一条语句

7.5 默认初始化

对象空间被申请好之后,对象中包含的成员已经设置好了初始值(默认零值),

8、封装

面向对象程序三大特性:封装、继承、多态

不管是封装还是继承还是多态,都是一种思想!!!

封装:隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。

使用private来对成员进行封装。

8.1 封装扩展之包

为了更好的管理类,把多个类收集在一起成为一组,称为软件包

包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式

Java中已经提供了很多现成的类供我们使用,使用 import语句导入包

8.2 static成员

被static修饰的成员,称之为静态成员,也可以称为类成员其不属于某个具体的对象,是属于类的,是所有对象所共享的。

本部分详细内容可见:JavaSE:static成员-CSDN博客

注意:

1. 不能在静态方法中访问任何非静态成员变量

2. 不属于某个具体的对象,是属于类的,所有对象共享的

3. 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this引用

4. 通过类名. 进行访问

8.3 代码块

分为:普通代码块 实例代码块 静态代码块 同步代码块

 本部分详细内容可见:JavaSE:代码块-CSDN博客

8.3.1 实例代码块

也叫做构造代码块,一般用于初始化实例成员变量。

注意:实例代码块只有在创建对象时才会执行

8.3.2 静态代码块

一般用于初始化静态成员变量。

注意:

1. 静态代码块不管生成多少个对象,其只会执行一次

2. 静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的

3. 如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)

8.3.3 执行顺序

静态代码块-》实例代码块-》构造方法(有父类先执行父类的)

8.4 内部类

在 Java 中,可以将一个类定义在另一个类或者一个方法的内部, 前者称为内部类,后者称为外部类。内部类也是封装的一种体现。

本部分详细内容可见:JavaSE:内部类-CSDN博客

我们把内部类可以分为一下四种:

1.实例内部类(非静态内部类 )

实例内部类对象必须在先有外部类对象前提下才能创建

2.静态内部类

不需要再去通过外部类对象的引用来实例化

3.匿名内部类

4.局部内部类

9、继承

本章详细内容可见:JavaSE:继承(通俗细节版)-CSDN博客

面向对象思想中提出了继承的概念,专门用来进行共性抽取,实现代码复用。

继承主要解决的问题是:共性的抽取,实现代码复用。

9.1 extends

Java语法上,子类通过extend来继承父类

子类会将父类中的成员变量或者成员方法继承到子类中

9.2 父类成员的访问

成员访问遵循就近原则,自己有优先自己的,如果没有则向父类中找。

9.2.1 super关键字

出现同名的成员,非要访问父类的,需要super来访问。

Java提供了super关键字,该关键字主要作用:在子类方法中访问父类的成员。

super也可调用父类构造方法。

使用super注意:

1. 只能在非静态方法中使用

2. 在子类方法中,访问父类的成员变量和方法。

3.在子类构造方法中,super(...)调用父类构造时,必须是子类构造函数中第一条语句。

9.3 final关键字

1. 修饰变量或字段,表示常量(即不能修改)

2. 修饰类:表示此类不能被继承

3. 修饰方法:表示该方法不能被重写

9.4 Object类

Java里面除了Object类,所有的类都是存在继承关系的。默认会继承Object父类。即所有类的对象都可以使用Object的引用进行接收。

10、多态

本章详细内容可见:JavaSE:多态(含向上转型、动态绑定、重写)-CSDN博客

多态,就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。

多态是一种思想!!!

多态发生条件:

1. 必须在继承体系下

2. 子类必须要对父类中方法进行重写

3. 通过父类的引用调用重写的方法

10.1 重写

1. 子类在重写父类的方法时,必须与父类方法原型一致: 返回值类型 方法名 (参数列表) 要完全一致

2. 被重写的方法返回值类型可以不同,但是必须是具有父子关系

3. 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类方法被public修饰,则子类中重写该方 法就不能声明为 protected

4. 父类被static、private修饰的方法、构造方法都不能被重写。

10.1.1 重写和重载的区别

10.2 向上转型

实际就是创建一个子类对象,将其当成父类对象来使用。

有三种形式来向上转型:

1.直接赋值 2.方法传参 3.返回值接收

10.3 向下转型

将一个子类对象经过向上转型之后当成父类使用,将父类引用再还原为子类对象

Java中为了提高向下转型的安全性,引入 了 instanceof ,如果该表达式为true,则可以安全转换

向下转型不安全,用法很少。

11、抽象类和接口

本章详细内容可见:JavaSE:抽象类和接口-CSDN博客

11.1 抽象类

如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类主要用于继承。

注意:

1. 抽象类不能直接实例化对象

2. 抽象方法不能是 private 的

3. 抽象方法不能被final和static修饰,因为抽象方法要被子类重写

4. 抽象类必须被继承,并且继承后子类要重写父类中的抽象方法,否则子类也是抽象类,必须要使用 abstract 修饰

5. 抽象类中不一定包含抽象方法,但是有抽象方法的类一定是抽象类

6. 抽象类中可以有构造方法,供子类创建对象时,初始化父类的成员变

11.2 接口

接口就是公共的行为规范标准,大家在实现时,只要符合规范标准,就可以通用。 在Java中,接口可以看成是:多个类的公共规范,是一种引用数据类型。

类与接口之间是 implements 实现关系。

注意:

1. 接口类型是一种引用类型,但是不能直接new接口的对象

2. 接口中每一个方法都是public的抽象方法, 即接口中的方法会被隐式的指定为 public abstract(只能是public abstract,其他修饰符都会报错)

3. 接口中的方法是不能在接口中实现的,只能由实现接口的类来实现

5. 接口中可以含有变量,但是接口中的变量会被隐式的指定为 public static final 变量

6. 接口中不能有静态代码块和构造方法

7.即Java中不支持多继承,但是一个类可以实现多个接口

11.2.1 接口间的继承

接口可以继承一个接口, 达到复用的效果. 使用 extends 关键字

接口间的继承相当于把多个接口合并在一起。

11.2.2 Clonable接口、浅拷贝与深拷贝

详见:JavaSE:Clonable接口、浅拷贝与深拷贝-CSDN博客

11.2.3 Comparable与Comparator接口

详见:JavaSE:Comparable与Comparator接口-CSDN博客

11.3 抽象类和接口的区别

核心区别: 抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中不能包含普通方法, 子类必须重写所有的抽象方法。

12、String类

本章详细内容可见:JavaSE:String类常用方法(巨详细)-CSDN博客


本章详细内容可见:JavaSE:String类常用方法(巨详细)-CSDN博客

JavaSE:StringBuilder和StringBuffer类-CSDN博客

String类是引用数据类型。

12.1 字符串的构造

1.通过双引号直接定义

2.通过new对象来定义

3.通过字符数组来定义

12.2 字符串的不可变性

value数组被private修饰封装,没有提供任何的get和set方法,无法获取到字符串,当然也不可能被修改。

12.3 String类的常用方法

JavaSE:String类常用方法(巨详细)-CSDN博客

12.4 字符串的修改

因为String类是不能修改的,所有的修改都会创建新对象,效率非常低下。

如果要修改建议尽量 使用StringBuffer或者StringBuilder。

JavaSE:StringBuilder和StringBuffer类-CSDN博客

13、异常

在程序执行过程中,发生的一些不正常行为,就叫做异常。

13.1 异常的分类

13.2 运行时异常(非受查异常)

数组越界异常、空指针异常、算数异常、类型转换异常等都是非受查异常。

13.3 编译时异常(受查异常)

在程序编译期间发生的异常,称为编译时异常,也称为受检查异常。

13.4 处理异常

异常处理主要用到5个关键字:throws、try、catch、throw、finally

13.4.1 throw

借助throw关键字,抛出一个指定的异常对象,将错误信息告知给调用者。

注意:

需要注意:

1. throw必须写在方法体内部

2. 抛出的对象必须是Exception 或者 Exception 的子类对象(不能抛出自定义类的对象)

3. 如果抛出的是 RunTimeException 或者 RunTimeException 的子类(运行时异常),则可以不用处理,直接交给JVM来处理(但程序会立即终止)

4. 如果抛出的是编译时异常,用户必须处理,否则无法通过编译

5. 异常一旦抛出,其后的代码就不会执行

13.4.2 throws

当方法中抛出编译时异常,用户不想处理该异常,此时就可以借助throws将异常抛给方法的调用者来处理。即当前方法不处理异常,提醒方法的调用者处理异常。

13.4.3 try-catch

try-catch知识点总结:

1. try块内抛出异常位置之后的代码将不会被执行

2. 如果抛出异常类型与catch时异常类型不匹配,即异常不会被成功捕获,也就不会被处理,继续往外抛,直到 JVM收到后中断程序----异常是按照类型来捕获的

3. try中可能会抛出多个不同的异常对象,则必须用多个catch来捕获----即多种异常,多次捕获

4.如果异常之间具有父子关系,一定是子类异常在前catch,父类异常在后catch,否则语法错误

5.由于 Exception 类是所有异常类的父类,因此可以用这个类型表示捕捉所有异常(可以放到最后用来兜底,但是极不推荐只使用Exception来捕获异常 )

13.4.4 finally

不管有没有抛出异常,是否被捕获,finally中的代码一定会执行的,一般在finally中进行一些资源清理的扫尾工作。

13.5 自定义异常

Java当中虽说有着丰富的异常类,但是我们在开发过程中难免会遇见一些不能表示的异常,这时,我们就可以自定义异常。

仿照源码,创建自定义类,使之继承于Exception 或者 RuntimeException类,给出无参和带参的构造方法。

创建自定义异常类需要注意以下几点:

1. 自定义异常通常会继承自 Exception 或者 RuntimeException

2. 继承自 Exception 的异常默认是受查异常(必须捕获处理掉异常)

3. 继承自 RuntimeException 的异常默认是非受查异常


END

JavaSE语法部分的学习结束了,希望你能一直坚持下去,越来越强!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值