程序基础
数据类型
本质
占用内存的空间大小,限制数据的格式类型
基本类型
数值型
整数型
byte
short
int
long
浮点型
char
引用类型
类
数组
接口
变量
本质
可以更改的量,方便进行操作,并且可以复用
声明
数据类型 变量名 = 值 ;
分类
局部变量
在方法中声明的变量是局部变量,没有默认值,作用域只能在当前方法中使用
静态变量
类中使用static修饰的变量
成员变量
类中没有使用static修饰的变量
调用
局部变量
方法中使用变量名直接调用
静态变量
类名.静态方法名
成员变量
对象.成员变量名
运算符
分隔符
左结合
, [] () ; .
一元运算符
右结合
! ++ - -~
算术运算符
移位运算符
左结合
* / % + -
<< >> >>>
关系运算符
左结合
<> <= >= == !=
逻辑运算符
左结合
! && || & | ^
三目运算符
右结合
布尔表达式?表达式1:表达式2
赋值运算符
右结合
= *= /= %= += -= <<= >>= >>>= &= *= |=
举例
&& 和 &
两边都是true 结果才是true
&& : 短路与,加入第一个条件为false,则第二个条件不执行
& : 不管第一个条件是否为false,第二个条件依然会执行
|| 和 |
两边一个为真 结果就为真
短路或 , 如果第一个条件就为true,则第二个条件不再执行
不管第一个条件为false还是true,第二个条件都执行
流程控制
顺序结构
从上往下从左往右
分支结构
单分支,双分支,多分支
if...else...swith
注意 case穿透
循环结构
三要素
起始值 终止条件 步长
for
while
do...while
方法
本质
一堆代码的集合
优点
代码复用,程序简洁清晰,易维护,易扩展,灵活度更高
声明
修饰符 返回值类型 方法名(参数列表){方法体}
分类
静态方法
使用static修饰
成员方法
没有使用static修饰
构造方法
调用
静态方法
类名.方法名(参数);
成员方法
对象.方法名(参数);
方法不调用不执行,调用才执行,并把结果返回到调用处
方法重载
Overload
方法名相同,参数列表不同
列表不同分为:类型不同或个数不同
递归
在方法中对当前方法进行调用.注意终止条件
常见异常:栈内存溢出
数组
定义
是引用数据类型
数组是源自底层的数据结构,用来保存和处理多个数据
用来保存多个相同类型的数据的集合
数据结构
计算机存储和组织数据的一种方式,合理选择数据结构会提升执行效率和储存效率
数据操作
增删改查
数组特性
下标从0开始,查找更改快,增删删除慢
数组声明
静态声明
已知数组中的每个元素的时候使用静态声明
数据类型[] 变量名 = {值,值,值};
数据类型[] 变量名 = new 数据类型[]{值,值,值};
动态声明
不知道数组中每个元素的时候使用动态声明
数据类型[] 变量名 = new 数据类型[长度];
数组使用
查询
数组[下标];
更改
数组[下标]=值;
遍历
for(int i = 0;i<数组.length;i++)[]
for(int i :数组){}
常见异常
空指针
下标越界
数组传递
Main方法传参
数组排序
就是指让保存的元素按照一定的顺序进行排序存储
API
Arrays.sout(数组);
冒泡排序
对相邻元素进行比较,如果第一位比第二位大就交换他们
对每一对相邻的元素进行相同的操作,从第一对到最后一对,最后的元素应该就变成了最大的元素
对每一个元素重复以上的操作,除了最后一个
选择排序
每次把最小的放到左边
拿出第一个元素,假设他是最小的,然后和后面的元素挨个比较,如果有比第一个小的就交换他们的坐标
当比较完一轮,得到最小元素的下标,然后放到最前面进行换位即可
重复执行这个步骤,直到当前元素后面没有元素为止
查找数据
方法
顺序查找
如果数据在前面,相对会较快一些,但是随即查找,效率偏低
遍历,用所有数据,挨个和目标数据进行比较
二分查找
顺序
起始位置
终止位置
中间位置
目标大于中间,起始位置变成中间位置+1;结束位置不变
目标小于中间,起始位置不变,终止位置变成中间位置-1;
重新生成中间位置
当起始位置大于结束位置终止
要求
数组必须有序
一般用于固定的数据,因为有序,所以添加和删除要麻烦一些,还要考虑元素移位问题
升序和降序都行,只要改变一下判断就行
优点
随即查找性能比较好
数组复制
替换复制
插入复制
注意事项
命名
强制规则
数字,下划线,大小写字母,美元符号
数字不能开头
不能使用关键字和保留字
非强制规则
望文知意,驼峰命名法
变量名和方法名,首字母小写
类名首字母大写
注释
沟通
面向对象
面向对象和面向过程
面向对象
侧重分步骤
面向过程
侧重分步骤
优点
可扩展性,可维护性,灵活性,使程序耦合度降低
缺点
性能比面向过程相对较差
类和对象
类
定义属性模板,只定义有什么属性什么功能
对象
具体的个体,封装了属性的值
如果对象和对象之间有相同的属性和值,则使用静态变量
如果对象和对象之间有相同的属性和不同的值(也可以是不同的值),则使用成员变量
构造方法
实例化对象使用,创建对象时会自动调用构造方法
是每个类都有的,并且用于创建该类的对象
语法
修饰符 方法名/类名(参数列表){方法体}
构造方法的修饰符 我们只使用权限控制即可,不能使用static
构造方法 没有返回值 连void都没有
构造方法的方法名 必须和类名一致
实例化对象
加载类到静态区
堆内存创建对象空间
执行构造方法
返回堆内存地址
对象使用
对象.成员变量
对象.成员方法(参数)
this
是什么
表示当前对象内存地址
是每个对象中,保存自身内存地址的一个引用类型变量
能做什么
1
在成员方法或者构造方法中,区分同名的成员变量和局部变量
this.xxx
2
用在构造方法中,重载调用当前类中国其他构造方法,但是必须写在构造方法第一行
this(xxx)
3
return this
返回当前对象的内存地址,可以链式调用
怎么用
区分成员和局部
重载调用构造方法
链式调用
注意
this不能用到静态方法中
谁调用这个成员方法,this就是谁
static
是什么
修饰静态关键字
修饰符,关键字,用来区分静态和成员
能做什么
在类体中使用static修饰的变量 是 静态变量
用static修饰的方法 是静态方法
还可以使用static定义静态语句块
静态语句块
等同于静态方法
自动执行,在程序加载阶段执行完成,并且只执行一次
由于是执行时机是在main之前,并且只执行一次,所以非常适合做一些初始化工作
访问一个类的静态属性的时候,类加载
实例语句块
可以看作成员方法,没有static修饰的语句块就是成员语句块
创建对象之后,立刻执行 , 每创建一个对象,就执行一次 并且在构造方法之间
封装
作用
让代码更容易理解,易于维护,更提高了代码的安全性
package
包机制
主要解决了命名冲突问题,在类名前加命名空间
完整的类名是带有包名的,包名.类名 才是这个类的名字
package语句 必须出现在java源文件的第一行
package语句是 规定编译之后的class文件保存的位置,和源文件无关
import
导包
用于把当前类中需要的其他类,载入
必须出现在class语句之上,package语句之下
java.lang.*
该包下所有类均为系统核心类,使用时不需要导入
注意
按空格 或者回车的时候会自动导包,如果程序没有问题,但是报错,可以查看一下是否为导包错误
静态导入
把一个类中的静态属性导入,在当前类中可以直接写名字调用,可以省略类名
继承
是什么
就是在已有的类中派生出新的类,新的类能吸收已有类的属性和行为
能做什么
语法
class 类名 extends 父类名{类体}
目的
代码复用,提高效率,如果父类满足不了子类需求的话,还可以进行覆写,可以使用多态
java中 只支持单继承,不支持多继承,并且继承可以传递
一个类只能继承一个父类,但是一个类可以被很多个子类继承
super
是什么
表示父类型特征
能做什么
1
用在成员方法和构造方法中,区分父子类之间同名的方法和变量
super.xxx
2
用在子类构造方法中,调用指定的父类构造方法
super(xxx);
怎么用
如果在子类构造方法中,没有显示出现super()也没有出现 this(xxx) 则默认有一个super() 调用父类无参构造
并且super(xxx)必须出现在子类构造方法中 第一行 所以this(xxx)和super(xxx)不能同时出现
覆写
父类功能无法满足子类需求的时候,进行覆写
要求
方法名,返回值,参数列表必须和父类一致
不能比原方法拥有更低的访问权限
不能有比原方法拥有更宽泛的异常
特质成员方法,也就是说 只有成员方法 可以覆写
@Override
是源码注解,在编译的时候会判断该方法是否为覆写的方法,防止拼写错误等,如果写错了就会报错
如果不加这个注解,也是没关系的,只不过 比如方法名写错了,此时不算覆写了,但是也不会报错
Java基础总结篇
最新推荐文章于 2024-08-26 16:40:46 发布