Java基础系列文章
Java基础(十):关键字static、代码块、关键字final
Java基础(十八):java比较器、系统相关类、数学相关类
目录
一、面向对象编程概述
- 早期先有面向过程思想,随着软件规模的扩大,问题复杂性的提高
- 面向过程的
弊端
越来越明显,出现了面向对象思想并成为目前主流的方式
面向过程的程序设计思想(Process-Oriented Programming),简称
POP
- 关注的焦点是
过程
:过程就是操作数据的步骤- 如果某个过程的实现代码重复出现,那么就可以把这个过程抽取为一个
函数
- 这样就可以大大简化冗余代码,便于维护
- 如果某个过程的实现代码重复出现,那么就可以把这个过程抽取为一个
- 典型的语言:C语言
- 代码结构:以
函数
为组织单位 - 是一种“
执行者思维
”,适合解决简单问题。扩展能力差、后期维护难度较大
面向对象的程序设计思想( Object Oriented Programming),简称
OOP
- 关注的焦点是
类
:在计算机程序设计过程中,参照现实中事物- 将事物的属性特征、行为特征抽象出来,用类来表示
- 典型的语言:Java、C#、C++、Python、Ruby和PHP等
- 代码结构:以
类
为组织单位。每种事物都具备自己的属性
和行为/功能
- 是一种“
设计者思维
”,适合解决复杂问题。代码扩展性强、可维护性高
类比举例:人把大象装进冰箱
- 面向过程
1.打开冰箱
2.把大象装进冰箱
3.把冰箱门关住
- 面向对象:把这些步骤和功能进行封装,封装时根据不同的功能,进行不同的封装
人{
打开(冰箱){
冰箱.开门();
}
操作(大象){
大象.进入(冰箱);
}
关闭(冰箱){
冰箱.关门();
}
}
冰箱{
开门(){ }
关门(){ }
}
大象{
进入(冰箱){ }
}
二、类和对象
1、类和对象概述
类(Class)
和对象(Object)
是面向对象的核心概念- 类:具有相同特征的事物的抽象描述,是
抽象的
、概念上的定义 - 对象:实际存在的该类事物的
每个个体
,是具体的
,因而也称为实例(instance)
可以理解为:类 => 抽象概念的人
;对象 => 实实在在的某个人
2、成员变量(field)
- 语法格式:
[修饰符1] class 类名{
[修饰符2] 数据类型 成员变量名 [= 初始化值];
}
- 数据类型
- 任何基本数据类型(如int、Boolean) 或 任何引用数据类型
- 成员变量名
- 属于标识符,符合命名规则和规范即可
- 初始化值
- 根据情况,可以显式赋值;也可以不赋值,使用默认值
- 示例:
public class Person{
private int age; //声明private变量 age
public String name = “Lila”; //声明public变量 name
}
3、成员变量 vs 局部变量
变量的分类:成员变量与局部变量
- 在方法体外,类体内声明的变量称为成员变量
- 在方法体内部等位置声明的变量称为局部变量
成员变量 与 局部变量 的对比
相同点
- 变量声明的格式相同: 数据类型 变量名 = 初始化值
- 变量必须先声明、后初始化、再使用
- 变量都有其对应的作用域。只在其作用域内是有效的
不同点
- 声明位置和方式
- 实例变量:在类中方法外
- 局部变量:在方法体{}中或方法的形参列表、代码块中
- 在内存中存储的位置不同
- 实例变量:
堆
- 局部变量:
栈
- 实例变量:
- 生命周期
- 实例变量:和对象的生命周期一样,随着对象的创建而存在,
随着对象被GC回收而消亡
,而且每一个对象的实例变量是独立的 - 局部变量:和方法调用的生命周期一样,每一次方法被调用而在存在,
随着方法执行的结束而消亡
,而且每一次方法调用都是独立
- 实例变量:和对象的生命周期一样,随着对象的创建而存在,
- 作用域
- 实例变量:通过对象就可以使用,本类中直接调用,其他类中“对象.实例变量”
- 局部变量:出了作用域就不能使用
- 修饰符
- 实例变量:public,protected,private,final,volatile,transient等
- 局部变量:
final
- 默认值
- 实例变量:
有默认值
- 局部变量:
没有
,必须手动初始化。其中的形参比较特殊,靠实参给它初始化
- 实例变量:
对象属性的默认初始化赋值
当一个对象被创建时,会对其中各种类型的成员变量自动进行初始化赋值
三、方法(method)
1、方法的概述
方法
是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为函数
或过程
- 将功能封装为方法的目的是,可以
实现代码重用,减少冗余,简化代码
- 声明方法的语法格式
[修饰符] 返回值类型 方法名([形参列表])[throws 异常列表]{
方法体的功能代码
}
- 方法通过方法名被调用,且只有被调用才会执行
- 方法中可以调用类中的方法或属性,不可以在方法内部定义方法
2、方法调用内存分析
- 方法
没有被调用
的时候,都在方法区
中的字节码文件(.class)中存储 - 方法
被调用
的时候,需要进入到栈内存
中运行- 方法每调用一次就会在栈中有一个
入栈
动作 - 即给当前方法开辟一块独立的内存区域
- 用于存储当前方法的局部变量的值
- 方法每调用一次就会在栈中有一个
- 当方法执行结束后,会释放该内存,称为
出栈
- 如果方法有返回值,就会把结果返回调用处
- 如果没有返回值,就直接结束,回到调用处继续执行下一条指令
- 栈结构:先进后出,后进先出
3、方法的重载(overload)
- 方法重载
- 在同一个类中,允许存在一个以上的同名方法,只要它们的参数列表不同即可
- 参数列表不同,意味着参数
个数
、类型
或顺序
的不同
- 重载的特点
- 与修饰符、返回值类型无关,只看参数列表,且参数列表必须不同
- 判 断与
void show(int a,char b,double c){}
构成重载的有:
a)void show(int x,char y,double z){} // no
b)int show(int a,double c,char b){} // yes
c) void show(int a,double c,char b){} // yes
d) boolean show(int c,char b){} // yes
e) void show(double c){} // yes
f) double show(int x,char y,double z){} // no
g) void shows(){double c} // no
4、方法的参数传递机制
形参和实参
- 形参(formal parameter):在定义方法时,方法名后面括号()中
声明的变量
称为形式参数,简称形参 - 实参(actual parameter):在调用方法时,方法名后面括号()中的
使用的值/变量/表达式
称为实际参数,简称实参
参数传递机制:值传递
- Java里方法的参数传递方式只有一种:
值传递
。即将实际参数值的副本(复制品)传入方法内,而参数本身不受影响。- 形参是基本数据类型:将实参基本数据类型变量的
“数据值”
传递给形参 - 形参是引用数据类型:将实参引用数据类型变量的
“地址值”
传递给形参
- 形参是基本数据类型:将实参基本数据类型变量的
四、构造器(Constructor)
- 我们new完对象时,所有成员变量都是默认值,如果我们需要赋别的值,需要挨个为它们再赋值,太麻烦了
- 我们能不能在new对象时,直接为当前对象的某个或所有成员变量直接赋值呢?
- 可以,Java给我们提供了
构造器(Constructor)
,也称为构造方法
构造器的作用
- new对象,并在new对象的时候
为实例变量赋值
- 举例:Person p = new Person(“Peter”,15);
构造器的语法格式
[修饰符] class 类名{
[修饰符] 构造器名(){
// 实例初始化代码
}
[修饰符] 构造器名(参数列表){
// 实例初始化代码
}
}
- 构造器名必须与它所在的类名必须相同
- 它没有返回值,所以不需要返回值类型,也不需要void
- 构造器的修饰符只能是权限修饰符
- 不能被其他任何修饰
- 比如,不能被static、final、synchronized、abstract、native修饰
- 不能有return语句返回值
使用说明
- 当我们没有显式的声明类中的构造器时,系统会默认提供一个无参的构造器并且该构造器的修饰符默认与类的修饰符相同
- 当我们显式的定义类的构造器以后,系统就不再提供默认的无参的构造器了
- 在类中,至少会存在一个构造器
- 构造器是可以重载的
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/148567.html