J2EE基础知识学习(更新ing)
封装:
1如何从现实世界中抽象出类?
现实世界:结合软件工程学的开发模式:瀑布模式 (先有需求分析)
根据需求分析抽象出类
类: 属性 + 变量(类型 长度 最大值 最小值)
行为 + 功能 + 方法 (方法名 参数列表 返回值类型 方法体业务功能等)
一个类可以包含以下类型变量:
- 局部变量:在方法、构造方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。
- 成员变量:成员变量是定义在类中,方法体之外的变量。这种变量在创建对象的时候实例化。成员变量可以被类中方法、构造方法和特定类的语句块访问。
- 类变量:类变量也声明在类中,方法体之外,但必须声明为 static 类型。
2构造方法的特点和作用是什么?
构造方法特点:
1:构造方法名和类名保持一致
2:没有返回值类型(void都没有)
3:构造方法可以带参可以不带参 (具有重载的特征)
4:如果定义有带参的构造方法,默认(编辑器生成的)的无参构造方法自动隐藏不做使用
5:构造方法不能继承
6:不能直接手动调用
作用:
1:创建类的实例 (new Object)
2:创建对象的同时进行初始化处理
3什么是默认的构造方法?
如果没有显式地为类定义构造方法,Java 编译器将会为该类提供一个默认构造方法。
如果定义了一个构造方法,那么会让默认的无参构造方法失效。(但是如果手动定义一个无参构造方法,无参构造方法还可以使用)
4什么是方法重载?(仅仅与参数列表有关:参数的个数或者类型不同)
一个类的两个方法,相同的名字,有不同的参数列表。
重载的方法必须拥有不同的参数列表。你不能仅仅依据修饰符或者返回类型的不同来重载方法。
5如何快速实现POJO类的封装?
POJO
1:属性
2:构造方法
3:getter setter方法
4:简单的方法
5:实现序列化接口 implement Serializable
序列化 和 反序列化{
序列化:对象转化为字节序列
反序列:字节序列还原成对象
作用:通过RPC(远程过程调用) 网络传输或者对内容的对象进行持久化的时候(字节序列传输)
应用场景:把对象持久化到磁盘(数据库)
}
lombox插件 快速生成pojo (众多的get和set方法)
6封装的好处是什么?
封装(Encapsulation)是面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节:
- 将类的某些信息隐藏在类的内部,不允许外部程序进行直接的访问调用。
- 通过该类提供的方法来实现对隐藏信息的操作和访问。
- 隐藏对象的信息。
- 留出访问的对外接口。
封装作用:
- 对成员变量实行更准确的控制。
- 封装可以隐藏内部程序实现的细节。
- 良好的封装能够减少代码之间的耦合度。
- 外部成员无法修改已封装好的程序代码。
- 方便数据检查,有利于保护对象信息的完整性,同时也提高程序的安全性。
- 便于修改,体高代码的可维护性。
封装好处:
隐藏内部实现细节
数据与操作分离
提高复用和维护性
降低数据与操作的耦合
7什么是类方法?什么是类属性?
类方法(静态方法)使用static修饰的方法
类属性静态属性 使用static修饰的属性
8请说出关于static修饰符的相关知识点?
修饰内部类
修饰方法
修饰代码块 (static()随着类加载只执行一次,优先级高 (类加载: 装载-》链接-》初始化 )
可以使用类名直接调用静态方法
可以使用类名直接调用静态方法或属性
静态方法中不能访问非静态方法或者属性(因为静态方法和属性都是类级别的 比对象级别高 )
非静态方法可以访问静态方法或属性
static不能修饰局部变量
9请说出关于this修饰符的相关知识点?
this指向的当前对象的引用
this.成员变量
this()访问本类构造方法
this(xx xx)调用对应构造方法 必须是构造方法的第一有效语句
this关键字用法:
1,本类成员方法中,访问本类的成员变量。
2,本类成员方法中,访问本类的另一个成员方法。
3,本类的构造方法中,访问本类的另一个构造方法。
注意:
- this关键字同super一样,必须在构造方法的第一个语句,且是唯一的。
- this与super不能同时存在。
10请说出java中四个常用的访问权限修饰符?
public: 所修饰的类、变量、方法,在内外包均具有访问权限;
protected: 这种权限是为继承而设计的,protected所修饰的成员,对所有子类是可访问的,但只对同包的类是可访问的,对外包的非子类是不可以访问;
包访问权限(default): 只对同包的类具有访问的权限,外包的所有类都不能访问;
private: 私有的权限,只对本类的方法可以使用;
注意: 要区分开 protected 权限、包访问权限,正确使用它们;
- 当某个成员能被所有的子类继承,但不能被外包的非子类访问,就是用protected;
- 当某个成员的访问权限只对同包的类开放,包括不能让外包的类继承这个成员,就用包访问权限;
继承:
1请说出java中关于继承的相关知识点?
继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
如果在父类中拥有私有属性(private修饰),则子类是不能被继承的。
只支持单继承,即一个子类只允许有一个父类,但是可以实现多级继承,及子类拥有唯一的父类,而父类还可以再继承。
子类可以继承父类的方法和属性
好处:实现代码复用 减少代码量 易于软件扩展
使用:extends
public class FU {}
public class Zi extends FU{}
2Object类的相关知识点?
Java Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法。
物理包在:rt.jar包 (逻辑包:java.lang//不需要导入,默认导入)
Java native关键字的意思就是通知操作系统, 这个函数你必须给我实现,因为我要使用。 所以native关键字的函数都是操作系统实现的, java只能调用,Java不直接操作底层,而java要实现对底层的控制,就需要一些其他语言的帮助,这个就是native的作用了。表示用通过JVM用的其他语言控制。
3关于super修饰符的相关知识点?
super()关键字的用法
super.父类的属性
super.父类的方法
super();调用父类默认的构造方法
super(xx xx)调用父类对应带参构造方法
注意:
- this关键字同super一样,必须在构造方法的第一个语句,且是唯一的。
- this与super不能同时存在。
1,子类的成员方法中,访问父类的成员变量。
2,子类的成员方法中,访问父类的成员方法。
3,子类的构造方法中,访问父类的构造方法。
4方法重写必须满足的要求是什么?
子类可以重写父类的方法
要求{
方法名相同
参数列表相同
返回类型相同或是其子类
不能缩小重写方法的权限
重写方法不能抛出新异常
}
5子类不能继承父类的哪些”财产”?
private修饰的东西
父类的构造方法不能继承
6抽象类和抽象方法的特点是什么?
抽象类:abstract修饰类
抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法的访问方式和普通类一样。
由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用。
抽象类中不一定有抽象方法
抽象类不能实例化
抽象方法:abstract修饰方法
如果你想设计这样一个类,该类包含一个特别的成员方法,该方法的具体实现由它的子类确定,那么你可以在父类中声明该方 法为抽象方法。
抽象方法存在于抽象类中或者接口中
抽象方法与抽象类的现实意义
声明抽象方法会造成以下两个结果:
- 如果一个类包含抽象方法,那么该类必须是抽象类。
- 任何子类必须重写父类的抽象方法,或者声明自身为抽象类。
继承抽象方法的子类必须重写该方法。否则,该子类也必须声明为抽象类。最终,必须有子类实现该抽象方法,否则,从最初的父类到最终的子类都不能用来实例化对象。
抽象类总结规定
- \1. 抽象类不能被实例化(初学者很容易犯的错),如果被实例化,就会报错,编译无法通过。只有抽象类的非抽象子类可以创建对象。
- \2. 抽象类中不一定包含抽象方法,但是有抽象方法的类必定是抽象类。
- \3. 抽象类中的抽象方法只是声明,不包含方法体,就是不给出方法的具体实现也就是方法的具体功能。
- \4. 构造方法,类方法(用 static 修饰的方法)不能声明为抽象方法。
- \5. 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类。
7abstract关键字可以修饰什么?不能修饰什么?
修饰类、方法
不能修饰属性和构造方法、类方法
作用:抽象类是用来捕捉子类的通用特性的,是被用来创建继承层级里子类的模板。现实中有些父类中的方法确实没有必要写,因为各个子类中的这个方法肯定会有不同;而写成抽象类,这样看代码时,就知道这是抽象方法,而知道这个方法是在子类中实现的,所以有提示作用。
8 final关键字可以修饰什么?不能修饰什么?
修饰类:不可继承
修饰属性:必须将变量赋值(变为常量),不可修改
final double PI=3.14;
修饰方法:该方法不能被重写
不能修饰构造方法
9继承条件下构造方法的调用规则是什么?
super 显式调用父类的构造方法的规则优先
如果没有super显式去调用构造方法,使用默认的构造方法
多级继承条件下:每次找更高一级父类的构造方法,直到Object类的默认构造方法,然后再从上到下执行。
10请说出方法重载与方法重写的区别?
1、方法重写(Override)
概念:
重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
好处:
重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。
注意:
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。
在面向对象原则里,重写意味着可以重写任何现有方法。
重写规则:
参数列表必须完全与被重写方法的相同;
返回类型必须完全与被重写方法的返回类型相同;
访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
父类的成员方法只能被它的子类重写。
声明为final的方法不能被重写。
声明为static的方法不能被重写,但是能够被再次声明。
子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
构造方法不能被重写。
如果不能继承一个方法,则不能重写这个方法。
2、方法重载(Overload)
概念:
重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
注意
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。(意思就是必须修改参数列表)
最常用的地方就是构造器的重载。
重载规则:
被重载的方法必须改变参数列表(参数个数或类型或顺序不一样);
被重载的方法可以改变返回类型;
被重载的方法可以改变访问修饰符;
被重载的方法可以声明新的或更广的检查异常;
方法能够在同一个类中或者在一个子类中被重载。
无法以返回值类型作为重载函数的区分标准。