ArrayList:
长度动态,存储类型只能存储引用数据类型
要用基本数据类型应该选用其对应的包装类
![](https://i-blog.csdnimg.cn/blog_migrate/40736985129f756a54723779c077af54.png)
import java.util.ArrayList;
//创建集合对象
ArrgyList<引用数据类型> list=new ArrayList<引用数据类型>();
//JDK7:
ArrgyList<引用数据类型> list=new ArrayList<>();
![](https://i-blog.csdnimg.cn/blog_migrate/c140707c8f4b08357961256c0f4b8e35.png)
Static:
static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量。
静态变量:被该类所有对象共享;不属于对象,属于类;随着类的加载而加载,优先于对象存在
调用方式:类名调用;对象名调用
静态方法:多用在测试类和工具类中,javabean类中很少会用
调用方法:同上
注意:
静态方法只能访问静态变量和静态方法
非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法(不能调用实例对象,因为静态随类的加载而加载,非静态要等对象加载,而此时还没有对象可以调用)
静态方法中是没有this关键字 (this表示当前方法调用者的地址,由虚拟机赋值)
继承:
![](https://i-blog.csdnimg.cn/blog_migrate/0dd10dfee0a9e8f45c94a4c494c7d3a2.png)
java继承不支持多继承,但支持多层继承
Java中所有的类都直接或者间接继承于Object类。
![](https://i-blog.csdnimg.cn/blog_migrate/788b15572d5ec5378fc7b08266c14fbf.png)
方法的传递会从父类传递虚方法表下来,子类调用时候可以直接查看,提高效率,虚方法:非private、非static、非final
继承中:
成员变量访问特点:
就近原则(如果有关键字,this的话在全局找,super在父类找),成员方法也是就近原则
方法重写:@Override标记重写函数,如果有错误会有红色波浪线标记
1.重写方法的名称、形参列表必须与父类中的一致。
2.子类重写父类方法时,访问权限子类必须大于等于父类(暂时了解∶空着不写<protected < public)
3.子类重写父类方法时,返回值类型子类必须小于等于父类
4 . 重写的方法尽量和父类保持一致。
5.私有方法不能被重写。
6.子类不能重写父类的静态方法,如果重写会报错的。
(5.6只有被添加到虚方法表的才能重写)
构造方法的访问特点:
父类中的构造方法不会被子类继承。
子类中所有的构造方法默认先访问父类中的无参构造,再执行自己。
子类构造方法的第一行语句默认都是: super(),不写也存在,且必须在第一行。
如果想调用父类有参构造,必须手动写super进行调用。
![](https://i-blog.csdnimg.cn/blog_migrate/c9c8cf6c6ab9542838821b1bd1cc5cab.png)
多态:
同类型的对象,表现出的不同形态。
表现形式:父类类型 对象名称=子类对象
前提:
有继承关系、有父类引用指向子类对象,要有方法重写
变量调用:编译看左边,运行也看左边。
编译看左边: javac编译代码的时候,会看左边的父类中有没有这个变量,如果有,编译成功,如果没有编译失败。运行也看左边: java运行代码的时候,实际获取的就是左边父类中成员变量的值。
方法调用:编译看左边,运行看右边。
编译看左边: javac编译代码的时候,会看左边的父类中有没有这个方法,如果有,编译成功,如果没有编译失败。运行看右边: java运行代码的时候,实际上运行的是子类中的方法。
弊端:不能调用子类的特有方法(因为编译是先看父类) 可以强制转换回子类型
a类名 instanceof 类名 (变量名) 判断是否是该类,返回值是boolean,追加变量名可以直接强制转化一个新的出来
包:
![](https://i-blog.csdnimg.cn/blog_migrate/18fb24084b08dd101dc1dc32c53e45ec.png)
![](https://i-blog.csdnimg.cn/blog_migrate/25839f2a5fb15a9baf840366e36f0e24.png)
Final:
修饰方法:表明该方法是最终方法,不能被重写
类:最终类,不能被继承
变量:叫做常量,只能赋值一次
如果是引用数据类型,地址不变,里面的属性值可以变化
权限修饰符:
![](https://i-blog.csdnimg.cn/blog_migrate/a1003a7aa07ad9c5495600c4f5955c3e.png)
构造代码块:
写在成员变量中的代码块
可以把多个构造方法中重复的代码抽取出来,
执行时机:我们在创建本类对象的时候会先执行构造代码块再执行构造方法
一般不会用,有需要可以调用自身的构造方法去访问重复的代码,也就是只要在其中一个写就行
静态代码块:
格式:static{}
特点:需要通过static关键字修饰,随着类的加载而加载,并且自动触发、只执行一次使用场景:在类加载的时候,做一些数据初始化的时候使用。
抽象类:
关键字abstract
抽象方法:将共性的行为(方法)抽取到父类之后。由于每一个子类执行的内容是不一样,所以,在父类中不能确定具体的方法体。该方法就可以定义为抽象方法。
抽象类:如果一个类中存在抽象方法,那么该类就必须声明为抽象类
![](https://i-blog.csdnimg.cn/blog_migrate/f40a8010d4a4fda7a40c8551dbe11207.png)
抽象类和抽象方法的注意事项:
抽象类不能实例化(不能创建对象)
抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类可以有构造方法
抽象类的子类:要么重写抽象类中的所有抽象方法;要么是抽象类
接口:
作为一种规则,对行为的抽象。
![](https://i-blog.csdnimg.cn/blog_migrate/fc1c51acea622f5deea84a227c9fca35.png)
接口中成员的特点:
成员变量:只能是常量
默认修饰符:public static final
没有构造方法
成员方法:只能是抽象方法(jdk7以前只能是)
默认修饰符:public abstract
接口新特性:
![](https://i-blog.csdnimg.cn/blog_migrate/71200e9470d47d47209d24ca408bed97.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fbc87fa02ef1197f94167835efe7f2aa.png)
就是说接口中有新的方法,可以先不重写,先拿来用,需要了再重写。
![](https://i-blog.csdnimg.cn/blog_migrate/9e49398a73cd5e5f51ece94284521ffc.png)
静态方法不能被重写;实现类中同名的要用对象调用,接口中的用接口调用。
![](https://i-blog.csdnimg.cn/blog_migrate/b53fba8d64b9ad4b7581a012e9dd7bfb.png)
减少接口中重复的代码,同时又不会让外类调用;
静态私有方法给静态方法服务的
1.接口代表规则,是行为的抽象。想要让哪个类拥有一个行为,就让这个类实现对应的接口就可以了。
2.当一个方法的参数是接口时,可以传递接口所有实现类的对象,这种方式称之为接口多态。
设配器设计模式:
![](https://i-blog.csdnimg.cn/blog_migrate/c4b81e443b327473095749f619dbab8c.png)
内部类:
内部类和外部类是分开的2个字节码文件
在一个类的里面再定义其他类
![](https://i-blog.csdnimg.cn/blog_migrate/44d91cc4b3ee4166d4b5c7818fe9252b.png)
成员内部类:
写在成员位置的,属于外部类的成员。
成员内部类可以被一些修饰符所修饰,比如: private,默认,protected,public,static等
jdk16以前成员内部类不能定义静态变量
获取成员内部类对象:
1:在外部类中编写方法,对外提供内部类的对象
2.直接创建:外部类名.内部类名 对象名 =外部类对象.内部类对象
eg:
outer.Inner oi = new outer( ).new Inner();
内部类是private :外面不能之间创建,可以在外部类中提供创建。
直接创建:父类多态,因为在外new的时候没法说明内部类存在
内部类调用外部类同名变量:
外部类名称.this.变量
![](https://i-blog.csdnimg.cn/blog_migrate/1f58bb890a2d545b642c79b9ae35158f.png)
静态内部类:
用static修饰;静态内部类只能访问外部类中的静态变量和静态方法,如果想要访问非静态的需要创建对象。
![](https://i-blog.csdnimg.cn/blog_migrate/f190b2eb7b25f7cdc4417cda7bba0dff.png)
局部内部类:
1.将内部类定义在方法里面就叫做局部内部类,类似于方法里面的局部变量。
2.外界是无法直接使用,需要在方法内部创建对象并使用。
3.该类可以直接访问外部类的成员,也可以访问方法内的局部变量。
匿名内部类:
![](https://i-blog.csdnimg.cn/blog_migrate/2181454594a7bbb4ca0b631acb81edca.png)
可以写在成员位置,也可以写在局部位置