防踩雷专区
Java内存分配
A、栈:存储局部变量
B、堆:存储所有new出来的
C、方法区
D、本地方法区(系统相关)
E、寄存器(CPU使用)
如何制作一个说明书?
1、写一个工具类
2、对这个类加入文档注释
3、用工具解析文档注释
javadoc工具
4、格式:
javadoc -d 目录 -author -version java文件名
目录:就可以写一个文件夹的路径
5、帮助文档出错:找不到可以文档化的公共或受保护的类,告诉我们类的权限不够;
main方法格式
public static void main(String[] args){...}'
public:公共的,访问权限最大,易于被JVM调用;
static:静态的,不需要创建对象,通过类名,方便JVM调用;
void:无返回值,main方法被JVM调用,返回内容给JVM没有意义;
main:是一个常见的方法入口
String[] args:这是一个字符串数组,早期用来接受键盘录入的数据的;
代码:Student s = new Student();做了哪些事情?
(1)把Student.class文件加载到内存;
(2)在栈内存为s开辟空间
(3)在堆内存为学生对象申请空间
(4)给学生的成员变量进行默认初始化:null,0
(5)给学生的成员变量进行显示初始化:shen,20
(6)通过构造方法给成员变量进行初始化:yuanyuan,21
(7)对象构造完毕,把地址赋值给s变量
方法注意事项:
1、方法不调用不执行
2、方法之间是平级关系,不能嵌套定义
3、方法定义的时候,参数使用逗号隔开
4、方法在调用的时候,不用再传递数据类型
5、如果方法有明确的返回值类型,就必须有retrun语句返回
== 和 equals 区别
==
基本类型:比较的是 内容;
引用类型:比较的是 地址值;
equals
基本类型:不可以
引用类型:
如果在子类中 重写了 equals方法,比较的就是两个对象的 内容 是否相等;
如果在子类中 没有重写e quals方法,比较的就是两个对象的 地址值 是否相通;
方法重载overload vs 方法重写override
方法重载:在同一个类中,方法名相同,参数列表不同(个数、类型、顺序),与返回值、修饰符无关;
方法重写:不同类中(继承关系),方法名相同,参数列表相同(个数,类型,顺序),返回值相同或是子类,子类修饰符不能严于父类;
this 和 super 区别
1、分别是?
this代表本类对象的引用;
super代表父类存储空间的表示(可以理解为父类引用,可以操作父类成员)
2、怎么用?
a、调用成员变量
this.成员变量 调用本类的成员变量
super.成员变量 调用父类的成员变量
b、调用构造方法
this(...) 调用本类的构造方法
super(...) 调用父类的构造方法
c、调用成员方法
this.成员方法 调用本来的成员方法
super.成员方法 调用父类的成员方法
final修饰局部变量问题(面试题)
基本类型:基本类型的值不能发生改变;
引用类型:引用类型的地址值不能发生改变,但是该对象堆内存的值可以变;
static关键字
1、特点:
a、随着类的加载而加载;
b、优先于对象存在;
c、被类的所有对象共享;例如:同一个班的学生共用一个班级编号;
d、可以通过类名调用; 类名.静态变量名;
2、注意事项
a、在静态方法中没有this关键字:静态是随着类的加载而加载,this是随着对象的创建而存在的;静态比对象先存在
b、静态方法只能访问静态的成员变量和静态的成员方法;
静态变量 VS 成员变量
1、所属不同
静态变量:属于类,称为类变量;
成员变量:属于对象,称为实例变量(对象变量);
2、内存中位置不同
静态变量:存储于方法区的静态区;
成员变量:存储于堆内存;
3、内存出现时间不同
静态变量:随着类的加载而加载,随着类的消失而消失;
成员变量:随着对象的创建而存在,随着对象的消失而消失;
4、调用不同
静态变量:可以通过类名调用,也可以通过对象调用;
成员变量:只能通过对象名调用;
静态中的面试题
静态代码块,构造代码块,构造方法的执行顺序?
答:静态代码块最快(只执行一次)->构造代码块(每次调用构造方法都执行)->构造方法
封装
(1)隐藏实现细节,提供公共的访问方法
(2)好处:
隐藏实现细节,提供公共的访问方式
提高代码的复用性
提高代码的安全型
(3)设计原则
把不想让外界知道的实现细节给隐藏起来,提供公共的访问方法;
(4)private是封装的一种体现
封装:类、方法,private修饰成员变量
继承
1、概述:把多个类中相同的内容给提取出来定义到一个类中
2、如何实现继承:extends
格式:class 子类名 extends 父类名 {}
3、好处:
提高了代码的复用性
提高了代码的维护性
让类与类产生了关系,是多态的前提
4、弊端:类与类产生了关系,类的耦合性增强了
开发原则:低耦合(类与类关系)、高内聚(自己完成某件事的能力)
5、特点:
Java只支持单继承,不支持多继承
Java支持多层继承(继承体系)
6、继承注意事项:
a、子类只能继承父类所有非私有的成员(成员方法和成员变量)(打破封装性)
b、子类不能继承父类的构造方法,但可以通过super关键字去访问父类构造方法
c、不要为了部分功能而去继承
d、子类中所有的构造方法默认都会访问父类中空惨的构造方法
e、super()或者this()必须出现在第一条语句上,否则父类数据的多次初始化;
7、什么时候使用继承:满足"is a"的关系时候使用
8、子类中所有的构造方法默认都会访问父类中空参的构造方法:super()
为啥?
子类继承父类中的数据,可能会使用父类的数据,所以子类初始化之前,一定要完成父类数据的初始化;
Java继承中的成员关系
1、成员变量
子类的成员变量名称和父类中的成员变量名称一样,这个怎么访问?
子类的方法访问变量的查找顺序:
在子类方法的局部范围找,有就使用;
在子类的成员范围找,有就使用;
在父类的成员范围找,有就使用;
找不到。就报错
2、构造方法
子类的构造方法默认会去访问父类的无参构造方法;是为了子类访问父类数据的初始化
父类中如果没有无参构造方法,怎么办?
子类通过super去明确调用带参构造
子类通过this调用本身的其他构造,但是一定会有一个去访问父类构造
让父类提供无参构造
3、成员方法
子类的成员变量名称和父类中的成员方法名称一样,这个怎么访问呢?
在子类中找,有就使用;
在父类中找,有就使用;
找不到。就报错
多态
1、概念:同一个对象(事物),在不同时刻体现出来的不同状态。例如:水(固态、气态、液态)
2、多态的前提:
要有继承关系
要有方法重写
要有父类医用指向子类对象:父类 对象名 = new 子类();
3、