1 数组工具类Arrays
1.1 Arrays.sort(数组)
对数组排序,对于基本类型的数组使用优化后的快速排序算法,效率高。
对引用类型数组,使用优化后的合并排序算法。
1.2 Arrays.toString(数组)
把数组里的数据,用逗号连接成一个字符串。【值1,值2】
1.3 Arrays.copyOf(原数组,新的长度)
把数组复制成一个指定长度的新数组。
新数组长度大于原数组,相当于复制,并增加位置
新数组长度小于原数组,相当于截取前一部分数据
2 变量
2.1 概念
可以改变的数,称为变量。
一般通过三部分来描述一个变量。
变量类型,变量名,变量值。
其中三部分都是可以改变的,根据需要来确定即可。
<mark>变量的使用原则:就近原则。</mark>
<mark>尽量控制到最小范围。</mark>
2.2 局部变量
定义在方法里
<mark>注意:必须手动初始化,来分配内存。如:int i=5; 或者 int i; i=5;</mark>
<mark>作用域也就是方法里或者局部代码块里,方法运行完内存就释放了。</mark>
2.3 成员变量
定义在类里,方法外。
<mark>注意:不用初始化,也会自动被初始化成默认值。</mark>
<mark>作用域是整个类中,类消失了,变量才释放。</mark>
<mark>八大基本类型都有各自的默认值。</mark>
<mark>引用类型的默认值都是null。</mark>
基本类型 | 默认值 |
---|---|
byte | 0 |
short | 0 |
int | 0 |
long | 0L |
float | 0.0f |
double | 0.0d |
char | ‘\u0000’ |
boolean | false |
3 面向对象
3.1 概念
Thinking in java
所谓的面向对象是一种编程思想,通过这种思想可以把生活中的复杂事情变得简单化,从原来的执行者变成了指挥者。
面向对象是基于面向过程而言的。
我们经常说的面向对象的编程实现(OOP,Object Oriented Programming)
3.2 三大特征
1. 封装性,把相关的数据封装成一个“类”组件
2. 继承性,是子类自动共享父类属性和方法,这是类之间的一种关系
3. 多态,增强软件的灵活性和重用性
4. 类和对象
4.1 类
1. Java语言最基本单位就是类,类似于类型。
2. 类是一类事物的抽象。
3. 可以理解为模板或者设计图纸。
4.2 对象
每个对象具有三个特点:对象的状态,对象的行为和对象的标识。
1. 对象的状态用来描述对象的基本特征。
2. 对象的行为用来描述对象的功能。
3. 对象的标识是指对象在内存中都有一个唯一的地址值用来和其他对象区分开来。
4. 类是一类事物的抽象,对象是具体的实现。
汽车类:
实现可以有奥迪汽车对象、有宝马汽车对象。
4.3 类和对象的关系
1. 计算机语言是用来描述现实世界事物的。通过描述事物的特征和事物的行为来描述
2. 那怎么通过java语言描述呢?通过类来描述事物,把事物的属性当做成员变量,把行为当做成员方法。
分析手机事物:
类:手机类,抽取相同的特征和功能
对象:可以按照模板生产很多个手机,比如1号手机对象,包含特有的成员变量和成员方法
5 封装
5.1 概述
封装是指隐藏对象的属性和实现细节
仅仅对外提供公共的访问方式。
好处:
1. 提高安全性
2. 提高重用性
5.2 private关键字
是一个权限修饰符,用于修饰成员变量和成员函数。
被私有化的成员只能在本类中访问。
6 构造方法
6.1 概念
构造方法是一种特殊的方法,它是一个与类同名的方法。
对象的创建就是通过构造方法来完成.
其功能主要是完成对象的创建或者对象的初始化。
当类实例化new一个对象时会自动调用构造方法。
构造方法和其他方法一样也可以重载(方法名相同+参数列表不同)。
6.2 形式
可以无参也可以有参
修饰符 类名([参数列表]){
代码……
}
7 this
7.1 概念
this代表本类对象的一个引用对象。
7.2 形式
this.name=name;
8 构造代码块和局部代码块
{
…
}
8.1 构造代码块
- 在类的内部,方法外部,的代码块。
- 通常用于抽取构造方法中的共性代码。
- 每次调用构造方法前都会调用构造代码块new new new
- 优先于构造方法加载
8.2 局部代码块
- 在方法里面的代码块
- 通常用于控制变量的作用范围,出了括号就失效
- 变量的范围越小越好,成员变量会有线程安全问题
8.3 练习1:代码块加载顺序
- 创建类
- 提供构造代码块,构造方法,局部代码块
- 创建对象,测试执行顺序
总结:构造代码块->构造方法->局部代码块
构造代码块:每次创建对象都会执行构造方法,在执行构造方法前会执行构造代码块
局部代码块:存在方法里,只有调用方法才执行
9 继承 – OCP原则
9.1 概念
继承是面向对象最显著的一个特性。
继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。
Java继承是使用已存在的类的定义作为基类/父类/超类,新类的定义可以增加新的数据或新的功能,也可以用父类的功能。
但不能选择性地继承父类(超类,基类)。
这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。
9.2 特点
- 使用extends关键字
- 相当于子类把父类的功能复制了一份
- java只支持单继承
- 继承可以传递(爷爷,儿子,孙子的关系)
- 不能继承父类的私有成员
- 继承多用于功能的修改,子类可以拥有父类的功能的同时,进行功能拓展
- 像是is a 的关系 --依赖性非常强的关系 — 耦合性非常强
10 super关键字
- 通过super关键字可以使用父类的内容。
- super代表父类的一个引用对象。
- 如果在构造方法中使用,必须是第一条语句。
11 !!方法重写Override
- 继承后,子类就拥有了父类的功能。
- 在子类中,可以添加子类特有的功能也可以修改父类的原有功能。
- 子类中方法的声明与父类完全一样时,会发生覆盖/复写/重写操作。
- 方法的声明:包括方法的返回值,方法名和参数列表,完全一致。
注意:
- 父类中的私有方法不能被重写。
- 子类重写父类方法时,修饰符要>=父类修饰符。
- 父类中的构造方法不能被子类继承。
12 拓展
12.1 this和super的区别
- this代表本类对象的引用,super代表父类对象的引用。
- this用于区分局部变量和成员变量
- super用于区分本类变量和父类变量
- this.成员变量 this.成员方法() this( [参数] )代表调用本类构造方法
- super.成员变量 super.成员方法() super( [参数] ),代表调用父类构造方法
- this和super不可以同时出现在同一个构造方法里,因为他们两个只要出现都得放在第一行。
12.2 创建对象的流程
Person p = new Person();//短短这行代码发生了很多事情
- 把Person.class文件加载进内存
- 在栈内存中,开辟空间,存放变量p
- 在堆内存中,开辟空间,存放Person对象
- 对成员变量进行默认的初始化
- 对成员变量进行显示初始化
- 执行构造方法(如果有构造代码块,就先执行构造代码块再执行构造方法)
- 堆内存完成
- 把堆内存的地址值赋值给变量p ,p就是一个引用变量,引用了Person对象的地址值
12.3 匿名对象
没有名字的对象,是对象的简化表示形式。
使用场景:
1、当被调用的对象只调用一次时(多次会创建多个对象浪费内存)
Demo d = new Demo();
d.sleep();
d.game();
//这个d就是对象的名字。
也可以写成:
new Demo().show();//创建了一个对象调方法
new Demo().game();//又创建了一个对象调方法