开始学面向对象,感觉来了
day04
面向对象
面向过程:强调的是功能行为,以函数为最小单位,考虑怎么做。
面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑由谁来做。
面向对象的两个要素:
类:是对一类事物的描述,是抽象的,概念上的定义
对象:是实际存在的该类事物的每个个体,因此也称为实例(instance)
- 面向对象程序设计的重点就是类的设计
- 设计类:就是设计类的成员
对象就是类的实例化
类和对象
属性 = 成员变量 = Field
方法 = (成员)方法 = 函数
类描述了对象的基础属性和功能,而想要使用一个具体的对象时,则需要去创建一个对象(即实例化),然后赋予其独特的属性,这样就通过类创建了一个实际存在的对象。
如果创建了一个类的多个对象,那么每个对象都拥有其独特的属性(非static)。
这意味着每个对象都是独立的,修改某一个对象时,不会影响到另一个对象。
类中属性的使用
属性(成员变量) 和 局部变量的区别
相同点:
- 定义变量的格式:数据类型 变量名 = 变量值
- 先声明,后使用
- 变量都有其对应的作用域
不同点:
- 在类中声明的位置不同:属性是直接定义在类中,而局部变量定义在方法内、代码块中、构造器的变量。
- 属性可以使用修饰符如:public、private、缺省、protected ,局部变量不可以使用修饰符。
- 模式初始化的类型:类的属性,根据其类型,都有默认初始化值,局部变量没有初始化值,所以在调用时,第一要显式的去传参。
- 在内存中加载的位置:属性是在堆内存中,局部变量是在栈内存中
类中方法的声明和使用
方法的声明:权限修饰符 返回值类型 方法名(形参){
方法体
}
返回值:当有返回值时,则返回对应类型的数据,不然会报错,而没有返回值时,return表示方法结束。
形参列表,可以是0个、1个、2个…… 参数中间用(,)隔开。
方法名:属于标识符,主要是遵循规范,见名知意
方法的重载
一个类中允许存在多个方法名相同的方法,前提是他们的参数个数或者参数类型不同即可。
方法是否重载与返回值的类型无关。
方法体现的是编译时的多态性。
int add(int a,int b);
int add(int a,int b,int c);
int add(double a,double b);
可变参数列表
可变个数形参:数据类型 … 变量名
public void show(String ... strs)
如果列表参数中,不止可变个数形参,可变个数形参需要放到列表最右
public void show(int id,String ... strs)
可变个数形参在方法的参数中,最多存在一个
方法参数的值传递机制
Java里方法的参数传递方式只有一种:值传递。
形参是基本数据类型,将实参基本数据类型变量的“数据值”传递
形参是引用数据类型,将实参引用数据类型变量的“地址值”传递
简而言之,基本数据类型传数据,引用数据类型传地址
int[] i = new int[10];
System.out.println(i);//[I@74a14482 返回为地址值
char[] c = new char[10];
System.out.println(c);// 返回空,实际上是返回字符串
递归
递归方法:一个方法体内调用它自身。
//计算1-100之间所有数的和
public int getSum(int n){
int total = 0;
if(n == 1){
return 1;
}else {
return n + getSum(n-1);
}
}
面向对象的特征之一:封装和隐藏
隐藏对象内部的复杂性,只对外公开简单的接口。便于外接调用,从而提高了系统的可扩展性、可维护性。通俗来说,就是把该隐藏的隐藏起来,该暴露的暴露出来,这就是封装性的设计思想。
封装性的体现:
将类的属性私有化(private),同时提供公共(public)的方法去获取(getter)和设置(setter)属性。
不对外暴露的私有方法、单例模式……
修饰符
封装性的体现:需要权限修饰符来配合
Java规定的4种权限:private、缺省、protected、public
| 修饰符 | 类内部 | 同一个包 | 不同包的子类 | 同一个工程 |
|---|---|---|---|---|
| private | Yes | |||
| default(缺省) | Yes | Yes | ||
| protected | Yes | Yes | Yes | |
| public | Yes | Yes | Yes | Yes |
4种权限可以修饰类以及类的内部结构:属性,方法,构造器,内部类
修饰类,只能用缺省和public
构造器
类的结构之三:构造器(constructor)的使用
构造器的作用:创建对象
如果没有显式的定义类的构造器,系统会默认提供一个空参的构造器。
构造器的定义:权限修饰符 类名(){}
一个类中定义的多个构造器,彼此构成重载
一旦我们显式的定义了类的构造器之后,系统就不在提供默认的空参构造器
JavaBean
JavaBean是一种Java语言写成的可重用组件
JavaBean:主要是由:public的类,一个无参的构造器,属性及其setter和getter构成
this关键字
this关键字的使用,this用来修饰、调用:属性、方法、构造器
this可以理解为:当前对象
在类的方法中,我们可以使用"this.属性"和”this.方法“的方式,调用当前对象属性和方法。一般情况下开省略,但当方法的形参和属性名一样时,需要显式的使用“this.属性”的方式,表示这个变量是属性,而不是形参。
this调用构造器:this(形参列表);
构造器无法通过this(形参列表)去调用自己
this(形参列表)调用构造器,必须声明在当前构造器首行
这篇博客详细介绍了面向对象编程的基本概念,包括类与对象、属性和方法的使用、方法重载、可变参数列表、值传递机制、递归以及封装和隐藏。讲解了如何在Java中实现这些概念,并探讨了构造器、JavaBean和this关键字的应用。内容涵盖了面向对象编程的核心要素,帮助初学者理解面向对象设计的重要性。

242

被折叠的 条评论
为什么被折叠?



