JavaSE:整体总结
目录
数据类型与变量
数据类型
Java中的数据类型主要分为两类:基本数据类型和引用数据类型。
基本数据类型分为四类八种:
- 四类:整形、浮点型、字符型、布尔型。
- 八种:
变量
变量指的是那些经常改变的内容。数据类型就是来定义不同种类的变量的
语法格式:
数据类型 变量名 = 初始值
像是定义一个整型变量a
int a = 100;
数据类型的种类有上面四类,所以变量也可以分为四大类:
整型变量、浮点型变量、字符型变量、布尔型变量。
有的类中也还有细分。
运算符
Java中运算符可分为算数运算符、关系运算符、逻辑运算符以及位运算符等等。
算术运算符
基本的四则运算符:加减乘除模(+ - * / %)
注意:
- 都是二位运算符,使用时必须要有左右两个操作数。
- 做除法和取模(求余数)时,右操作数不能为0(除数不能为0)。
增量运算符
增量运算符有+= -= *= %=
int a = 1;
a += 2; 相当于a = a + 2;
剩下三种增量运算符以此类推。不过要注意只有变量才能使用该运算符,常量不能使用。
自增/自减运算符
自增/自减运算符有++ --
++是给变量的值+1,--是给变量的值-1;
其中也分为前置和后置,以++为例
int a = 1;
System.out.println(a++) 输出1
后置++是先使用原先的a的值后,在+1
int a = 1;
System.out.println(++a) 输出2
前置++是先给a+1,然后使用a
可以根据++的位置来判断进行哪一步:
++在a的前面,先++;
++在a的后面,先用a再++。
关系运算符
关系运算符主要有六个:== != < > >= <=
其计算结果为true或者false。
逻辑运算符
逻辑运算符主要有三个:&&(与)、||(或者)、!(非),返回值都是布尔值。
&&(与),两边表达式都为真,结果才为真。
||(或者),两边表达式都为假,结果才为假。
短路求值
对于&&(与),如果左边的表达式为假,右边的表达式将不再进行;
对于||(或者),如果左边的表达式为真,右边的表达式将不再进行。
这其实就和生活中的并且和或者一样的,根据不同情况有不同的理解。
位运算符
位运算符主要有四个:& | ~ ^
按位与&
如果两个二进制位都是1,则结果是1,否则结果是0。
int a = 10;
int b = 20;
System.out.println(a & b);
输出结果是:0
按位或 |
如果两个二进制位都是0,则结果是0,否则结果是1。
按位取反 ~
如果该位为0,则转为1;如果该位为1,则转为0。
按位异或 ^
如果两个数字的对应的二进制位上的数字相同,则取0,否则取1。
逻辑控制
做事要有逻辑性,效率才可能会提高,编写代码也应当如此。
逻辑结构包括顺序结构、分支结构和循环结构
顺序结构
顺序结构比较简单,就是按照代码的书写顺序一行行进行
分支结构
分支结构主要分为两种:if语句和switch语句。
if语句
语法形式有以下三种:
if(布尔表达式){
//语句
}
if(布尔表达式){
//语句1
}else{
//语句2
}
if(布尔表达式){
//语句1
}else if{
//语句2
}else{
//语句3
}
switch语句
语法形式为:
switch(表达式){
case 常量1:{
语句1;
break;
}
case 常量2:{
语句2;
break;
}
default:{
内容都不满足时执行语句;
break;
}
}
循环结构
while循环
while循环语法格式为:
while(循环条件){
循环语句;
}
只有当循环条件为true时,才会进行循环。
for循环
for循环语法格式为:
for(循环表达式①;循环表达式②;循环表达式③){
循环表达式④
}
其中,①用于初始化变量,②是循环条件,③是循环变量的更新。
do while循环
语法格式为:
do{
循环语句;
}while(循环条件);
注意:do while循环最后的分号不要忘记。
break和continue
break的功能是让循环提前结束;
continue的功能是跳过这次循环,直接进入下一次循环。
方法的使用
方法的定义
方法的定义格式为:
修饰符 返回值类型 方法名称(参数类型 形参){
方法体代码;
return 返回值;
}
实参和形参的关系
形参只是方法在定义时需要借助的一个变量,用来保存方法在调用时传递过来的值。
在Java中,实参的值永远都是拷贝到形参中,形参和实参本质时两个实体。
方法的重载
在Java中,如果多个方法的名字相同,参数列表不同,则称这几种方法被重载了。
方法重载的条件是:
- 方法名必须相同
- 参数列表必须不同(参数的个数不同、类型不同、次序必须不同)
- 与返回值的类型是否相同无关
递归
一个方法在执行过程中调用自身,就称为“递归”。
递归的必要条件:
- 将原问题划分为其子问题,注意:子问题必须要与原问题的解法相同。
- 递归出口。
数组
数组的定义
数组的创建为:
T[ ] 数组名 = new T[N];
T:表示数组中存放元素的类型
T[ ]:表示数组的类型
N:表示数组的长度
数组的初始化
数组的初始化分为动态初始化和静态初始化
动态初始化:
int[] array = new int[10];
静态初始化:
int[] arr = {1,2,3,4};
数组的使用
数组元素的访问
数组内元素的下标是从0开始的,可以通过其下标来访问素组。
数组元素的遍历
通过for循环来遍历数组,其中通过 数组对象.length来获取数组的长度
int[]array = new int[]{10, 20, 30, 40, 50};
for(int i = 0; i < array.length; i++){
System.out.println(array[i]);
}
数组是引用类型
基本类型变量与引用类型类型变量的区别
基本类型变量其中存放的是其所对应的值;
引用类型变量其中存放的对象所在空间的地址。
二维数组
二维数组的语法格式为:
数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 }
本质上是一堆数组,其中的每个元素是一个一维数组。
类和对象
关于类和对象,更详细的内容可以看:Java 类和对象-CSDN博客
类定义和使用
类是用来对一个实体(对象)来进行描述的。
类的语法格式为:
class Animal{
field; // 字段(属性) 或者 成员变量
method; // 行为 或者 成员方法
}
class为定义类的关键字,Animal为类的名字,{}中为类的主体。
类的实例化
用类创建对象的过程,称为类的实例化。Java中使用new关键字配合类名来实例化对象。
其中,同一个类可以创建多个实例。
this引用
this引用指向当前对象(成员方法运行时调用该成员方法的对象),在成员方法中所有成员变量的操作,都是通过引用去访问。
注意:this引用的是调用成员方法的对象。
封装
封装,简单来说就是套壳屏蔽细节,将细节隐藏起来,隐藏对性爱的属性和实现细节。
访问限定符
类可以将数据以及封装数据的方法结合在一起,访问权限用来控制方法或者字段能否直接在类外使用。
访问修饰限定符分为四种:
-
private 只能在当前类使用
-
default/空白 同一个包底下可以访问
-
protected 同一个包底下都可以使用。但是,不同包下的只有子类才能使用
-
public 哪里都可以使用
static成员
static修饰的成员变量,称为静态成员变量。
静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共享的。
static修饰成员方法
被static修饰的成员方法称为静态成员,是类的方法,不是某个对象所特有的。静态成员一般是通过静态方法来访问的。
内部类
在Java中,可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者成为外部类。内部类也是封装的一种体现。
public class OutClass {
class InnerClass{
}
}
OutClass是外部类
InnerClass是内部类
继承和多态
继承
继承是专门用来共性提取,实现代码复用。
继承的语法
继承语法,要借助extends关键字
修饰符 class 子类 extends 父类 {
// ...
}
super关键字
super关键字主要作用:在子类方法中访问父类的成员。
注意:
- 只能在非静态方法中使用
- 在子类方法中,访问父类的成员变量和方法。
super和this
相同点:
- 都是Java中关键字
- 只能在类的非静态方法中,用来访问非静态成员方法和字段
- 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在
不同点:
- this是当前对象的引用,当前对象即调用实例方法的对象,super相当于是子类对象中从父类继承下来部分成员的引用。
- 在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性。
多态
多态的语法
多态,其实就是多种状态,具体点就是去完成某个行为,当不同的对象去完成时会产生不同的状态。
多态实现条件
在Java中要实现多态,要满足下面三个条件:
- 必须在继承体系下
- 子类必须要对父类中方法进行重写
- 通过父类的引用调用重写的方法
多态体现:在代码运算时,当传递不同类对象时,会调用对应类中的方法。
重写
重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写,返回值和形参都不能变。即外壳不变,核心重写。
重写和重载的区别
抽象类和接口
抽象类
如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类语法
一个类如果被abstract修称为抽象类。语法格式为:
public abstract class Shape {
// 抽象方法:被abstract修饰的方法,没有方法体
abstract public void draw();
abstract void calcArea();
// 抽象类也是类,也可以增加普通方法和属性
public double getArea(){
return area;
}
}
臭腺肋也是类,内部方法可以包含普通方法和属性。
抽象类特性
- 抽象类不能直接实例化对象
- 抽象方法不能是private
- 抽象类方法不能被final和static修饰,抽象方法的子类要被重写
- 抽象类必须被继承,并且继承后子类要重写父类中的方法
接口
接口可以看作是,多个类的公共规范,是一种引用数据类型。
语法格式为:
public interface 接口名称{
public abstract void method1(); // public abstract 是固定搭配,可以不写
public void method2();
abstract void method3();
void method4();
}
// 注意:在接口中上述写法都是抽象方法,跟推荐方式4,代码更简洁
接口的使用
接口必须要有一个“实现类”来实现接口,实现接口中的所有抽象方法。
语法格式为:
public class 类名称 implements 接口名称{
// ...
}
String类
字符串构造
分为常量串构造、直接newString对象、使用字符数组进行构造。
其中,String是引用类型,内部并不存储字符串本身。
对象的比较
- ==比较是否引用同一个对象
- equals方法比较内容是否一样
- compareTo方法比较字符串的大小
- compareToIgn方法也是比较字符串大小,只是忽略大小写比较。
字符串查找
采用charAt、indexOf和lastIndexOf方法来查找字符串。
字符串替换
采用replaceAll和replaceFirst方法来替换字符串中的内容。
异常
详细可以看:JavaSE:认识异常-CSDN博客
在Java中,将程序执行过程中发生的不正常行为称为异常。
异常的体系结构
Throwable:是异常体系的顶层类,其派生出两个重要的子类, Error 和 Exception。
异常的分类
编译时异常:在程序编译期间发生的异常。
运行时异常:在程序执行期间的发生的异常。
异常的处理
在Java中,异常的处理主要依靠5个关键字:throw、try、catch、finally和throws。
- throw是用来抛出一个指定的异常对象,将错误信息告知给调用者。
- throws是用来声明异常的。
- try-catch-finally是用来处理异常的。
其中finally中的代码一定会执行,一般在finally中进行一些资源清理的扫尾工作。