以下均为个人答案,如有不对,请指出,谢谢。。。。
1、什么是类和对象?什么是面向对象程序设计?
类是现实世界或思维世界中的实体在计算机中的反映,它将数据以及这些数据上的操作封装在一起。
对象是具有类类型的变量。
2、局部变量、实例变量和静态变量(类变量)的定义?如何使用?区别?
局部变量:存放于栈中 作用域:当前方法里,故可以与成员变量同名 无默认初始值,必须赋初值
成员变量:存放于堆中 作用域:当前类中 有默认初始值为0,故可以不用赋初值;
实例变量:在类中声明,但在方法的外面,构造函数或任何块。
3、重载(Overload)和重写(Override)的区别?
重载:同一个类;函数名相同;参数的个数和类型不同;和返回值无关
重写:类与类之间有继承关系(不同的类);子类的成员方法和父类的成员方法满足:方法名相同、参数类型一致、返回类型相同;子类的访问权限不能低与父类的访问权限;声明为final的方法不能被重写。
4、封装、继承、多态的定义?优缺点?
封装:定义:把对象的属性和行为结合为一个独立的整体,并尽可能隐藏对象的内部实现细节。
作用:提高了程序的可复用性和可维护性,降低了程序员保持数据与操作内容的负担,保护了私有数据,减少了可能的模 块间干扰,达到降低程序复杂性、提高可控性的目的。
实施:利用get set方法 安全性 、灵活性
继承:优点:提高代码复用性、类与类之间产生了关系,层次关系明确、可扩展性
缺点:耦合度提高
关键字:extends
特点:不支持多继承、支持多层继承,子类继承父类非私有化的成员变量和方法
多态:定义:就是一个对象对应着不同类型(对象的多种形态)
优点:提高代码复用性、扩展性、可维护性(前期定义的代码可以使用后期定义内容)
缺点:前期定义的内容不能使用后期定义特有的内容
特点:前提:必须有关系(继承,实现),要有覆盖; 父类或者接口的引用指向其子类的对象
5、抽象类和接口的定义?区别?分别什么时候使用?
抽象类:定义:随着继承层次中一个个的新子类的定义,类变得原来越具体,而父类更一般普通
类的设计应该保证父类和子类能够共享特征,有时候将父类设计的特别抽象,以至于没有具体的方法体
接口:定义:是一个抽象类型,是抽象方法的集合,接口只是一种形式,接口自身不能做任何事情。
接口与抽象类的异同:
抽象类 接口
设计原则: 抽象类: 动作抽象 接口:行为抽象
声明 abstract 类名 interface 接口名
特点: 继承 单继承 实现 多实现
内部: 有变量、有构造函数、有普通方法 没有变量、构造函数、普通方法
关键字 extends 继承 implements 实现
相同:都不能被实例化
接口与抽象类什么时候使用?
抽象继承:xxx是yyy的一部分(如studen是person的一部分)
接口实现:xxx包含yyy的一部分(如student包含Smoking)
接口:行为抽象(范围更广泛) 抽象:动作抽象(具体的动作)
抽象继承 is a 子类和父类(基类)关系 接口:实现
(个人理解:行为是指一种持续性的动作或举止,不是一瞬间完成的,而动作就是具体的某个动作,可以一瞬间完成的。比如,吃饭是行为,吃是动作;跑步是行为,跑是动作;抽烟是行为,抽是动作)
6、向上造型表现形式?
子类的对象可以向上造型为父类的类型。即父类引用子类对象,这种方式被称为向上造型。
如:Person pstu = new Student();(Student为子类,Person为父类 )
7、static、final修饰的成员变量和成员方法各有什么用法?
final:修饰类:被修饰的类不能被继承
修饰方法:被修饰的方法不能被重写
修饰变量:被修饰的变量不能被重新赋值
static:修饰变量:静态变量(类变量),静态变量是共享的,即该类的多有对象公用该变量
修饰方法:静态方法,静态方法不能访问非静态变量
修饰代码块:静态代码块,在加载类的时候运行,可以为静态变量赋值
修饰内部类:静态内部类,被修饰的内部类不能访问外部类的非静态成员,并且其他类生成该内部类的方式也不一样
8、&和&&,|和||的区别?
&:不管左边的表达式是否为真,右边的都会参与运算
&&:有短路功能:左边的表达式为true时候,右边的参与运算
左边的表达式为false时候,右边的不参与运算
|:不管左边的表达式是否为真,右边的都会参与运算
||有短路功能:左边的表达式为true时候,右边的不参与运算
左边的表达式为假时候,右边的参与运算
9、静态代码块和构造代码块和构造函数分别在什么时候使用?执行流程?在继承中的执行流程?
静态代码块和构造代码块和构造函数分别在什么时候使用?
构造代码块:给所有对象进行初始化。对象一建立就运行,而且优先于构造函数执行。可被执行多次。
静态代码块:有些代码必须在项目启动的时候就执行的时候可以使用,优先于main函数执行,只执行一次
构造函数:构造函数是给对应的对象进行初始化。可被执行多次。
构造代码块:调用:在实例化的时候调用,实例化一次就调用一次
静态代码块和构造代码块和构造函数执行流程?
静态代码块->构造代码块->构造函数
关于在继承中代码块和构造函数的执行流程:
* 父类的静态代码块
* 子类的静态代码块
* 父类构造代码块
* 父类的构造方法
* 子类构造代码块
* 子类的构造方法
10、权限修饰符有哪些?作用范围?
private:私有权限,可以修饰成员、构造方法(可修饰内部类),被private修饰的成员只能够在本类中访问
public:公共权限,可以修饰成员和类,被 public 修饰的类可以跨包使用(被public修饰的类保存时文件名必须和类保持一致),若要跨包使用该类的成员,则该类的成员也要用 public 修饰。
default:默认权限,不写任何权限修饰符为默认权限,可以修饰成员和类,被该权限修饰的修饰成员和类只能在本包中使用。
protected:受保护权限,可以修饰成员(不能修饰类),在本包中和 default 权限一样,但是子类可以跨包使用父类中被 protected 修饰的成员.
本类 同包 子类 其他包和非子类
private yes no no no
default yes yes no no
protected yes yes yes no
public yes yes yes yes
11、八大基本数据类型?六大运算符?
类型 字节 包装数字类型
byte 1 Byte
short 2 Short
int 4 Integer
long 8 Long
float 4 Float
double 8 Double
char 2 Character
boolean 1 Boolean
算术运算符——赋值运算符——比较运算符——位运算符——逻辑运算符——三目运算符:
12、if和switch分别用在什么情况下?
if 用于单一的是非条件判断,处理逻辑表达式
if else 用于两种情况的条件判断
switch: case 用于多种情况的条件判断,这些情况是并列关系。 通常处理算术表达式,或字符
多个if连用 用于连环条件判断,这些条件是串联关系。前一个if的成立,是后一个if进行判断的必须条件。
13、this和super的用法?
this(当前对象)指定当前类中的 super(指的是父类的对象引用)指定调用父类的
this.成员变量 当前类的成员变量
this() 调用当前类的无参的构造函数
this.成员方法 调用当前类的成员方法
super.成员变量 父类的成员变量
super() 调用父类的无参的构造函数
super.成员方法 调用父类的成员方法