一、jdk jre jvm之间的关系
jdk: 开发工具包,如果你要开发java程序,必须安装jdk
jre: Java的运行环境,如果测试运行Java环境必须安装jre
jvm: Java虚拟机,实现Java跨平台的核心
jdk 包含 jre 包含 jvm
二、Java运行过程
Java程序→javac编译 成class→通过类加载器去加载class文件→Java命令去运行Java程序
三、gc: 垃圾回收,一个程序去运进行,是需要在电脑内存中去运行,涉及到申请内存和释放内存,有了gc程序就不需要手动去释放内存了
四、类和对象
1,什么是面向对象? 什么是面型过程?
面向对象:在开发过程中,注重的是谁能帮我去完成这件事,有对象用对象,没有对象创建一个对象(点外卖)
优点:复用性更高,容易维护和扩展;缺点:开销比较大
面向过程:注重的是中间的过程,每一个步骤都需要自己去完成
优点:开销必面向对象小,性能高一点;缺点:不容易扩展和维护 (自己做饭 )
怎么去创建一个对象? 类名 对象名=new 类名()
类和对象是面向对象方法的核心概念。类是对一类事物的描述,是抽象的,概念上的定义;对象是实际存在的该类事物的每个个体,因而也称实例。开发偶成中注重类的设计。(汽车图纸,汽车实例)
类与对象的关系:类就是对象的描述,对象就是该类的实例
五、成员变量和局部变量的区别:
1,定义的位置不同
成员变量定义在类的内部,方法之外
局部变量定义在方法的内部
2,作用域不同
成员变量作用在类的内部
局部变量作用在方法的内部
3,默认值不同
成员变量有默认值
局部变量没有默认值
4,内存位置不同
成员变量保存在堆里面
局部变量保存在栈里面
5,成员变量的访问修饰符有四个: public(公共) protected(受保护的) 缺省 private(私有的)
局部变量没有访问修饰符
六、什么是构造方法,构造方法的作用
在我们java中有时候会使用一个特殊的方法叫构造方法,也叫构造器
构造方法最最大的作用就是创建对象,就我们new的时候就是调用了构造方法
七、如何创建构造方法?
public 构造方法名(参数){ }
注意:
1.构造方法不能定义返回值
2.构造方法名必须和你类的名字一致,大小写也得一致
构造方法也是一个方法,那么可以进行方法重载吗?
可以
构造方法的作用:
1.无参构造方法就是创建对象
2.有参构造方法就是在创建对象的同时给属性赋值
注意:
如果在定义一个类时候,我没有去定义构造方法,系统默认会提供一个无参的构造方法
如果你定义了构造方法,系统将不会在提供无参构造方法
重点:如果你定义了有参构造方法,一定要加上无参构造方法
七、参数
形参:在方法定义的时候实际定义的参数,写在方法小括号;里面的参数
实参:在调用方法的时候,实际传入到方法里面的数据
参数传递过程中,有两项规则
1,对于基本数据类型来说,形参的操作不会影响实参
2,对于引用数据类型来说,形参的操作会影响实参,因为传入的是堆里面的地址,形参和实参指向的是同一块地址值
八、封装性
1,什么是封装性?
把属性通过方法封装起来,因为我们直接操作属性的时候可能会出现一些不符合实际情况的问题,封装起来以后,在方法里面加入逻辑对属性限制。
2,面向对象的第一大特征:封装性
当我创建完对象以后,如果直接通过“对象名.属性”的方式进行赋值的话,可能会出现不符合实际情况的问题,所以我们不考虑使用“对象名.属性名”的方式进行赋值,而是创建一个方法,通过"对象名.方法名"的方式进行赋值,因为我们可以在方法里面写大量的业务逻辑限制属性值。
3,如何使用封装
将属性私有化 private
提供对应的get 和set 方法,获取属性值和给属性赋值
4,封装的好处
隐藏一个类中不需要对外提供的实现细节;使用者只能通过事先定制好的方法来访问数据,可以方便的加入控制逻辑,限制对属性的不合理操作;便于修改,增强代码的可维护性;安全性更好
5,面向对象的第二大特征:继承性?
1.什么是继承?允许子类拥有父类的属性和行为
2.优点:提高了代码的复用性
缺点:就是类和类之间的耦合度变高了
3.继承的语法
class 子类 extends 父类{
}
4.继承的特点
(1).子类继承父类以后,父类声明的属性和行为子类都可以获取 父》儿子
(2).子类除了通过继承获取了父类的属性和方法外,还可以自己定义独有的属性和方法 师父》徒弟
子类的功能永远比父类多
(3).java是单继承的,一个子类只能继承一个父类,一个父类可以有多个子类
一个子类可以在派生一个子类吗?可以 新派生的子类同时可以获取学生类里面的独有属性和方法,
还可以或人类里面的属性和方法 孙子>父亲>爷爷
5.方法重写:如果父类的方法体满足不了子类要求,子类可以重写父类的方法
要求:
(1)子类重写父类的方法,要求方法名、形参列表、返回值类别必须和父类一致
(2)子类重写的方法的访问修饰符权限不能低于父类的访问修饰符
(3)子类方法和父类方法必须同为static或者非static
常见面试题*
方法重载(overload)和方法重写(override)的区别
(1).方法重载要求方法名相同、形参列表必须不同(参数个数、类型、类型的顺序)和返回值无关
(2).方法重写要求方法名、形参列表、返回值类型必须和父类一致,访问修饰符不能小于父类的
(3).方法重载必须在同一个类里面进行重载
(4).方法重写必须存在继承关系,发生在子类和父类之间
九、运行一段程序,申请电脑内存,内存都是jvm进行管理的
内存会分为五部分:
1,栈(stack):主要就是存放局部变量
2,堆(Heap):new出来的东西都在堆里面,在对堆里面的变量都是成员变量,都会要默认值
整数:默认值为0;
浮点数默认值为0.0
字符默认是空格
布尔默认是false
引用类型默认是null
3, 方法区(Method Area):存放class文件
4,本地方法区:(Native Method Area):与操作系统有关
5,寄存器(pc Register):与cup有关
十、final关键字
可以修饰什么?
1.类
2.方法
3.成员变量
4.局部变量
修饰类,代表这个类是一个最终类
这个类不能被继承,但是可以继承别的类
修饰方法,就是一个最终方法
这个方法不能被重写
修饰成员变量,成员变量的值不可改变
1.成员变量不会再有默认值
2.如果加了final关键字,需要对成员变量直接赋值
修饰局部变量,局部变量就变成了一个常量
一旦赋值不可改变
十一、什么是多态?
1,多态的理解
(1)同一个动作作用于不同的对象产生的不同的行为(多种形态)
(2)多态就是一个对象的多种形态(金毛是宠物也是狗)
2,多态的体现方式
(1)基于继承的实现,不同的子类重写了父亲方法以后体现的不同形式
(2)接口的实现
3,以下都是多态的条件
(1)继承:子类去继承父类 Dog extends Pet
(2) 重写:子类重写父类的方法
(3)重载:同一个方法名,根据形参不同,实现的功能也不同
(4)子类对象的多态性:父类的引用指向子类
4,多态的类型
(1)编译时的多态:方法的重载(在编译期间,请用相同的方法名根据不同的参数列表来确定调用的是哪个方法)
(2)运行时的多态:方法的重写(只有在运行期间在能确定使用的对象类型,才能确定变量的引用指向哪个实例)
十二、程序分为两种状态: 编译状态,运行状态
对于多态来说,编译时看左边,会把PI变量看成是pet类类型;运行时看右边,真正执行的对象,也就是子类对象,执行的就是子类重写后的方法
十三、向上转型和向下转型
向上转型:将子类对象交给父类的引用,可以自动类型转换
向下转型:把父类转成子类,需要强制类型转换
十四、super关键字和this关键字的区别?*
this调用本类中的属性,也就是类中的成员变量;
super关键字可以修饰属性、方法、构造方法
1.当子类和父类的属性名同名时,默认会使用子类的属性吧,咱们可以通过
"super.属性名"调用父类的属性
2.子类重写父类方法后,如果子类想再次调用父类重写前的方法,可以super.方法名
调用父类重写前的方法
3.super修饰构造方法,通过在子类构造方法中使用"super(形参)"来显示的调用父类的构造方法
(1)super()必须放在构造方法的首行
(2)在构造方法内部"this(形参)"或"super(形参)"只能出现一个
(3)在构造方法中,如果不显示的使用"super(形参)"的方式调用父类对应的构造方法,默认会
调用父类的构造方法,只是给你隐藏掉了
Object:所有的类都继承Object
十五、
面试重点:==和equals的区别?
1,= =: 比较运算符,
(1)可以在基本数据类型和引用数据类型中使用
(2)如果比较基本数据类型的话,比较的是比较的是两个变量的值是否相等
(3)如果比较引用数据类型的话,比较的是两个对象的地址值是否相等
2,equals()的使用
(1)equals 是一个方法
(2)只能对引用书库类型比较
(3)object类里面是这么定义的
public boolean equals (object obj){
return(this = = obj);
}
发现它还是通过= = 进行补缴的两个对象。object定义的两个方法和= = 的作用一样,实际比较的是两个对象的地址值是否相等
(4)像String,Date,File, 包装类等等都重写了equals方法,冲刺额以后的比较的不是地址,而是两个对象的“实体内容”是否相等
(5)通常情况下,我们自己定义的类是没有重写equals方法的,如果比较两个对象的实体内容是否相等,我们需要重写equals方法,一般情况下都会进行重写
重写原则:比较两个对象的实体内容是否相等,如果没有重写,没有区别,如果重写了,那么equals比较的是两个内容是否相等
十六,List 和Set 的区别:
都是collection子接口
list:存储有序的,可以重复的数据,以数组为底层实现
set:存储无序的,不可重复的数据,以map为底层实现
十七,三种遍历方式:
1,迭代器,Iterator, hasnext() 和 next()
Collection coll = new SrrayList();
coll.add(1);
coll.add(“name”);
Iterator i = coll.iterator();
while(i.hasnext()){
System.out.println(i.next());
}
2, 增强for循环
for(Object o:coll){
System.out.priltln(o);
}
3,把集合转成数组
Object [ ] objects = new.toArray();
for(object o:objects){
System.out.pritln(o);
}
十八,
ArrayrList 、LinkedList 、Vector
相同点:
1,都是list集合的实现类
2,存在数据的特点相同:有序的,可重复的
不同点:
1,ArraryList:主要实现类,底层就是数组 Object[] elementData, 线程不安全,查询速度比较快
2,LinkedList: 底层使用双向链条的形式进行存储的,添加、删除速度高
3,Vector:是list接口的古老实现类,线程安全的,效率比较低,Object[] elementData