1.局部变量和成员变量的区别?
1)书写位置不同:
成员变量:类中,方法外!
局部变量:方法定义中,或者方法声明上
2)内置中的位置不同
成员变量:堆内存中,和对象有关系
局部变量:栈内存中,和方法有关系
3)生命周期不同:
成员变量:随着对象的创建而存在,
随着对象的创建完毕等待jvm的垃圾回收器空闲 时候回收而消失
局部变量:随着方法的调用而存在,
随着方法调用结束而消失;
4)初始化值不同:
成员变量:是可以不初始化的,需要通过对象名来赋值,存在默认初始化;
局部变量:必须在使用之前初始化,否则报错;
2.什么时候把一个定义为成员变量的时机?
如果一个类能够描述这个事物的属性,必须为定义成员变量;否则,都定义为局部变量;
3.简述this关键字,它的作用是什么?
this是当前当前类对象的地址值引用.
作用:为了区分 局部变量隐藏了成员变量,使用this加以区分.
this.成员变量名 = 局部变量名;
或者通过有参构造方法赋值.
4.什么是构造方法?目的是什么?
构造方法:方法名和类名相同
没有返回值类型
没有void
目的:为了给类的成员进行数据初始化;
注意事项:
如果没有任何构造方法,系统会默认提供无参构造方法
如果给出了有参构造方法,系统不会再提供无参构造方法,建议永远给出无参构造方法.
5.请简述匿名对象以及好处?
new 类名();
匿名对象:没有名字的对象
好处:
节省内存,没有栈内存,直接在堆内存中开辟空间,使用完成后立即被垃圾回收器回收.
一般情况:匿名对象使用一次即可,这样不需要过多的去开辟堆内存空间,直接被回收;
6.方法的形式参数如果是引用类型,那么实际参数该如何传递?
1)方法的形式参数如果是基本类型,调用该方法的时候,实际参数需要传递对应数据值即可;
2)方法的形式参数是引用类型:数组,类,接口,实际参数在进行传递需要传递当前数组对象 /类的对象/接口的对象. new :创建实例(堆内存开辟空间:空间地址值)
7.封装是什么?java中封装的体现有哪些?请举例说明。
封装是一个类中的成员变量需要对外隐藏,被private所修饰,为了保证数据的安全性,对外需提供公共的访问方法 setXXX()/ getXXX()
体现:将成员变量进行私有化,隐藏成员方法;
8.给成员变量赋值的方式?
通过set()方法;
通过自定义方法;
通过构造方法来赋值;(默认是无参)
9.在一个标准类中,如果只给出了有参构造,创建该类对象的时候使用无参构造创建,
会出现什么问题,如何解决?
方式一:手动给出无参数构造方法;
方式二:假设人家现在不需要你给出父类的无参构造方法,就需要让子类的构造方法显示的访问 父类的有参构造方法.
这样需要使用关键字super:代表父类空间标识(代表父类对象的地址值引用)
super()---访问父类的无参构造方法
super(XXX)-----访问父类的有参构造方法
这些中super一定是子类构造方法中的第一句话.
方式三:保证子类的所有构造方法中的某一个构造方法,让父类初始化完毕即可;
先通过子类的无参构造方法-----this(XXXX):访问本类(子类)的有参构造方法;
在子类的有参构造方法的第一句,让父类初始化super(XXX):间接访问父类的有参构造方法;
子类继承父类,一定要先执行父类的构造方法,初始化完毕之后才能执行子类的构造方法----分层初始化.
10.什么是继承,继承的好处?继承的特点
继承:将多个类的共性内容抽取出来,放在一个独立的类中,让这个独立的类和其他的类产生一种 关系.
好处:
可以提高代码的复用性
可以提高代码的维护性,后期便于维护,针对子类和父类进行维护.
类与类产生的继承关系,是后面多态的前提条件.
特点:
继承是单继承,不支持多继承
继承支持多级继承
顶级父类是Object类,所以每个类都会默认继承Object类
子类和父类是一对相对概念
在Java中有一个开发原则 "低耦合,高内聚"(以后所有的Java设计模式都需要遵循这一个原则)
耦合性:开发中是永远避免不了,可以降低(耦合:类和类的关系)
内聚性:指的是某个类完成某个功能的一种能力; 尽量不要产生继承关系来完成一个功能,一个类能完成一个类完成;
低耦合:降低耦合性,减少类和类的关系;
关于的注意的问题:
1.子类继承父类,对于非私有的成员,直接可以继承过来,但是如果私有成员,它可以通过公共的访问可以访问,但是直接访问的;
2.被私有修饰的东西(成员变量/成员方法),只能在当前类访问的;
11.静态代码块,构造代码块,构造方法的优先级.
12.static关键字的特点
随着类的加载而加载,优先于对象存在
不能和this共存
本身概念:共享共用,多个对象共用某个静态的东西
访问方式:类中静态的东西------"类成员"推荐使用类名访问.
类名.变量名
类名.方法名()
静态只能访问静态;
静态方法中只能访问静态变量
静态方法只能调用静态方法;
非静态方法皆可以访问静态的东西也可以访问非静态的东西;
13.子类继承父类,构造方法如何访问呢?
子类继承父类,子类的所有构造方法默认访问父类的无参构造方法;
实际开发:写代码的时候
子类继承父类:
子类的无参构造方法-------默认父类无参
子类的有参构造方法-------直接访问父类有参构造方法
14.什么是代码块?
代码块: 使用{}括起来的内容
分类:
局部代码块,就是在方法定义中使用{}
{},作用:就是限定局部变量的生命周期
构造代码块:---在类的成员位置定义的{},它有特点:在执行构造方法之前,如果类中有构造代块,
优先执行构造代码块,作用:也可以给类的成员的数据进行初始化; (实际开发很少见到构造代码块)
只要执行构造方法,如果存在构代码块,它必须优先执行,然后才是构造方法...
静态代码块:
类就加载一次,静态代码块也就执行一次!
格式
static{ --->跟静态相关的都和类有关系,随着类的加载而加载;
里面书写代码
}
静态代码块,构造方法,构造代码块
优先级:静态代码块 > 构造代码块> 构造方法,而且每次执行构造方法之前,优先执行所有的构造构造代码块;
15.文档说明书
对ArrayTool.java文件产生一个文档说明书---类似于API(Application Programming Interface:应用程序接口文档)
使用jdk安装目录里面的bin里面: javadoc.exe 指令 产生文档说书的指令
1)将ArrayTool这个java文件代码复制到本地某个磁盘上,类名和文件名称一致(先不要把package复制上去)
2)打开dos窗口,进入到这个java文件的路径下 (找到这个java文件后,这个类权限保证访问权限足够大:public)
3)会用javadoc -d 目录名称 -author -version ArrayTool.java(java源文件带后缀) 产生文档说明书.
16.什么是多态,多态的成员访问特点.
但是,写代码的时候,心中要留意内存的中的变化,否则会出现一种 "异常" ;
18.final关键字的特点
不需要单独去开辟内存空间.
20.什么是方法重写?
有抽象方法的类一定是抽象类,否则编译就会报错!
抽象的方法的格式:
根据写方法的格式一样,加入一个关键字abstract,而且没有方法体{}
public abstract 返回值类型 方法名(空参/带参) ;
抽象类的特点:
1)不能实例化 (不能创建对象)
2)必须强制子类完成事情:必须将抽象方法重写!
抽象类的子类:
如果子类是一个抽象类, 没有意义(抽象类new不了) (前提条件是这个子类没有它的子类)
研究的抽象类的子类一定会有一个具体类,这个时候通过具体类才能创建对象;
抽象的父类名 对象名 = new 具体的子类名() ; 抽象类多态
成员变量:抽象类的成员变量既可以有变量,也可以是自定义常量被final
成员方法:抽象类中既可以有抽象方法,也可也有非抽象方法
构造方法:
既可以定义无参/有参构造方法...
存在抽象类多态,有继承关系,初始化的时候,构造方法----分层初始化---->先父类初始化,子类初始化
意义:意义就是不能让它new,它如何实例化呢?肯定有具体的子类,进行抽象类多态来操作..
设计代码(设计层面)
和private关键字冲突:因为被private私有的成员方法只能在本类访问,而abstract修饰的成员
和final也冲突,被final修的成员方法,不能被重写;而抽象方法强制子类必须重写;
和static也冲突,abstract修饰的方法必须被子类重写,而static修饰的方法,算不上抽象,直接跟类
a bstract关键字 应用范围: 定义在类上---抽象类
定义在方法上----抽象方法
public abstract 返回值类型 方法名(空参/带参...) ;
abstract 返回值类型 方法/名(空参带参...) ;
否则报错;
1)提高代码的复用性,由继承保证的
2)提高代码的扩展性,由多态保证 : 父类引用指向子类对象
接口体现的是事物的一种额外功能 ;
设计理念: 体现的是一种 "like a"的关系
格式的写法
interface 接口名{ 命名规范和类名命名一样,见名知意 "大驼峰命名法"
只能为抽象方法
}
接口的子类----"子实现类"
实现
class 子类名 implements 接口名{
}
接口比抽象类还抽象---->特点:不能实例化
27.如果在使用多态时出现ClassCastEXception,说明什么?
属于运行时期异常的一种,代表"类转换异常".
使用多态操作向下转型的时候(使用不当),堆内存中信息和栈内存信息没有子父关系.
28.接口的成员特点:
1)成员变量:只能是常量,存在默认修饰符 :public static final
2)成员方法:只能是抽象方法,存在默认修饰符 public abstract
3)构造方法:没有构造方法的---通过子实现类的构造方法来实例化
接口本身意义:对外暴露这些功能,让子实现类实现 !
29.关于面向对象中牵扯关系问题:
Java中最基本的单元是类.
类和类:继承关系 extends,Java语言中只支持单继承,不支持多继承,但是可以多层继承
类和接口: 实现关系 implements;一个类继承另一个类的同时,可以实现多个接口
接口和接口:继承关系:extends 不仅支持单继承,也可以多继承!