面向对象
概述
面向对象和面向过程
-
面向过程:侧重分步骤
-
面向对象:侧重分模块
构造方法
构造方法:主要就是用于创建对象时调用,并给对象的属性初始化赋值
权限修饰符 方法名/类名(参数列表) {方法体}
构造方法没有返回值,连void的也没有,另外构造方法的方法名必须和类名一致
如果类中没有定义构造方法,则默认有一个公共的无参构造 public 类名(){}
但是我们定义了构造方法,则不会再提供默认的无参构造
所以一般我们在创建构造方法的时候也会手动创建一个无参构造
public constructor_test2(){
}
public constructor_test2(int i){
}
public static void main(String[] args) {
constructor_test2 c1 = new constructor_test2();
}
类和对象
-
对象:
-
代码角度:
new
的一个实例,封装了成员属性 -
数据角度:封装数据和逻辑的一种方式
-
现实角度:对象就是某一个具体的个体,一切皆对象
-
设计角度:从一个实际的实体种抽象出来某些属性的一种实体表示
-
-
类:描述了一类事物的属性和特征
类中封装属性,对象封装属性值
实例化
-
加载相关类到方法区
-
在堆内存开辟内存空间
-
调用构造方法,栈内存开辟栈帧,并对堆内存进行数据初始化
-
构造方法弹栈,把堆内存内存地址返回
对象使用
Student s1 =new Student(1001,"张三",false,24,"石家庄");
Student s2 =new Student(1001,"李四",false,22,"北京");
System.out.println(s1.getId());
//对象,成员属性
s1.setName("王五");
System.out.println(s1.getName());
System.out.println(s2.getName());
Bean
属性私有化,提供对应的getter/setter
方法,提供有参构造和无参构造
POJO
:普通实体类
Model
:一般会和数据库表一一对应
常见异常
对象调用静态属性
注意事项
静态调用成员
需要创建对象调用
传值和传引用
区分成员方法和构造方法
看返回值,构造方法没有返回值,连void
都没有
This
概述
this
:是每个对象中,保存自身内存地址的一个引用类型变量(成员变量)
因此this
无法在静态上下文中使用
作用
-
用在成员方法和构造方法中,区分同名的局部变量和成员变量
-
用在构造方法中,用于重载调用当前类中其他构造方法,提高代码重用性
-
return this
可以链式调用
如何使用
区分成员变量和局部变量
重载调用构造方法
链式调用
注意
Static
概述
Static
关键字,是修饰静态的修饰符
作用
-
修饰静态变量
-
修饰静态方法
-
修饰静态语句块
如何使用
实例语句块
一般对象初始化写在构造方法中,很少写实例语句块
静态和成员的应用场景
-
静态变量是类的所有对象共有的属性和值
-
成员变量是类的所有对象共有的属性,值可以相同可以不同
封装
软件包机制
package
package
软件包机制,方便分类管理,可以解决命名冲突问题
一般采用公司域名倒序的方式命名
在java
中.package
语句 是限制class
文件的保存位置,与java
文件无关
package
语句 可以不写,如果写的话,必须在java
源文件的第一行
import
注意
注意:eclipse
编程中,按空格和回车的时候,会自动导包。此时需要注意,导入的是否是正确的
权限修饰符
继承
概述
继承:从已有类中派生出新的类,新的类会拥有父类的属性和行为
-
java
只支持单继承,这样使java
类关系比较简单 -
一个类可以被很多类继承
-
java
中继承使可以被传递的 -
如果一个类没有显示继承另一个类的话,默认继承
Object
,Object
是java
提供的根类(祖宗)
作用
继承目的:代码复用
如何使用
通过extends
表示 class
类名 extends
父类名 {}
Super
概述
super
:在子类中,通过this
表示当前对象,通过super
表示父类
作用
-
用在成员方法和构造方法中,区分父子类同名的属性
-
用在构造方法中,用于重载调用父类的构造方法
super()
,必须写在子类构造方法第一行
如何使用
区分父子类同名属性
调用父类构造
子类创建对象,一定会执行父类构造方法
注意事项
-
而
this()
也必须在构造方法第一行,所有this()
和super()
不能同时出现 -
如果子类构造方法中,没有写
this(...)
,也没有写super(...)
,则第一行默认有super()
去调用父类无参构造 -
this
和super
都不能在静态上下文中使用
覆写Override
概述
方法覆写:子类对父类方法进行重新编写
当父类功能无法满足子类需求的时候,子类可以根据需求进行覆写
覆写条件
-
必须是有继承关系的体系中
-
方法名,参数列表,返回值必须一致
-
不能比原方法有更低的访问权限
-
不能比原方法有更宽泛的异常
-
方法覆写,特指成员方法(只有成员方法可以覆写)
应用场景
当父类功能无法满足子类需求的时候,子类可以根据需求进行覆写
面试题
overload
和override
的区别?
overload
是方法重载,方法名相同,参数列表不同,参数列表不同可以是个数不同也可以是类型不同
override
是方法覆写,要求方法名,参数列表,返回值必须一致,不能有更低的访问权限,不能有更宽泛的异常
Final
概述
final
是个修饰符,表示最终的,不可更改的
作用
final
修饰的类 不能被继承
final
修饰的成员方法,不能被覆写
final
修饰的成员变量,没有默认值,必须显示赋值(不能有不赋值的情况),不能二次赋值
final
修饰的静态变量,是常量,没有默认值,必须显示赋值(不能有不赋值的情况),不能二次赋值,一般会和public
一起使用,psf: public static final
,并且常量名,一般全大写
fianl
修饰的局部变量,不能二次赋值