JAVA基础
1. 数据类型:
基本类型:
- | - | - | - | 注意 |
---|---|---|---|---|
byte | 字节型 | 8位 | 1字节 | … |
short | 短整型 | 16位 | … | … |
int | 整型 | 32位 | … | Java语言的整型常量默认为int型 |
long | 长整型 | 64位 | … | 声明long型需要加l或者L |
float | 单精度浮点数 | 32位 | … | 后面必须加F或者f |
double | 双精度浮点数 | 64位 | … | 表示可以加D或d或者不加(即浮点类型默认是double) |
char | … | … | … | … |
boolean | … | … | … | … |
引用类型:
类(class) 、接口(interface) 、数组 、枚举
2. 运算符:
算数运算符:
+、 - 、 * 、 / 、 % 、 ++ 、 --
赋值运算符:
= 、 += 、 -= 、 *= 、 /= 、 %=
关系运算符:
>、 < 、 >= 、 <= 、 == 、 !=
逻辑运算符:
&& 短路与:两边同时为true,结果为true
|| 短路或:两边有一个为true,结果为true
&、| 和&& 、||的区别:
&,| :左边能得到结果,右边也需要计算
&&,|| :左边能得到结果,右边不再计算
三元运算符:
布尔类型表达式1 ? 表达式2 : 表达式3
运算法则:如果表达式1成立,则结果为表达式2,否则为表达式3
位运算符:
& 逻辑与:两边同时为true,结果为true
| 逻辑或:两边有一个为true,结果为true
! 逻辑非(取反):true变false,false变true
^ 逻辑异或:两边不同为true,相同为false
移位运算符:
>> 、 << 、 >>>
对于正数,右移n位相当于除以2的n次幂,左移n位相当于乘以2的n次幂
3. 局部变量和全局变量:
- | 声明位置 | 作用域 | 生命周期 |
---|---|---|---|
全局变量 | 类的内部 | 整个类的内部 | 生命期和对象一样 |
局部变量 | 方法或者语法块内部 | 定义时所在的方法或者语法块内部 | 方法或语法块执行完毕时销毁 |
4. 数组:
一维数组:
基本概念:
①数组本身属于引用数据类型
②数组中存储的数据称为元素、元素可以是任何数据类型
③数组创建好之后,长度是不能改变的
④下标又称为索引,是指元素在数组中的位置、下标从0开始
创建:
静态创建:①int[] array = {1, 2, 3};
动态创建:②int[] array = new int[3];
二维数组:
基本概念:
一维数组中的每个元素又是一个一维数组
声明:
int[][] array = new int[3][2];
访问:
行数:array.length
每行列数:array[0].length
数组排序:
冒泡排序:
每位数字依次和后面的数字比较,小的互换位置。
优点:简单
选择排序:
每位数字依次和后面的数字比较,记录小的位置,后和该位数字互换
优点:比冒泡排序减少了替换次数
插入排序:
从第二位开始,每位和前面的数字比较,如果大结束,如果小则替换。
优点:对于相对有序数组,替换次数较少
5. 方法参数、返回值:
方法参数:
作用:
方法内部来接收外面的数据
形参和实参:
形参: 方法定义的时候,形式的参数
实参: 方法调用的时候,实际传入的数据
值传递和引用传递:
值传递
传递的是变量的值(变量的副本)
基本类型和String
引用传递
传递的是变量的内存地址(变量的引用)
引用类型(除了String)
应用
封装工具类实现 ① 传入字符串,对字符串倒序 ② 传入数组,实现数组倒序
可变参数:
概念:可变,指的是参数的个数是可变的
定义:①…表示可变 ②方法内部,把参数当做数组处理
调用:传入0个,1个,n个,数组
注意:可变参数必须方法参数列表的最后面
返回值和返回类型:
作用:
方法执行完毕后,对外部返回数据
语法:
任何方法(除了构造方法)都必须有返回类型,void表示无返回
如果有返回类型,则需要通过return返回数据
如果是void方法,可以使用return,结束方法的运行
6. 构造方法、this、super:
构造方法:
作用:
用来构造对象的(用来初始化,实例化对象)
语法:
方法名必须和类名一致
不能有返回类型
调用:
不能手动调用,只有在实例化对象的时候(new)系统自动来调用
快捷键:
alt + shift + s -> o -> 回车
复制类名 -> alt + /
隐式构造方法:
如果代码中没有提供显式的构造方法,则系统自动创建一个无参的隐式构造方法
如果代码中提供显式的构造方法,则系统不会再创建隐式构造方法,如果需要,手动创建
this和super:
this:
调用自身的属性和方法:
this.属性和this.方法
使用:当形参的名字和属性的名字相同的时候,this.表示属性(成员变量)
调用自身的构造方法:
this()调用
必须放在构造方法的首行
表示自身对象的内存地址
super:
调用父类的属性和方法:super.
调用父类的构造方法:super()
7. 访问权限修饰符:
- | - | - | - |
---|---|---|---|
private | 私有的 | 本类 | 封装时将属性私有化 |
default | 无修饰的 | 本类和本包下 | 基本不用 |
protected | 受保护的 | 本类、本包和子类 | 父类中 |
public | 公有的 | 任何位置 | 工具类的方法 |
8. final、static:
final:
它修饰的类,不能被继承。
它修饰的方法,不能被重写。
它修饰的变量,是一个常量。
可以提高处理速度
static:
静态方法中只能调用静态的变量和方法
静态方法中不允许使用this和super
静态的事务无法回收内存的,只有当程序停止的时候,才会回收内存
9. 重载、重写:
- | 方法名 | 参数 | 返回类型 | 异常 | 访问权限 | 备注 |
---|---|---|---|---|---|---|
重载 | 相同 | 不同 | 无关 | |||
重写 | 相同 | 相同 | 相同 | 子类<=父类 | 子类>=父类 | 无法重写的方法:final、构造方法、static、private |
10. 抽象类、接口:
abstract class 类名
1.用abstract修饰的方法叫抽象方法,没有方法体。
public/protected abstract 数据类型 方法名字(); 抽象方法没有具体的实现。
2.有抽象方法的类叫做抽象类
abstract class 类名
3.抽象类可以有实例方法
4.抽象类因为有未实现(没有方法体)的方法,所以不能实例化对象。
5.抽象类可以继承自抽象类,类,接口。
6.抽象类可以有成员变量,和正常的类一样。
7.抽象类可以没有抽象方法,但没有意义。
8.其他类可以继承抽象类,可以不实现抽象方法,那该类也叫做抽象类。
9.抽象方法必须为public或者protected。
public interface 接口名
public abstract 数据类型 方法名字(); 所有方法
1.接口中的成员变量只能为public static final
2.接口中的方法只能为public abstract
3.接口中所有方法都不能有具体实现,也就是说接口中的方法都是抽象方法。
4.接口实现implements
5.可以实现多个接口
6.接口只能继承接口
11. 转型:
向上转型:
子类转换成父类对象
向下转型:
父类转换成子类
只发生在有继承关系的对象中
instanceof:判断一个对象是否是这个类的
12. 封装、继承、多态:
封装:
理解:
广义的:把对象抽象出来封装成类,把功能封装成方法
狭义的: “强内聚、弱耦合”,要求在其他类中,不能直接操作对象的属性
实现:
将属性私有化 private
提供setter和getter方法
快捷键:(get、set方法)
//alt + shift + s -> r -> alt + a - > alt + o
继承:
理解:
继承的作用:“不要重复造轮子/造车”,实现代码的复用 *
概念:
父类:共通的部分存放在父类,又称为超类,基类 superclass
子类:继承父类的类称为子类,又称为派生类 subclass
实现继承:
extends
注意事项:
(一)单继承关系: 一个子类只能有一个父类
(二)多层继承关系:父类可以有父类,子类也有子类
(三)最终的父类Object
(四)父类不是任何事务都能继承,比如private
多态:
编译的时候是一个状态,运行的时候是另一个状态。
class B extends A{}
A a = new B();
a.aMethod();
发生的必须条件
1.有继承关系的对象中
2.方法重写
3.发生向上转型(子类引用指向父类引用)