1.成员变量和局部变量区别:
成员变量:在类中方法外 在堆内存 随对象产生和死亡 有默认初值
局部变量:在方法内 在栈内存 随方法产生和死亡 无默认初始值,需要定义和赋值
2.匿名对象: 没有名字的对象
应用:1、调用方法,仅仅调用一次;
new student().play();
2、作为实际参数传递;
fun(new student());
3.对象内存图解:
4、类的初始化过程
1、加载class文件
2、在栈内存为变量名s开辟空间
3、在堆内存为对象开辟空间
4、对对象成员变量默认初始化
5、对对象成员变量显示初始化
6、通过构造方法赋值
7、初始化完毕,地址赋值给堆内存内的s
5、static关键字
1、随着类的加载而加载
2、优先于对象存在
3、被所有对象共享
4、可以通过类名调用
注意:static中没有this关键字,静态方法只能访问静态成员变量和静态成员方法
6、static内存图
7、代码块
1、局部代码块:在方法中出现,限定生命周期,及早释放,提高内存利用率
2、构造代码块:类中方法外,每次构造都执行,先与构造方法
3、静态代码块:用于初始化,类加载的时候执行一次
8、继承中的构造方法
子类中所有构造方法默认访问父类无参构造方法;
父类中必须有无参构造方法或者通过子类调用带参构造方法;
9、父类私有方法不能重写,子类重写访问权限必须更高;
10、final:最终,可修饰类,方法,变量
*类:不可以被继承
*方法:不可以被重写
*变量:为常量,不能被重新赋值
*局部变量:基本类型,值不能改变
引用类型,地址不能改变
11、多态:同一对象,在不同时刻体现出来的不同状态
*前提:要有继承关系、要有方法重写、要有父类引用指向子类对象
--成员访问特点:
成员变量:编译和访问都看左边;
成员方法:编译看左边,运行看右边;
静态方法:编译和运行都看左边;
*好处:
--提高了代码的维护性;
--提高了代码的扩展性;
*弊端:不能使用子类特有功能 但是可以向下转型后使用
*A:具体类多态(很少使用)
B:抽象类多态
C:接口多态
内存图:
12、抽象类,用abstract修饰
包含抽象方法一定是抽象类;抽象类不能实例化;抽象方法不能有方法体;抽象类有构造方法;
子类是具体类必须重写所有抽象方法;
成员特点:
*成员变量:即可以是变量也可以是常量;
*构造方法:有;用于初始化
*成员方法:可抽象方法,也可以是非抽象方法
抽象方法:强制子类要求做的
非抽象方法:子类继承的事情,提高代码复用性;
13、接口:
接口不能实例化,按照多态的方式来实例化;
接口的子类可以是抽象类,但是没有意义;
具体类实现接口:要重写接口中所有的抽象方法;
*成员特点:
成员变量:接口中的变量默认是静态常量
构造方法:没有构造方法
成员方法:默认public抽象方法
14、类与类、类与接口、接口与接口的关系
类与类:继承,只能单继承
类与接口:实现关系,可以单实现,多实现,还可以在继承一个类的同时实现
接口与接口:继承,可以多继承和单继承。
15、抽象类和接口的区别:
1、成员区别:
*抽象类:
成员变量:可以变量可以常量
构造方法:有
成员方法:可以抽象可以非抽象
*接口:
成员变量:静态常量
构造方法:无
成员方法:只能是抽象
2、关系区别:
类与类:继承,只能单继承
类与接口:实现关系,可以单实现,多实现,还可以在继承一个类的同时实现
接口与接口:继承,可以多继承和单继承。
3、设计理念区别:
抽象类:定义的是继承体系的共性功能
接口:定义继承体系的扩展功能
16、形式参数
具体类:该类对象
抽象类:子类对象
接口:实现了该接口的类的对象
17、返回值类型
类:返回该类的对象
抽象类: 返回抽象类的子类对象
接口:返回实现了该接口的类的对象
18、package,import,class有顺序,p>i>c
19、权限修饰符
20、内部类
特点:1、可以访问外部类成员,包括私有
2、外部类要访问内部类,必须创建对象;
内部类位置:1、成员位置:成员内部类
被静态修饰后 外部类名.内部类名 对象名 = new 外部类名.内部类名();
2、局部位置:局部内部类
A:可以直接访问外部类成员;
B:在局部位置,可以创建内部类对象,通过对象调用内部类方法来使用局部内部类功能;
*局部内部类访问局部变量必须用final修饰,因为局部变量随着方法调用完毕就消失,
而局部对象不会立即消失,为了让数据继续使用,必须定义为final类。
21、匿名内部类:
前提:存在一个类或者接口
格式: new 类名或者接口名() {重写方法;}
本质:子类或者接口的实现类的匿名对象;
22、String StringBuffer StringBuilder的区别
String是内容不可变得,后两者内容可变
StringBuffer线程安全、效率低,StringBuilder线程不安全、效率高
String作为形参传递和基本类型一样
23、正则表达式
字符:
x 字符x
\\ 反斜杠字符
\r 回车
字符类:
[abc] a、b或者c,ab不行
[^abc] 除了a、b、c以外的任意字符
[a-zA-Z] 所有英文字母
[0-9] 所有0-9字符
[1-9]{14} 1-9,一共出现4-14次
预定义字符:
. 所有字符
\d 0-9
\D 非数字
\w 单词字符:[a-zA-Z_0-9]
边界匹配器:
^ 行的开头
$ 行的结尾
\b 单词边界 不是单词的地方
数量词:
X? X,一次或没有
X* X,没有或多次
X+ 一次或多次
X{n} 恰好n次
X{n,} 至少n次
X{n,m} n-m次
24、finalize:当垃圾回收器确定不存在该对象的更多引用时,由对象的垃圾回收器调用此方法,用于垃圾回收,但不是立即执行。执行System.gc()前,系统会自动调用finalize()方法清楚对象占有的资源;