JAVA面经-基础部分
一、JAVA的面向对象理解
答:
JAVA将对象视为一种奇特的变量,它除了可以存储数据之外还可以对它自身进行操作。
它能够直接反映现实生活中的事物,例如人、车、小鸟等,将其表示为程序中的对象。
每个对象都具有各自的状态特征(也可以称为属性)及行为特征(方法),java就是通过对象之间行为的交互来解决问题的。
面向过程
优点:性能比面向对象好,因为类调用时需要实例化,开销比较大,比较消耗资源。
缺点:不易维护、不易复用、不易扩展
面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程差
Java面向对象的三大特性
类具有三个特性:封装、继承和多态。
封转是指属性私有化
- 根据需要提供setter和getter方法来访问属性
- 隐藏具体属性和实现细节,仅对外开放接口
- 控制程序中属性的访问级别
目的:增强数据安全性,不能让其他用户随意访问和修改数据,简化编程,使用者不必在意具体实现细节,而只是通过外部接口即可访问类的成员
继承是指将多个相同的属性和方法提取出来,新建一个父类
- java中一个类只能继承一个父类,且只能继承访问权限非private属性和方法
- 子类可以重写父类中的方法,命名与父类中同名的属性
目的:代码复用
多态(Polymiorph)可以分为两种:设计时多态、运行时多态
- 设计(编译)时多态:即重载(Overload),是指java允许方法名相同而参数不同(返回值可以相同也可以不同),同一个类中允许存在一个或多个以上的同名函数,只要参数类型或参数个数不同即可
- 运行时多态:即重写(Override)必须是在继承体系中,子类重写父类方法,JVM运行时根据调用该方法的类型决定调用那个方法
目的:增加代码的灵活度
五大基本原则
1.单一职责原则SRP(Single Responsibility Principle)
类的功能要单一,不能包罗万象,跟杂货铺似的。
2.开放封闭原则OCP(Open-Close Principle)
一个模块对于拓展是开放的,对于修改是封闭的,想要增加功能热烈欢迎,想要修改,哼,一万个不乐意。
3.里式替换原则LSP(the Liskov Substitution Principle LSP)
子类可以替换父类出现在父类能够出现的任何地方。比如你能代表你爸去你姥姥家干活。
4.依赖倒置原则DIP(the Dependency Inversion Principle DIP)
高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。抽象不应该依赖于具体实现,具体实现应该依赖于抽象。就是你出国要说你是中国人,而不能说你是哪个村子的。比如说中国人是抽象的,下面有具体的xx省,xx市,xx县。你要依赖的抽象是中国人,而不是你是xx村的。
5.接口分离原则ISP(the Interface Segregation Principle ISP)
设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好。就比如一个手机拥有打电话,看视频,玩游戏等功能,把这几个功能拆分成不同的接口,比在一个接口里要好的多。
二、JAVA的8大基础数据类型
逻辑型(或称布尔型)
所占内存: 占1个字节
常量: true , false
变量: 使用boolean定义:
boolean b;
boolean bo=true;
boolean 是否=true; (不建议变量名用中文)
byte(字节型)
所占内存: 占1个字节
常量: 12、32(十进制); 033(八进制); 0x7F (十六进制)
变量: 使用byte定义:
byte by1;
byte by=033;
byte 年龄=55;
short整型
所占内存: 占2个字节
常量: 12、32(十进制); 01133(八进制); 0x117F (十六进制)
变量: 使用short定义:
short sh1;
short sh2=12;
short 速度=180;
int 整型
所占内存: 占4个字节
常量: 12、32(十进制); 01133(八进制); 0x117F (十六进制)
变量: 使用int定义:
int in1;
int in2=12;
int 速度=180;
long 整型
所占内存: 占8个字节
常量: 12、32(十进制); 01133(八进制); 0x117F (十六进制)
变量: 使用long定义:
long lo1;
long lo2=185l;
long 速度=180L;
float
所占内存: 占4个字节
常量: 3.14F、2.23f;
必须数字后要大写或小写的 f
变量: 使用float定义:
float fl1;
float fl2=12f;
float 收入=752.2F;
double
所占内存: 占8个字节
常量: 3.14D、2.23d、23.23;
数字后要大写或小写的 d(可选)
变量: 使用double定义:
double do1;
double do2=18;
double 收入=500;
double 收入2=500d;
char型; java使用Unicode字符集;
所占内存: 占2个字节
字符型用 单引号括起来
常量: 'a'、'?','!'
变量: 使用char定义:
char ch1;
char ch2='v';
char 制表符='\t';
三、传参方式
值传递:八种基本数据类型和String
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参数的值
引用传递:除String以外的所有复合数据类型,包括数组、类和接口
引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值
四、抽象类和接口的区别
抽象类是用来捕捉子类的通用特性的,而接口则是抽象方法的集合。抽象类不能被实例化,只能被用作子类的超类,是被用来创建继承层级里子类的模板,而接口只是一种形式,接口自身不能做任何事情
抽象类abstract和接口interface都不能够实例化,但可以定义抽象类和接口类型的引用。 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法

浙公网安备 33010602011771号