java面向对象

本文介绍了面向对象编程的基本概念,包括面向过程与面向对象的区别,面向对象的三大特征(封装、继承和多态),以及面向对象设计的原则。此外,还详细讲解了类和对象、方法的重载、参数传递(值传递与引用传递)和递归方法的概念。
摘要由CSDN通过智能技术生成

一. 简介

面向对象: Object Oriented Programming
面向过程,强调的是功能行为,以函数为最小单位
2. 面向过程: Procedure Oriented Programming
面向对象,将功能封装进对象,强调具备了功能的对象,以类 / 对象为最小单位,考虑谁来做。面
向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚
合、多态等。
3. 面向对象的三大特征
封装 (Encapsulation)
继承 (Inheritance)
多态 (Polymorphism)

面向对象原则:

1. 单一职责原则( Single Responsibility Principle
每一个类应该专注于做一件事情。
2. 里氏替换原则( Liskov Substitution Principle
超类存在的地方,子类是可以替换的。
3. 依赖倒置原则( Dependence Inversion Principle
实现尽量依赖抽象,不依赖具体实现。
4. 接口隔离原则( Interface Segregation Principle 应当为客户端提供尽可能小的单独的接口,而不是提供大的总的接口。
5. 迪米特法则( Law Of Demeter
又叫最少知识原则,一个软件实体应当尽可能少的与其他实体发生相互作用。
6. 开闭原则( Open Close Principle
面向扩展开放,面向修改关闭。
7. 组合 / 聚合复用原则( Composite/Aggregate Reuse Principle CARP
尽量使用合成 / 聚合达到复用,尽量少用继承。原则: 一个类中有另一个类的对象。

1.2  面向对象内容概述:

类和对象是面向对象的核心概念!  

类是对一类事物的描述,是抽象的,概念上的定义

对象是实际存在的该类食物的每个个体,因而也称为实例

可以理解为:类=抽象概念的人  对象=实实在在的某个人

面向对象程序设计的重点是类的设计

类的设计,其实就是类的成员的设计

1.3  类的成员

java中用类class来描述事物:  模具和产品的概念,常见的类的成员有:

属性: 对应类中的成员变量

行为: 对应类中的成员方法

 1.4 内存解析

Person类的成员变量以及方法加载到方法区->新建了p1对象,在栈里指向了内存地址,并且在队里开辟了空间,里边有此对象的方法和属性,后续将p1的name属性添加了“马云”,然后创建了新对象p2,并且开辟了内存空间,但未赋值。 

 1.4.1 代码分析

 1.5 属性 field

(alt + insert :创建所有)

1.6 方法 method

1.方法是类或对象行为特征的抽象,用来完成某个功能操作。在某些语言中也称为函数过程
2.将功能封装为方法的目的是,可以实现代码重用,简化代码
3.Java里的方法不能独立存在,所有的方法必须定义在类里。

1.7  方法的重载

在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
重载的特点:与返回值类型无关,只看参数列表,且参数列表必须不同。(参数个数或参数类型)
调用时,根据方法参数列表的不同来区别。

 必须参数要不同,1比2 :参数个数不同    2比3: 参数类型不同

调用时要根据方法参数列表的不同来区别。

 1.8 可变参数

函数是指定义在类中的一段可以独立运行的小程序,如方法,构造器等

java可变参数是指在调用方法时传入不定长度的参数,本质上是基于数组实现的

!!

定义在函数里面的是实参。例如 int a=0;  a是实参

声明定义函数的时候是形参 例如func(int b)  b就是形参

在函数定义中出现的参数可以看做是一个占位符,它没有数据,只能等到函数被调用时接收传递进来的数据,所以称为形式参数,简称形参

函数被调用时给出的参数包含了实实在在的数据,会被函数内部的代码使用,所以称为实际参数,简称实参

运行结果:

 1.9 参数传递

方法,必须由其所在类或对象调用才有意义

定义在函数里面的是实参。例如 int a=0;  a是实参

声明定义函数的时候是形参 例如func(int b)  b就是形参

java里方法的传递只有一种:值传递,就是将实际参数值的副本传入方法内,

本身不受影响。

1.9.1 基本数据类型参数传递:

将实际参数值的副本传入方法内,

本身不受影响。

public static void main(String[] args) {
int x = 5;
System.out.println("修改之前x = " + x);// 5
// x是实参
change(x);
System.out.println("修改之后x = " + x);// 5
}
public static void change(int x) {
System.out.println("change:修改之前x = " + x);
x = 3;
System.out.println("change:修改之后x = " + x);
}

//基本数据类型参数传递

1.9.2 引用类型参数传递

Java中数据类型分两类,基本数据类型和引用数据类型

1.基本数据类型:String.int.double等基本数据类型

2.引用数据类型:数组、接口、类等。

public static void main(String[] args) {


int[] arr = new int[]{1,2,3};
        test(arr);
        System.out.println(Arrays.toString(arr));

 static void test(int[]arr){
        arr[2] = 100;
    }

}
//  输出结果为{1,2,100}
这是一个引用数据类型传参,在函数体内对arr[2]进行了重新赋值,运行结果发现值变了,所以引用和基本数据类型的传递是有区别的;原因是:
当基本数据类型作为传递参数的时候,穿的就是参数的具体值,这里变量的值的确发生了改变,它是存储在栈里的,出了函数体就被销毁了,是两个完全不同的变量,而引用数据类型传递的是对象的首地址,相当于是又新建了一个栈内的对象,指向堆内的一块内存

1.9.3  小案例(代码分析)

public class Transfer2 {

    public static void main(String[] args) {

        int m = 10;
        int n = 20;
        System.out.println("m = " + m + ", n = " + n);

        Transfer2 test = new Transfer2();
        test.swap(m, n);

        System.out.println("m = " + m + ", n = " + n);
    }
    public void swap(int m,int n){
        int temp = m ;
        m = n;
        n = temp;
    }
}

//运行结果值未变

静态属性调用方法必须要创建对象才可以!!!

运行前:m = 20  n = 10   ;运行后: m = 10  n = 21;引用类型参数会影响原有值,也是和基本类型的区别。

2.0 递归方法

一个方法体内调用它自身:
1.方法递归包含了一种隐式的循环,他会重复执行某段代码,但这种重复执行无需循环控制
2.递归一定要向一直方向递归,否则就变成了无穷递归,类似死循环。
public static void main(String[] args) {
// 例1:计算1-100之间所有自然数的和
// 方式一:
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum);


//运行结果:打印1到100所有自然数的和。

3. 实例化和对象的区别

实例化指向创建对象之后,而对象更像是广义的概念:代码示例

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王_垒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值